package pgsql;
use strict;
+use lib ('.');
+use lib ('./api/lib');
use DBI;
use File::Basename;
#use DBD::mysql;
use Digest::SHA::PurePerl qw(sha256_hex);
# use lib (dirname($0).'/../lib');
-use lib ('.');
-use lib ('./lib');
+
use DBD::PgPP;
use URI::Encode qw(uri_encode uri_decode);
#use DBD::SQLite;
package session;
use strict;
-use File::Basename;
-use Digest::SHA qw(sha256_hex);
use lib ('.');
-use lib ('./lib');
use lib ('./api/lib');
+use File::Basename;
+use Digest::SHA qw(sha256_hex);
+
use pgsql;
use sendemail;
use Data::Dumper;
$html->{result}->{id} = $retid->{0};
#$p->{table},#$p->{field},$p->{value},$p->{id},$p->{type}
}
+ elsif ($p->{fn} eq "saveform"){
+ # $html->{p} = $p;
+ $html->{result}->{ident} = $p->{ident};
+ delete $p->{ident};
+ delete $p->{fn};
+ delete $p->{sid};
+ my $retid=undef;
+ my $type = "upd";
+ foreach my $px (keys(%{$p})){
+ $html->{result}->{datafield} = $px;
+ #$p->{$px} = $db->securetext($p->{$px});
+ if (($px =~ /\_id$/) && ($p->{$px} eq "")){
+ $type = "ins";
+
+ }
+ }
+ my @sql = ();
+ if ($type eq "ins"){
+ @sql = $db->create_ddl_insert($p);
+ }
+ else {
+ @sql = $db->create_ddl_update($p);
+ }
+ # $html->{sql} = \@sql;
+ foreach my $s (@sql){
+ #if ($type eq "ins"){
+ $retid= $db->dbquerysorted($s);
+ #}else {
+
+ #}
+
+ }
+ $html->{result}->{id} = $retid->{0};
+ #$p->{table},#$p->{field},$p->{value},$p->{id},$p->{type}
+ }
elsif ($p->{fn} eq "paypal_payement"){
# open (FF,">>paypalpayement.txt");
# print FF Dumper($p);
my $rep = report->new();
$rep->generatepdf($invid,'invoices','invoicedata','pdfname','invoice_dks','fr',dirname($ENV{"SCRIPT_FILENAME"}).'/reports');
}
+ elsif($p->{fn} eq "getevents"){
+ my $sql = "select * from geteventsbydisponibility(".$sess->{id}.",date('".$p->{startdate}."'),date('".$p->{enddate}."')) order by startdate,starttime;";
+ my $res = $db->dbquerysorted($sql);
+ $html->{result}->{sql} = $sql;
+ $html->{result}->{events} = $res;
+ }
}
}
==
UPDATE lawyercategories SET id_catalog='102',selection=null,id_category='15' WHERE id='201';
==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-01'),date('2019-06-01')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-01'),date('2019-06-01')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-01'),date('2019-06-01')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-04-01'),date('2019-04-08')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-04-01'),date('2019-05-01')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-05-27'),date('2019-06-03')) order by startdate,starttime;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select * from geteventsbydisponibility(4,date('2019-06-01'),date('2019-07-01')) order by startdate,starttime;
+==
use strict;
use File::Basename qw/dirname basename/;
-use lib ('../api/lib');
-use lib ('../lib');
+use lib ('./api/lib');
use Template;
# use Template::Constants qw( :debug );
use CGI;
- var apiurl = "http://localhost/juridig_lu/api/";
+ var apiurl = "http://localhost/juridig_lu/backoffice/";
function process_data(data,callback){
// console.log("process data");
where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
and se.remote_addr='::1'
and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='B37784F8ogItGd7706fQ533P0t0DaI065s82a62528P37w20r0'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+
+==
+select id from users where username='kilian@juridig.lu' and userpassword='0ecf731e2426a8a469f06e9f4a3bcbed6f8071d9d3e3ef7ef5fd9165021e27ec' and confirmkey is null and blocked is null;
+==
+
+==
+DELETE FROM sessions where id_user='4' and remote_addr='::1' and user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36';
+==
+
+==
+INSERT INTO sessions (id_user, idsession, remote_addr, user_agent) VALUES('4', 'a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh', '::1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36');
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='a75Na1oWBJrONV0WHq3lns4c77NtB4dIOlIH3r4XQmkD3Sxrgh'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select id from users where username='kilian@juridig.lu' and userpassword='0ecf731e2426a8a469f06e9f4a3bcbed6f8071d9d3e3ef7ef5fd9165021e27ec' and confirmkey is null and blocked is null;
+==
+
+==
+DELETE FROM sessions where id_user='4' and remote_addr='::1' and user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36';
+==
+
+==
+INSERT INTO sessions (id_user, idsession, remote_addr, user_agent) VALUES('4', '70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D', '::1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36');
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+DELETE FROM sessions WHERE idsession='70B6k0F6d0bo874S7830OC3d33N407b7c6aDhOpPxNXL05DH0D';
+==
+
+==
+select id from users where username='kilian@juridig.lu' and userpassword='0ecf731e2426a8a469f06e9f4a3bcbed6f8071d9d3e3ef7ef5fd9165021e27ec' and confirmkey is null and blocked is null;
+==
+
+==
+DELETE FROM sessions where id_user='4' and remote_addr='::1' and user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36';
+==
+
+==
+INSERT INTO sessions (id_user, idsession, remote_addr, user_agent) VALUES('4', '4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61', '::1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36');
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4TN2DI122115p51cSAfTMDARseL5upTmnHNU2812jWJ7V2Qt61'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select id from users where username='kilian@juridig.lu' and userpassword='0ecf731e2426a8a469f06e9f4a3bcbed6f8071d9d3e3ef7ef5fd9165021e27ec' and confirmkey is null and blocked is null;
+==
+
+==
+DELETE FROM sessions where id_user='4' and remote_addr='::1' and user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36';
+==
+
+==
+INSERT INTO sessions (id_user, idsession, remote_addr, user_agent) VALUES('4', '4E8GhJOx3X4J3XeutbrJoP874obO6KH3KIb3CiIL7qdMsH5B0F', '::1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36');
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4E8GhJOx3X4J3XeutbrJoP874obO6KH3KIb3CiIL7qdMsH5B0F'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4E8GhJOx3X4J3XeutbrJoP874obO6KH3KIb3CiIL7qdMsH5B0F'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4E8GhJOx3X4J3XeutbrJoP874obO6KH3KIb3CiIL7qdMsH5B0F'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
+
+==
+select se.idsession,us.id,us.username,us.email,us.prename,us.surname from sessions se
+join users us on (us.id=se.id_user)
+left join appaccess ac on (us.id=ac.id_user)
+where se.idsession='4E8GhJOx3X4J3XeutbrJoP874obO6KH3KIb3CiIL7qdMsH5B0F'
+and se.remote_addr='::1'
+and se.user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' and us.confirmkey is null and blocked is null;
+==
-[% viewapps = pgdb.prepare("select getactivated_apps as appname from getactivated_apps(?) order by appname;") %]
+[% viewapps = pgdb.prepare("select * from getactivated_apps2(?) order by name;") %]
<nav class="sidebar sidebar-offcanvas" id="sidebar">
<ul class="nav">
<!-- <li class="nav-item">
</a>
</li>
[% FOREACH myapps = viewapps.execute(session.id) %]
- [% IF myapps.appname == 'annuaire' %]
<li class="nav-item">
- <a class="nav-link" href="javascript:backoffice.loadpage('module/annuaire/index.html');">
- <i class="mdi mdi-contact-mail menu-icon"></i>
- <span class="menu-title">Annuaire</span>
+ <a class="nav-link" href="javascript:backoffice.loadpage('module/[% myapps.app %]/index.html');">
+ <span class="menu-title">[% myapps.name %]</span>
</a>
</li>
[% END %]
- [% IF myapps.appname == 'rendezvous' %]
- <li class="nav-item">
- <a class="nav-link" data-toggle="collapse" href="#ui-basic" aria-expanded="false" aria-controls="ui-basic">
- <i class="mdi mdi-circle-outline menu-icon"></i>
- <span class="menu-title">Rendez-Vous</span>
- <i class="menu-arrow"></i>
- </a>
- <div class="collapse" id="ui-basic">
- <ul class="nav flex-column sub-menu">
- <li class="nav-item"> <a class="nav-link" href="javascript:backoffice.loadpage('module/rendezvous/calendar.html');">Calendrier</a></li>
- <li class="nav-item"> <a class="nav-link" href="javascript:backoffice.loadpage('module/rendezvous/index.html');">Mes Rendez-Vous</a></li>
- <li class="nav-item"> <a class="nav-link" href="javascript:backoffice.loadpage('module/rendezvous/oldrdvlist.html');">Anciens Rendez-Vous</a></li>
- <li class="nav-item"> <a class="nav-link" href="javascript:backoffice.loadpage('module/rendezvous/clientlist.html');">List de clients</a></li>
-
- <li class="nav-item"> <a class="nav-link" href="javascript:backoffice.loadpage('module/rendezvous/timesheetlist.html');">Mes Horaires</a></li>
- <li class="nav-item"> <a class="nav-link" href="javascript:backoffice.loadpage('module/rendezvous/weekcalendar.html');">Calendrier/Horaires</a></li>
- </ul>
- </div>
- </li>
- [% END %]
- [% END %]
</ul>
</nav>
\ No newline at end of file
<span class="nav-profile-name"><i class="mdi mdi-account"></i> [% session.prename %] [% session.surname %]</span>
</a>
<div class="dropdown-menu dropdown-menu-right navbar-dropdown" aria-labelledby="profileDropdown">
- <a class="dropdown-item" href="javascript:backoffice.loadpage('module/profile.html');">
+ <a class="dropdown-item" href="javascript:backoffice.loadpage('module/profile/index.html');">
<i class="mdi mdi-settings"></i>
Profile
</a>
+++ /dev/null
-<h1>[% pagename %] [% module %]</h1>
\ No newline at end of file
-[% IF pagename == 'calendar' %]
- <link rel="stylesheet" href="[% abspath %]vendors/fontawesome/css/all.min.css" >
- <link rel="stylesheet" href="../../vendors/fullcalendar/fullcalendar.min.css" >
-[% END%]
\ No newline at end of file
+<link rel="stylesheet" href="[% abspath %]vendors/fontawesome/css/all.min.css" >
+ <link rel="stylesheet" href="[% abspath %]vendors/fullcalendar/core/main.min.css">
+ <link rel="stylesheet" href="n[% abspath %]vendors/fullcalendar/daygrid/main.min.css">
+ <link rel="stylesheet" href="[% abspath %]vendors/fullcalendar/timegrid/main.min.css">
+ <link rel="stylesheet" href="[% abspath %]vendors/fullcalendar/list/main.min.css">
+ <link rel="stylesheet" href="[% abspath %]vendors/fullcalendar/bootstrap/main.min.css">
+ <style>
+ .event-free {
+ color: #686868;
+ }
+ .event-confirmed {
+ color: #71c016;
+ }
+ .event-notconfirmed {
+ color: #ffc100;
+ }
+ .event-canceled {
+ color: #7859df;
+ }
+ .event-exception {
+ color: #ff4747;
+ }
+ </style>
--- /dev/null
+var calendar = null;
+
+document.addEventListener('DOMContentLoaded', function() {
+ var calendarEl = document.getElementById('calendar');
+
+ calendar = new FullCalendar.Calendar(calendarEl, {
+ customButtons: {
+ addEventButton: {
+ text: 'Nouveau RDV',
+ click: function() {
+ var dateStr = prompt('Enter a date in YYYY-MM-DD format');
+ var date = new Date(dateStr + 'T00:00:00'); // will be in local time
+
+ if (!isNaN(date.valueOf())) { // valid?
+ calendar.addEvent({
+ title: 'dynamic event',
+ start: date,
+ allDay: true
+ });
+ alert('Great. Now, update your database...');
+ } else {
+ alert('Invalid date.');
+ }
+ }
+ }
+ },
+ plugins: [ 'bootstrap','interaction', 'dayGrid', 'timeGrid','list' ],
+ defaultView: 'timeGridWeek',
+ themeSystem: 'bootstrap',
+ defaultDate: new Date().toISOString().substring(0,10),
+ allDaySlot: false,
+ weekNumbers: true,
+ header: {
+ left: 'prev,next today addEventButton',
+ center: 'title',
+ right: 'dayGridMonth,timeGridWeek,listMonth'
+ },
+ firstDay: 1,
+ dateClick: function() {
+ alert('a day has been clicked!');
+ },
+ eventClick: function(info) {
+ var eventObj = info.event;
+ alert('Clicked ' + eventObj.title);
+ },
+ viewSkeletonRender: function(info){
+ console.log("SKEL Render");
+ console.log(info);
+ getevents();
+ },
+ viewSkeletonDestroy: function(info){
+ console.log("SKEL Destroy");
+ removeEvents();
+ },
+ businessHours: {
+ daysOfWeek: [ 1, 2, 3, 4 , 5 ], // Monday - Thursday
+ startTime: '10:00', // a start time (10am in this example)
+ endTime: '18:00', // an end time (6pm in this example)
+ },
+ viewRender: function(view, element){
+ console.log("View Changed!");
+ },
+ eventTimeFormat: { // like '14:30:00'
+ hour: '2-digit',
+ minute: '2-digit'
+ },
+ selectable: true,
+ locale: 'fr'
+
+ });
+
+ calendar.render();
+ //getevents();
+});
+
+function getevents(){
+
+ var rdvtypes = [];
+ $('input[type=checkbox]').each(function(){
+ if ($(this).prop("checked")){
+ rdvtypes.push($(this).val());
+ }
+ });
+ console.log(calendar);
+
+ var pdata = {"fn":"getevents","types":rdvtypes,startdate:calendar.view.props.dateProfile.currentRange.start.toISOString().substring(0,10),enddate:calendar.view.props.dateProfile.currentRange.end.toISOString().substring(0,10)};
+ //console.log(pdata);
+ process_data(pdata,events_callback);
+}
+
+function removeEvents(){
+ var ev = calendar.getEvents();
+ for (var e in ev){
+ var rev = calendar.getEventById(ev[e].id);
+ rev.remove();
+ }
+}
+
+function events_callback(data){
+ //console.log(data);
+ for (var i in data.events){
+ //console.log(i);
+ calendar.addEvent({
+ id: data.events[i].id_event,
+ title: data.events[i].eventname,
+ start: data.events[i].startdate + "T" + data.events[i].starttime,
+ end: data.events[i].enddate + "T" + data.events[i].endtime,
+ color: $('#lbl' + data.events[i].eventcolor).css('color')
+ });
+ }
+
+}
+
+
+// events: [
+// {
+// title: 'Prename1 Surname2',
+// start: '2019-05-01T08:00',
+// color: '#ff00ff'
+// },
+// {
+// title: 'Long Event',
+// start: '2019-05-07T',
+// end: '2019-05-07'
+// },
+// {
+// groupId: '999',
+// title: 'Repeating Event',
+// start: '2019-05-09T16:00:00'
+// },
+// {
+// groupId: '999',
+// title: 'Repeating Event',
+// start: '2019-05-16T16:00:00'
+// },
+// {
+// title: 'Conference',
+// start: '2019-05-11',
+// end: '2019-05-13'
+// },
+// {
+// title: 'Meeting',
+// start: '2019-05-12T10:30:00',
+// end: '2019-05-12T12:30:00'
+// },
+// {
+// title: 'Lunch',
+// start: '2019-05-12T12:00:00'
+// },
+// {
+// title: 'Meeting',
+// start: '2019-05-12T14:30:00'
+// },
+// {
+// title: 'Birthday Party',
+// start: '2019-05-13T07:00:00'
+// },
+// {
+// title: 'Click for Google',
+// start: '2019-05-28'
+// }
+// ]
\ No newline at end of file
-[% IF session.group == 'avocat' %]
-[% rdvlist = pgdb.prepare("select ev.id,DATE_FORMAT(ev.eventdate,'%d/%m/%Y') as eventdate,ev.eventhour,ev.eventoptions,usr.userprename,usr.usersurname,ev.user_status,ev.client_status,ev.clientuuid,ev.useruuid from events ev LEFT JOIN users usr on (ev.id_client=usr.id) where ev.id_user=? and ev.eventdate >= CURRENT_DATE order by eventdate DESC,eventhour ASC;"); %]
-[% ELSE %]
-[% rdvlist =pgdb.prepare("select ev.id,DATE_FORMAT(ev.eventdate,'%d/%m/%Y') as eventdate,ev.eventoptions,ev.eventhour,usr.userprename,usr.usersurname,ev.user_status,ev.client_status,ev.clientuuid,ev.useruuid from events ev LEFT JOIN users usr on (ev.id_user=usr.id) where ev.id_client=? and ev.eventdate >= CURRENT_DATE order by eventdate DESC,eventhour ASC;") %]
-[% END %]
-<h5>Mes Rendez-Vous</h5>
-<table class="table table-striped table-bordered" data-toggle="table">
-<thead class="thead-dark"><tr>
-<th data-sortable="true">Date</th>
- <th data-sortable="true">Heure</th>
- <th data-sortable="true">
- [% IF session.group == 'client'%]
- Avocat
- [% ELSE %]
- Client
- [% END %]
- <th data-sortable="true">Options</th>
- <th data-sortable="true">Mon status</th>
- <th data-sortable="true">
- [% IF session.group == 'client'%]
- Status Avocat
- [% ELSE %]
- Status Client
- [% END %]
- </th>
- <th>Action</th>
- </tr></thead>
- <tbody>
- [% FOREACH rdv = rdvlist.execute(session.id) %]
- <tr data-id="[% rdv.id %]">
- <td>[% rdv.eventdate %]</td>
- <td>[% rdv.eventhour %]</td>
- <td>[% rdv.usersurname'].' '.$row['userprename %]</td>
- <td>[% rdv.eventoptions %]</td>
- [% IF $user['usergroup'] == 'client' %]
- <td>[% IFrdv.client_status == 'unconfirmed' %]
- <span class="text-warning">PAS CONFIRMÉ</span>
- [% ELSIF rdv.client_status == 'canceled' %]
- <span class="text-danger">ANNULÉ</span>
- [% ELSIF rdv.client_status == 'confirmed' %]
- <span class="text-success">CONFIRMÉ</span>
- [% ELSE %]
- <span class="text-warning">INCONNUE</span>
- [% END %]</td>
- <td>[% IF rdv.user_status == 'unconfirmed' %]
- <span class="text-warning">PAS CONFIRMÉ</span>
- [% ELSIF rdv.user_status == 'canceled' %]
- <span class="text-danger">ANNULÉ</span>
- [% ELSIF rdv.user_status == 'confirmed' %]
- <span class="text-success">CONFIRMÉ</span>
- [% ELSE %]
- <span class="text-warning">INCONNUE</span>
- [% END %]</td>
- [% ELSE %]
- <td>[% IF rdv.user_status == 'unconfirmed' %]
- <span class="text-warning">PAS CONFIRMÉ</span>
- [% ELSIF rdv.user_status == 'canceled' %]
- <span class="text-danger">ANNULÉ</span>
- [% ELSIF rdv.user_status == 'confirmed' %]
- <span class="text-success">CONFIRMÉ</span>
- [% ELSE %]
- <span class="text-warning">INCONNUE</span>
- [% END %]</td>
- <td>[% IF rdv.client_status == 'unconfirmed' %]
- <span class="text-warning">PAS CONFIRMÉ</span>
- [% ELSIF rdv.client_status == 'canceled' %]
- <span class="text-danger">ANNULÉ</span>
- [% ELSIF rdv.client_status == 'confirmed' %]
- <span class="text-success">CONFIRMÉ</span>
- [% ELSE %]
- <span class="text-warning">INCONNUE</span>
- [% END %]</td>
- [% END %]
- [% IF session.group == 'client' AND rdv.client_status == 'unconfirmed' %]
- <td><button class="btn btn-success" onclick="setstatus('confirm','[% rdv.rdvuuid %]');"><i class="fas fa-check"></i></button>
- <button class="btn btn-danger" onclick="setstatus('cancel','[% rdv.rdvuuid %]');"><i class="fas fa-times"></i></button></td>
- [% ELSE %]
- <td><button class="btn btn-info" onclick="openrdv('[% rdv.rdvuuid %]');"><i class="fas fa-edit"></i></button></td>
- [% END %]
- </tr>
- [% END %]
- </tbody>
-</table>
+<h1>Calendrier des Rendez-Vous</h1>
+<div class="row" id="eventcats">
+ <div class="form-inline">
+ <div class="custom-control custom-checkbox" style="margin-left: 20px; ">
+ <input type="checkbox" class="custom-control-input" value="free" id="cal_free" name="cal_free" checked>
+ <label class="custom-control-label event-free" id="lblfree" for="cal_free">libre</label>
+ </div>
+ <div class="custom-control custom-checkbox" style="margin-left: 20px; ">
+ <input type="checkbox" class="custom-control-input" value="confirmed" id="cal_confirmed" name="cal_confirmed" checked>
+ <label class="custom-control-label event-confirmed" id="lblconfirmed" for="cal_confirmed">confirmé</label>
+ </div>
+ <div class="custom-control custom-checkbox" style="margin-left: 20px; ">
+ <input type="checkbox" class="custom-control-input" value="notconfirmed" id="cal_notconfirmed" name="cal_notconfirmed" checked>
+ <label class="custom-control-label event-notconfirmed" id="lblnotconfirmed" for="cal_notconfirmed">pas confirmé</label>
+ </div>
+ <div class="custom-control custom-checkbox" style="margin-left: 20px; ">
+ <input type="checkbox" class="custom-control-input" value="exception" id="cal_exception" name="cal_exception" checked>
+ <label class="custom-control-label event-exception" id="lblexception" for="cal_exception">non disponible</label>
+ </div>
+ <div class="custom-control custom-checkbox" style="margin-left: 20px; ">
+ <input type="checkbox" class="custom-control-input" value="canceled" id="cal_canceled" name="cal_canceled" checked>
+ <label class="custom-control-label event-canceled" id="lblcanceled" for="cal_canceled">annulé</label>
+ </div>
+ </div>
+</div>
+<div id="calendar"></div>
\ No newline at end of file
-[% IF pagename == 'calendar' %]
-<script src="../../vendors/fullcalendar/fullcalendar.min.js"></script>
-<script src="../../vendors/fullcalendar/locale-all.js"></script>
-[% END %]
+
+<script src="[% abspath %]vendors/moment/moment-with-locales.min.js"></script>
+<script src="[% abspath %]vendors/fullcalendar/core/main.min.js"></script>
+<script src="[% abspath %]vendors/fullcalendar/interaction/main.min.js"></script>
+<script src="[% abspath %]vendors/fullcalendar/daygrid/main.min.js"></script>
+<script src="[% abspath %]vendors/fullcalendar/timegrid/main.min.js"></script>
+<script src="[% abspath %]vendors/fullcalendar/list/main.min.js"></script>
+<script src="[% abspath %]vendors/fullcalendar/bootstrap/main.min.js"></script>
<script src="[% pagename %].js"></script>
\ No newline at end of file
--- /dev/null
+[% IF session.group == 'avocat' %]
+[% rdvlist = pgdb.prepare("select ev.id,DATE_FORMAT(ev.eventdate,'%d/%m/%Y') as eventdate,ev.eventhour,ev.eventoptions,usr.userprename,usr.usersurname,ev.user_status,ev.client_status,ev.clientuuid,ev.useruuid from events ev LEFT JOIN users usr on (ev.id_client=usr.id) where ev.id_user=? and ev.eventdate >= CURRENT_DATE order by eventdate DESC,eventhour ASC;"); %]
+[% ELSE %]
+[% rdvlist =pgdb.prepare("select ev.id,DATE_FORMAT(ev.eventdate,'%d/%m/%Y') as eventdate,ev.eventoptions,ev.eventhour,usr.userprename,usr.usersurname,ev.user_status,ev.client_status,ev.clientuuid,ev.useruuid from events ev LEFT JOIN users usr on (ev.id_user=usr.id) where ev.id_client=? and ev.eventdate >= CURRENT_DATE order by eventdate DESC,eventhour ASC;") %]
+[% END %]
+<h5>Mes Rendez-Vous</h5>
+<table class="table table-striped table-bordered" data-toggle="table">
+<thead class="thead-dark"><tr>
+<th data-sortable="true">Date</th>
+ <th data-sortable="true">Heure</th>
+ <th data-sortable="true">
+ [% IF session.group == 'client'%]
+ Avocat
+ [% ELSE %]
+ Client
+ [% END %]
+ <th data-sortable="true">Options</th>
+ <th data-sortable="true">Mon status</th>
+ <th data-sortable="true">
+ [% IF session.group == 'client'%]
+ Status Avocat
+ [% ELSE %]
+ Status Client
+ [% END %]
+ </th>
+ <th>Action</th>
+ </tr></thead>
+ <tbody>
+ [% FOREACH rdv = rdvlist.execute(session.id) %]
+ <tr data-id="[% rdv.id %]">
+ <td>[% rdv.eventdate %]</td>
+ <td>[% rdv.eventhour %]</td>
+ <td>[% rdv.usersurname'].' '.$row['userprename %]</td>
+ <td>[% rdv.eventoptions %]</td>
+ [% IF $user['usergroup'] == 'client' %]
+ <td>[% IFrdv.client_status == 'unconfirmed' %]
+ <span class="text-warning">PAS CONFIRMÉ</span>
+ [% ELSIF rdv.client_status == 'canceled' %]
+ <span class="text-danger">ANNULÉ</span>
+ [% ELSIF rdv.client_status == 'confirmed' %]
+ <span class="text-success">CONFIRMÉ</span>
+ [% ELSE %]
+ <span class="text-warning">INCONNUE</span>
+ [% END %]</td>
+ <td>[% IF rdv.user_status == 'unconfirmed' %]
+ <span class="text-warning">PAS CONFIRMÉ</span>
+ [% ELSIF rdv.user_status == 'canceled' %]
+ <span class="text-danger">ANNULÉ</span>
+ [% ELSIF rdv.user_status == 'confirmed' %]
+ <span class="text-success">CONFIRMÉ</span>
+ [% ELSE %]
+ <span class="text-warning">INCONNUE</span>
+ [% END %]</td>
+ [% ELSE %]
+ <td>[% IF rdv.user_status == 'unconfirmed' %]
+ <span class="text-warning">PAS CONFIRMÉ</span>
+ [% ELSIF rdv.user_status == 'canceled' %]
+ <span class="text-danger">ANNULÉ</span>
+ [% ELSIF rdv.user_status == 'confirmed' %]
+ <span class="text-success">CONFIRMÉ</span>
+ [% ELSE %]
+ <span class="text-warning">INCONNUE</span>
+ [% END %]</td>
+ <td>[% IF rdv.client_status == 'unconfirmed' %]
+ <span class="text-warning">PAS CONFIRMÉ</span>
+ [% ELSIF rdv.client_status == 'canceled' %]
+ <span class="text-danger">ANNULÉ</span>
+ [% ELSIF rdv.client_status == 'confirmed' %]
+ <span class="text-success">CONFIRMÉ</span>
+ [% ELSE %]
+ <span class="text-warning">INCONNUE</span>
+ [% END %]</td>
+ [% END %]
+ [% IF session.group == 'client' AND rdv.client_status == 'unconfirmed' %]
+ <td><button class="btn btn-success" onclick="setstatus('confirm','[% rdv.rdvuuid %]');"><i class="fas fa-check"></i></button>
+ <button class="btn btn-danger" onclick="setstatus('cancel','[% rdv.rdvuuid %]');"><i class="fas fa-times"></i></button></td>
+ [% ELSE %]
+ <td><button class="btn btn-info" onclick="openrdv('[% rdv.rdvuuid %]');"><i class="fas fa-edit"></i></button></td>
+ [% END %]
+ </tr>
+ [% END %]
+ </tbody>
+</table>
[% INCLUDE block/sidebar.tt %]
<div class="main-panel">
<div class="content-wrapper" style="margin: 0px; padding: 0px;">
- <iframe id="moduleframe" src="module/applications.html" style="bottom: 0px;border: 0px;height: 88vh;width: 100%; overflow-y: scroll;"></iframe>
+ <iframe id="moduleframe" src="module/applications.html" style="bottom: 0px;border: 0px;height: 92vh;width: 100%; overflow-y: scroll;"></iframe>
</div>
</div>
</div>
<!-- <link rel="stylesheet" href="[% abspath %]vendors/bootstrap/css/bootstrap.min.css"> -->
<link rel="stylesheet" href="[% abspath %]css/style.css">
- [% INCLUDE module/$module/css.tt %]
+ [% INCLUDE "module/$module/css.tt" %]
</head>
<body>
<script src="[% abspath %]vendors/jquery/jquery.min.js"></script>
<script src="[% abspath %]vendors/bootstrap/js/bootstrap.bundle.min.js"></script>
<script src="[% abspath %]js/modules_global.js"></script>
- [% INCLUDE module/$module/javascript.tt %]
+ [% INCLUDE "module/$module/javascript.tt" %]
</body>
--- /dev/null
+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.
--- /dev/null
+
+# 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)
--- /dev/null
+/*!
+FullCalendar Bootstrap Plugin v4.1.0
+Docs & License: https://fullcalendar.io/
+(c) 2019 Adam Shaw
+*/
+.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; }
--- /dev/null
+declare module "@fullcalendar/bootstrap" {
+ import { Theme } from "@fullcalendar/core";
+ export class BootstrapTheme extends Theme {
+ }
+ const _default_5: import("@fullcalendar/core/plugin-system").PluginDef;
+ export default _default_5;
+}
\ No newline at end of file
--- /dev/null
+/*!
+FullCalendar Bootstrap Plugin v4.1.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 });
+
+}));
--- /dev/null
+/*!
+FullCalendar Bootstrap Plugin v4.1.0
+Docs & License: https://fullcalendar.io/
+(c) 2019 Adam Shaw
+*/.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
--- /dev/null
+/*!
+FullCalendar Bootstrap Plugin v4.1.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):(e=e||self,t(e.FullCalendarBootstrap={},e.FullCalendar))}(this,function(e,t){"use strict";function o(e,t){function o(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}/*! *****************************************************************************
+ 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 r=function(e,t){return(r=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)},a=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return o(t,e),t}(t.Theme);a.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"},a.prototype.baseIconClass="fa",a.prototype.iconClasses={close:"fa-times",prev:"fa-chevron-left",next:"fa-chevron-right",prevYear:"fa-angle-double-left",nextYear:"fa-angle-double-right"},a.prototype.iconOverrideOption="bootstrapFontAwesome",a.prototype.iconOverrideCustomButtonOption="bootstrapFontAwesome",a.prototype.iconOverridePrefix="fa-";var n=t.createPlugin({themeClasses:{bootstrap:a}});e.BootstrapTheme=a,e.default=n,Object.defineProperty(e,"__esModule",{value:!0})});
\ No newline at end of file
--- /dev/null
+{
+ "_from": "@fullcalendar/bootstrap",
+ "_id": "@fullcalendar/bootstrap@4.1.0",
+ "_inBundle": false,
+ "_integrity": "sha512-mfgs8hg2Uo+P+fQQ/de3r9/VTezgiPH0KO01dM2sqN7Bi7jetyBxI97bl1EEF2fhkoDRMMv28pfsoY3saUP64Q==",
+ "_location": "/@fullcalendar/bootstrap",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "tag",
+ "registry": true,
+ "raw": "@fullcalendar/bootstrap",
+ "name": "@fullcalendar/bootstrap",
+ "escapedName": "@fullcalendar%2fbootstrap",
+ "scope": "@fullcalendar",
+ "rawSpec": "",
+ "saveSpec": null,
+ "fetchSpec": "latest"
+ },
+ "_requiredBy": [
+ "#USER",
+ "/"
+ ],
+ "_resolved": "https://registry.npmjs.org/@fullcalendar/bootstrap/-/bootstrap-4.1.0.tgz",
+ "_shasum": "489aabfddd4b82d72616f5acbdf109df27bc95be",
+ "_spec": "@fullcalendar/bootstrap",
+ "_where": "C:\\Users\\ksaff\\Workspace\\Websites\\fullcalendar",
+ "author": {
+ "name": "Adam Shaw",
+ "email": "arshaw@arshaw.com",
+ "url": "http://arshaw.com/"
+ },
+ "bugs": {
+ "url": "https://fullcalendar.io/reporting-bugs"
+ },
+ "bundleDependencies": false,
+ "copyright": "2019 Adam Shaw",
+ "deprecated": false,
+ "description": "Bootstrap 4 theming for your calendar",
+ "docs": "https://fullcalendar.io/docs/bootstrap-theme",
+ "homepage": "https://fullcalendar.io/",
+ "keywords": [
+ "calendar",
+ "event",
+ "full-sized"
+ ],
+ "license": "MIT",
+ "main": "main.js",
+ "name": "@fullcalendar/bootstrap",
+ "peerDependencies": {
+ "@fullcalendar/core": "~4.1.0"
+ },
+ "releaseDate": "2019-04-24",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/fullcalendar/fullcalendar.git",
+ "homepage": "https://github.com/fullcalendar/fullcalendar"
+ },
+ "title": "FullCalendar Bootstrap Plugin",
+ "types": "main.d.ts",
+ "unpkg": "main.min.js",
+ "version": "4.1.0"
+}
--- /dev/null
+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.
--- /dev/null
+
+# FullCalendar Core Package
+
+Provides core functionality, including the Calendar class
+
+[View the docs »](https://fullcalendar.io/docs/initialize-es6)
+
+This package was created from the [FullCalendar monorepo »](https://github.com/fullcalendar/fullcalendar)
--- /dev/null
+/*!
+FullCalendar Core Package v4.1.0
+Docs & License: https://fullcalendar.io/
+(c) 2019 Adam Shaw
+*/
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, global.FullCalendarLocalesAll = factory());
+}(this, function () { 'use strict';
+
+ var _m0 = {
+ 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"
+ };
+
+ var _m1 = {
+ 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: "أي أحداث لعرض"
+ };
+
+ var _m2 = {
+ 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: "أي أحداث لعرض"
+ };
+
+ var _m3 = {
+ 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: "أي أحداث لعرض"
+ };
+
+ var _m4 = {
+ 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: "أي أحداث لعرض"
+ };
+
+ var _m5 = {
+ 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: "أي أحداث لعرض"
+ };
+
+ var _m6 = {
+ 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: "أي أحداث لعرض"
+ };
+
+ var _m7 = {
+ 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: "أي أحداث لعرض"
+ };
+
+ var _m8 = {
+ 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: "Няма събития за показване"
+ };
+
+ var _m9 = {
+ 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"
+ };
+
+ var _m10 = {
+ 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"
+ };
+
+ var _m11 = {
+ 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í"
+ };
+
+ var _m12 = {
+ 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: "Idag",
+ month: "Måned",
+ week: "Uge",
+ day: "Dag",
+ list: "Agenda"
+ },
+ weekLabel: "Uge",
+ allDayText: "Hele dagen",
+ eventLimitText: "flere",
+ noEventsMessage: "Ingen arrangementer at vise"
+ };
+
+ var _m13 = {
+ 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"
+ };
+
+ var _m14 = {
+ 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: "Δεν υπάρχουν γεγονότα για να εμφανιστεί"
+ };
+
+ var _m15 = {
+ code: "en-au",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ };
+
+ var _m16 = {
+ code: "en-gb",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ };
+
+ var _m17 = {
+ code: "en-nz",
+ week: {
+ dow: 1,
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ };
+
+ var _m18 = {
+ 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<br/>el día",
+ eventLimitText: "más",
+ noEventsMessage: "No hay eventos para mostrar"
+ };
+
+ var _m19 = {
+ 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<br/>el día",
+ eventLimitText: "más",
+ noEventsMessage: "No hay eventos para mostrar"
+ };
+
+ var _m20 = {
+ 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 _m21 = {
+ 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<br/>osoa",
+ eventLimitText: "gehiago",
+ noEventsMessage: "Ez dago ekitaldirik erakusteko"
+ };
+
+ var _m22 = {
+ 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 _m23 = {
+ 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 _m24 = {
+ 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<br/>journée",
+ eventLimitText: "en plus",
+ noEventsMessage: "Aucun événement à afficher"
+ };
+
+ var _m25 = {
+ 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<br/>journée",
+ eventLimitText: "en plus",
+ noEventsMessage: "Aucun événement à afficher"
+ };
+
+ var _m26 = {
+ 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: "Mon planning"
+ },
+ weekLabel: "Sem.",
+ allDayHtml: "Toute la<br/>journée",
+ eventLimitText: "en plus",
+ noEventsMessage: "Aucun événement à afficher"
+ };
+
+ var _m27 = {
+ 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<br/>o día",
+ eventLimitText: "máis",
+ noEventsMessage: "Non hai eventos para amosar"
+ };
+
+ var _m28 = {
+ code: "he",
+ dir: 'rtl',
+ buttonText: {
+ prev: "הקודם",
+ next: "הבא",
+ today: "היום",
+ month: "חודש",
+ week: "שבוע",
+ day: "יום",
+ list: "סדר יום"
+ },
+ allDayText: "כל היום",
+ eventLimitText: "אחר",
+ noEventsMessage: "אין אירועים להצגה",
+ weekLabel: "שבוע"
+ };
+
+ var _m29 = {
+ 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 _m30 = {
+ 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 _m31 = {
+ 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 _m32 = {
+ 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<br/>penuh",
+ eventLimitText: "lebih",
+ noEventsMessage: "Tidak ada acara untuk ditampilkan"
+ };
+
+ var _m33 = {
+ 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<br/>daginn",
+ eventLimitText: "meira",
+ noEventsMessage: "Engir viðburðir til að sýna"
+ };
+
+ var _m34 = {
+ 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<br/>giorno",
+ eventLimitText: function (n) {
+ return "+altri " + n;
+ },
+ noEventsMessage: "Non ci sono eventi da visualizzare"
+ };
+
+ var _m35 = {
+ code: "ja",
+ buttonText: {
+ prev: "前",
+ next: "次",
+ today: "今日",
+ month: "月",
+ week: "週",
+ day: "日",
+ list: "予定リスト"
+ },
+ weekLabel: "週",
+ allDayText: "終日",
+ eventLimitText: function (n) {
+ return "他 " + n + " 件";
+ },
+ noEventsMessage: "表示する予定はありません"
+ };
+
+ var _m36 = {
+ code: "ka",
+ week: {
+ dow: 1,
+ doy: 7
+ },
+ buttonText: {
+ prev: "წინა",
+ next: "შემდეგი",
+ today: "დღეს",
+ month: "თვე",
+ week: "კვირა",
+ day: "დღე",
+ list: "დღის წესრიგი"
+ },
+ weekLabel: "კვ",
+ allDayText: "მთელი დღე",
+ eventLimitText: function (n) {
+ return "+ კიდევ " + n;
+ },
+ noEventsMessage: "ღონისძიებები არ არის"
+ };
+
+ var _m37 = {
+ 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 _m38 = {
+ code: "ko",
+ buttonText: {
+ prev: "이전달",
+ next: "다음달",
+ today: "오늘",
+ month: "월",
+ week: "주",
+ day: "일",
+ list: "일정목록"
+ },
+ weekLabel: "주",
+ allDayText: "종일",
+ eventLimitText: "개",
+ noEventsMessage: "일정이 없습니다"
+ };
+
+ var _m39 = {
+ 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 _m40 = {
+ 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 _m41 = {
+ 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 _m42 = {
+ code: "mk",
+ buttonText: {
+ prev: "претходно",
+ next: "следно",
+ today: "Денес",
+ month: "Месец",
+ week: "Недела",
+ day: "Ден",
+ list: "График"
+ },
+ weekLabel: "Сед",
+ allDayText: "Цел ден",
+ eventLimitText: function (n) {
+ return "+повеќе " + n;
+ },
+ noEventsMessage: "Нема настани за прикажување"
+ };
+
+ var _m43 = {
+ 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 _m44 = {
+ 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 _m45 = {
+ 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 _m46 = {
+ 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 _m47 = {
+ 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 _m48 = {
+ code: "pt-br",
+ buttonText: {
+ prev: "Anterior",
+ next: "Próximo",
+ today: "Hoje",
+ month: "Mês",
+ week: "Semana",
+ day: "Dia",
+ list: "Compromissos"
+ },
+ weekLabel: "Sm",
+ allDayText: "dia inteiro",
+ eventLimitText: function (n) {
+ return "mais +" + n;
+ },
+ noEventsMessage: "Não há eventos para mostrar"
+ };
+
+ var _m49 = {
+ 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 _m50 = {
+ 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 _m51 = {
+ 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 _m52 = {
+ 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 _m53 = {
+ 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 _m54 = {
+ 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ë<br/>ditën",
+ eventLimitText: function (n) {
+ return "+më tepër " + n;
+ },
+ noEventsMessage: "Nuk ka evente për të shfaqur"
+ };
+
+ var _m55 = {
+ 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 _m56 = {
+ 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 _m57 = {
+ 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 _m58 = {
+ code: "th",
+ buttonText: {
+ prev: "ย้อน",
+ next: "ถัดไป",
+ today: "วันนี้",
+ month: "เดือน",
+ week: "สัปดาห์",
+ day: "วัน",
+ list: "แผนงาน"
+ },
+ allDayText: "ตลอดวัน",
+ eventLimitText: "เพิ่มเติม",
+ noEventsMessage: "ไม่มีกิจกรรมที่จะแสดง"
+ };
+
+ var _m59 = {
+ 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 _m60 = {
+ 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 _m61 = {
+ 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 _m62 = {
+ 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 _m63 = {
+ code: "zh-tw",
+ buttonText: {
+ prev: "上月",
+ next: "下月",
+ today: "今天",
+ month: "月",
+ week: "週",
+ day: "天",
+ list: "活動列表"
+ },
+ weekLabel: "周",
+ allDayText: "整天",
+ eventLimitText: '顯示更多',
+ noEventsMessage: "没有任何活動"
+ };
+
+ var _arrayEntry = [
+ _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
+ ];
+
+ return _arrayEntry;
+
+}));
--- /dev/null
+/*!
+FullCalendar Core Package v4.1.0
+Docs & License: https://fullcalendar.io/
+(c) 2019 Adam Shaw
+*/
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self,e.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:"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:"Idag",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<br/>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<br/>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<br/>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<br/>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<br/>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:"Mon planning"},weekLabel:"Sem.",allDayHtml:"Toute la<br/>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<br/>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<br/>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<br/>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<br/>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:"Compromissos"},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ë<br/>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",buttonText:{prev:"ย้อน",next:"ถัดไป",today:"วันนี้",month:"เดือน",week:"สัปดาห์",day:"วัน",list:"แผนงาน"},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:"uk",week:{dow:1,doy:7},buttonText:{prev:"Попередній",next:"далі",today:"Сьогодні",month:"Місяць",week:"Тиждень",day:"День",list:"Порядок денний"},weekLabel:"Тиж",allDayText:"Увесь день",eventLimitText:function(e){return"+ще "+e+"..."},noEventsMessage:"Немає подій для відображення"},{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
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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: "Idag",
+ month: "Måned",
+ week: "Uge",
+ day: "Dag",
+ list: "Agenda"
+ },
+ weekLabel: "Uge",
+ allDayText: "Hele dagen",
+ eventLimitText: "flere",
+ noEventsMessage: "Ingen arrangementer at vise"
+ };
+
+ return da;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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<br/>el día",
+ eventLimitText: "más",
+ noEventsMessage: "No hay eventos para mostrar"
+ };
+
+ return esUs;
+
+}));
--- /dev/null
+(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<br/>el día",
+ eventLimitText: "más",
+ noEventsMessage: "No hay eventos para mostrar"
+ };
+
+ return es;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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<br/>osoa",
+ eventLimitText: "gehiago",
+ noEventsMessage: "Ez dago ekitaldirik erakusteko"
+ };
+
+ return eu;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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<br/>journée",
+ eventLimitText: "en plus",
+ noEventsMessage: "Aucun événement à afficher"
+ };
+
+ return frCa;
+
+}));
--- /dev/null
+(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<br/>journée",
+ eventLimitText: "en plus",
+ noEventsMessage: "Aucun événement à afficher"
+ };
+
+ return frCh;
+
+}));
--- /dev/null
+(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: "Mon planning"
+ },
+ weekLabel: "Sem.",
+ allDayHtml: "Toute la<br/>journée",
+ eventLimitText: "en plus",
+ noEventsMessage: "Aucun événement à afficher"
+ };
+
+ return fr;
+
+}));
--- /dev/null
+(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<br/>o día",
+ eventLimitText: "máis",
+ noEventsMessage: "Non hai eventos para amosar"
+ };
+
+ return gl;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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<br/>penuh",
+ eventLimitText: "lebih",
+ noEventsMessage: "Tidak ada acara untuk ditampilkan"
+ };
+
+ return id;
+
+}));
--- /dev/null
+(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<br/>daginn",
+ eventLimitText: "meira",
+ noEventsMessage: "Engir viðburðir til að sýna"
+ };
+
+ return is;
+
+}));
--- /dev/null
+(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<br/>giorno",
+ eventLimitText: function (n) {
+ return "+altri " + n;
+ },
+ noEventsMessage: "Non ci sono eventi da visualizzare"
+ };
+
+ return it;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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: "Compromissos"
+ },
+ weekLabel: "Sm",
+ allDayText: "dia inteiro",
+ eventLimitText: function (n) {
+ return "mais +" + n;
+ },
+ noEventsMessage: "Não há eventos para mostrar"
+ };
+
+ return ptBr;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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ë<br/>ditën",
+ eventLimitText: function (n) {
+ return "+më tepër " + n;
+ },
+ noEventsMessage: "Nuk ka evente për të shfaqur"
+ };
+
+ return sq;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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",
+ buttonText: {
+ prev: "ย้อน",
+ next: "ถัดไป",
+ today: "วันนี้",
+ month: "เดือน",
+ week: "สัปดาห์",
+ day: "วัน",
+ list: "แผนงาน"
+ },
+ allDayText: "ตลอดวัน",
+ eventLimitText: "เพิ่มเติม",
+ noEventsMessage: "ไม่มีกิจกรรมที่จะแสดง"
+ };
+
+ return th;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+(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;
+
+}));
--- /dev/null
+/*!
+FullCalendar Core Package v4.1.0
+Docs & License: https://fullcalendar.io/
+(c) 2019 Adam Shaw
+*/
+.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: .3; }
+
+.fc-bgevent {
+ /* default look for background events */
+ background: #8fdf82;
+ opacity: .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 <td>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 <a> tag block */
+ font-size: .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 <a> 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: .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: .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: .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: .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,AAEAAAALAIAAAwAwT1MvMg8SBfAAAAC8AAAAYGNtYXAXVtKNAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZgYydxIAAAF4AAAFNGhlYWQUJ7cIAAAGrAAAADZoaGVhB20DzAAABuQAAAAkaG10eCIABhQAAAcIAAAALGxvY2ED4AU6AAAHNAAAABhtYXhwAA8AjAAAB0wAAAAgbmFtZXsr690AAAdsAAABhnBvc3QAAwAAAAAI9AAAACAAAwPAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpBgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6Qb//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAWIAjQKeAskAEwAAJSc3NjQnJiIHAQYUFwEWMjc2NCcCnuLiDQ0MJAz/AA0NAQAMJAwNDcni4gwjDQwM/wANIwz/AA0NDCMNAAAAAQFiAI0CngLJABMAACUBNjQnASYiBwYUHwEHBhQXFjI3AZ4BAA0N/wAMJAwNDeLiDQ0MJAyNAQAMIw0BAAwMDSMM4uINIwwNDQAAAAIA4gC3Ax4CngATACcAACUnNzY0JyYiDwEGFB8BFjI3NjQnISc3NjQnJiIPAQYUHwEWMjc2NCcB87e3DQ0MIw3VDQ3VDSMMDQ0BK7e3DQ0MJAzVDQ3VDCQMDQ3zuLcMJAwNDdUNIwzWDAwNIwy4twwkDA0N1Q0jDNYMDA0jDAAAAgDiALcDHgKeABMAJwAAJTc2NC8BJiIHBhQfAQcGFBcWMjchNzY0LwEmIgcGFB8BBwYUFxYyNwJJ1Q0N1Q0jDA0Nt7cNDQwjDf7V1Q0N1QwkDA0Nt7cNDQwkDLfWDCMN1Q0NDCQMt7gMIw0MDNYMIw3VDQ0MJAy3uAwjDQwMAAADAFUAAAOrA1UAMwBoAHcAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMhMjY1NCYjISIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAAVYRGRkR/qoRGRkRA1UFBAUOCQkVDAsZDf2rDRkLDBUJCA4FBQUFBQUOCQgVDAsZDQJVDRkLDBUJCQ4FBAVVAgECBQMCBwQECAX9qwQJAwQHAwMFAQICAgIBBQMDBwQDCQQCVQUIBAQHAgMFAgEC/oAZEhEZGRESGQAAAAADAFUAAAOrA1UAMwBoAIkAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMzFRQWMzI2PQEzMjY1NCYrATU0JiMiBh0BIyIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAgBkSEhmAERkZEYAZEhIZgBEZGREDVQUEBQ4JCRUMCxkN/asNGQsMFQkIDgUFBQUFBQ4JCBUMCxkNAlUNGQsMFQkJDgUEBVUCAQIFAwIHBAQIBf2rBAkDBAcDAwUBAgICAgEFAwMHBAMJBAJVBQgEBAcCAwUCAQL+gIASGRkSgBkSERmAEhkZEoAZERIZAAABAOIAjQMeAskAIAAAExcHBhQXFjI/ARcWMjc2NC8BNzY0JyYiDwEnJiIHBhQX4uLiDQ0MJAzi4gwkDA0N4uINDQwkDOLiDCQMDQ0CjeLiDSMMDQ3h4Q0NDCMN4uIMIw0MDOLiDAwNIwwAAAABAAAAAQAAa5n0y18PPPUACwQAAAAAANivOVsAAAAA2K85WwAAAAADqwNVAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAOrAAEAAAAAAAAAAAAAAAAAAAALBAAAAAAAAAAAAAAAAgAAAAQAAWIEAAFiBAAA4gQAAOIEAABVBAAAVQQAAOIAAAAAAAoAFAAeAEQAagCqAOoBngJkApoAAQAAAAsAigADAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAcAAAABAAAAAAACAAcAYAABAAAAAAADAAcANgABAAAAAAAEAAcAdQABAAAAAAAFAAsAFQABAAAAAAAGAAcASwABAAAAAAAKABoAigADAAEECQABAA4ABwADAAEECQACAA4AZwADAAEECQADAA4APQADAAEECQAEAA4AfAADAAEECQAFABYAIAADAAEECQAGAA4AUgADAAEECQAKADQApGZjaWNvbnMAZgBjAGkAYwBvAG4Ac1ZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGZjaWNvbnMAZgBjAGkAYwBvAG4Ac2ZjaWNvbnMAZgBjAGkAYwBvAG4Ac1JlZ3VsYXIAUgBlAGcAdQBsAGEAcmZjaWNvbnMAZgBjAGkAYwBvAG4Ac0ZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") 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: "\e900"; }
+
+.fc-icon-chevron-right:before {
+ content: "\e901"; }
+
+.fc-icon-chevrons-left:before {
+ content: "\e902"; }
+
+.fc-icon-chevrons-right:before {
+ content: "\e903"; }
+
+.fc-icon-minus-square:before {
+ content: "\e904"; }
+
+.fc-icon-plus-square:before {
+ content: "\e905"; }
+
+.fc-icon-x:before {
+ content: "\e906"; }
+
+.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: .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 */ } }
--- /dev/null
+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<HTMLElement>, 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/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/scrollbars" {
+ export function getIsRtlScrollbarOnLeft(): boolean;
+ export function sanitizeScrollbarWidth(width: number): number;
+}
+
+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 getClippingParents(el: HTMLElement): HTMLElement[];
+ export function computeClippingRect(el: HTMLElement): Rect;
+}
+
+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/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/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/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/util/object" {
+ export function mergeProps(propObjs: any, complexProps?: any): any;
+ export function filterHash(hash: any, func: any): {};
+ export function mapHash<InputItem, OutputItem>(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[];
+}
+
+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/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/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<T>(workerFunc: T): T;
+ export function memoizeOutput<T>(workerFunc: T, equalityFunc: (output0: any, output1: any) => boolean): T;
+}
+
+declare module "@fullcalendar/core/datelib/formatting-native" {
+ import { DateFormatter, DateFormattingContext, ZonedMarker } from "@fullcalendar/core/datelib/formatting";
+ export class NativeFormatter implements DateFormatter {
+ standardDateProps: any;
+ extendedSettings: any;
+ severity: number;
+ private buildFormattingFunc;
+ constructor(formatSettings: any);
+ format(date: ZonedMarker, context: DateFormattingContext): string;
+ formatRange(start: ZonedMarker, end: ZonedMarker, context: DateFormattingContext): string;
+ getLargestUnit(): "week" | "day" | "month" | "year";
+ }
+}
+
+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/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/parsing" {
+ export function parse(str: any): {
+ marker: Date;
+ isTimeUnspecified: boolean;
+ timeZoneOffset: any;
+ };
+}
+
+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/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/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 freezeRaw(raw: any): any;
+ 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/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/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/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, framingRange: DateRange, dateEnv: DateEnv, recurringTypes: RecurringType[]): DateMarker[];
+}
+
+declare module "@fullcalendar/core/util/promise" {
+ export function unpromisify(func: any, success: any, failure?: any): void;
+}
+
+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<EventInput[]>);
+ const _default: import("@fullcalendar/core/plugin-system").PluginDef;
+ export default _default;
+}
+
+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<EventInput[]>);
+ 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/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/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<any>;
+ dateSpan: DateSpan;
+ dayEl: HTMLElement;
+ rect: Rect;
+ layer: number;
+ }
+}
+
+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 {
+ 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/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/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: string): 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/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;
+ constructor(context: ComponentContext);
+ renderSegs(segs: Seg[], mirrorInfo?: any): void;
+ unrender(_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/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/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(context: ComponentContext);
+ getSegsByType(type: string): any;
+ renderSegs(type: any, segs: Seg[]): void;
+ unrender(type: any): 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/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/DateComponent" {
+ import Component, { ComponentContext } 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<any>;
+ };
+ export interface Seg {
+ component?: DateComponent<any>;
+ 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<PropsType> extends Component<PropsType> {
+ fgSegSelector: string;
+ bgSegSelector: string;
+ largeUnit: any;
+ eventRenderer: FgEventRenderer;
+ mirrorRenderer: FgEventRenderer;
+ fillRenderer: FillRenderer;
+ el: HTMLElement;
+ constructor(context: ComponentContext, el: HTMLElement, isView?: boolean);
+ destroy(): void;
+ buildPositionCaches(): void;
+ queryHit(positionLeft: number, positionTop: number, elWidth: number, elHeight: number): Hit | null;
+ isInteractionValid(interaction: EventInteractionState): boolean;
+ isDateSelectionValid(selection: DateSpan): boolean;
+ publiclyTrigger(name: any, args: any): any;
+ publiclyTriggerAfterSizing(name: any, args: any): void;
+ hasPublicHandlers(name: any): boolean;
+ triggerRenderedSegs(segs: Seg[], isMirrors: boolean): void;
+ triggerWillRemoveSegs(segs: Seg[], isMirrors: boolean): void;
+ isValidSegDownEl(el: HTMLElement): boolean;
+ isValidDateDownEl(el: HTMLElement): boolean;
+ isPopover(): boolean;
+ isInPopover(el: HTMLElement): boolean;
+ }
+}
+
+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 View from "@fullcalendar/core/View";
+ import { EventUi, EventUiHash } from "@fullcalendar/core/component/event-ui";
+ 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(view: View, segs: Seg[], isMirror: any): 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;
+}
+
+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/reducers/eventStore" {
+ import Calendar from "@fullcalendar/core/Calendar";
+ import { EventInstanceHash } from "@fullcalendar/core/structs/event";
+ import { EventStore } from "@fullcalendar/core/structs/event-store";
+ import { Action } from "@fullcalendar/core/reducers/types";
+ import { EventSourceHash } from "@fullcalendar/core/structs/event-source";
+ import { DateProfile } from "@fullcalendar/core/DateProfileGenerator";
+ export default function (eventStore: EventStore, action: Action, eventSources: EventSourceHash, dateProfile: DateProfile, calendar: Calendar): EventStore;
+ export function excludeInstances(eventStore: EventStore, removals: EventInstanceHash): EventStore;
+}
+
+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<PropsType extends SplittableProps = SplittableProps> {
+ private getKeysForEventDefs;
+ private splitDateSelection;
+ private splitEventStore;
+ private splitIndividualUi;
+ private splitEventDrag;
+ private splitEventResize;
+ private eventUiBuilders;
+ 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;
+ };
+ private _splitDateSpan;
+ private _getKeysForEventDefs;
+ private _splitEventStore;
+ private _splitIndividualUi;
+ private _splitInteraction;
+ }
+}
+
+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/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/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/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/component/memoized-rendering" {
+ export interface MemoizedRendering<ArgsType extends any[]> {
+ (...args: ArgsType): void;
+ unrender: () => void;
+ dependents: MemoizedRendering<any>[];
+ }
+ export function memoizeRendering<ArgsType extends any[]>(renderFunc: (...args: ArgsType) => void, unrenderFunc?: (...args: ArgsType) => void, dependencies?: MemoizedRendering<any>[]): MemoizedRendering<ArgsType>;
+}
+
+declare module "@fullcalendar/core/Toolbar" {
+ import Component, { ComponentContext } 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<ToolbarRenderProps> {
+ el: HTMLElement;
+ viewsWithButtons: any;
+ private _renderLayout;
+ private _updateTitle;
+ private _updateActiveButton;
+ private _updateToday;
+ private _updatePrev;
+ private _updateNext;
+ constructor(context: ComponentContext, 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;
+ }
+}
+
+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/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<CalendarComponentProps> {
+ view: View;
+ header: Toolbar;
+ footer: Toolbar;
+ computeTitle: (dateProfile: any, viewOptions: any) => string;
+ parseBusinessHours: (input: BusinessHoursInput) => EventStore;
+ el: HTMLElement;
+ contentEl: HTMLElement;
+ isHeightAuto: boolean;
+ viewHeight: number;
+ private _renderToolbars;
+ private buildViewPropTransformers;
+ constructor(context: ComponentContext, el: HTMLElement);
+ destroy(): void;
+ toggleElClassNames(bool: boolean): void;
+ render(props: CalendarComponentProps): void;
+ renderToolbars(viewSpec: ViewSpec, dateProfile: DateProfile, currentDate: DateMarker, dateProfileGenerator: DateProfileGenerator, title: string): void;
+ renderView(props: CalendarComponentProps, title: string): void;
+ updateSize(isResize?: boolean): void;
+ computeHeightVars(): void;
+ queryToolbarsHeight(): number;
+ freezeHeight(): void;
+ thawHeight(): void;
+ }
+}
+
+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";
+ export type eventDragMutationMassager = (mutation: EventMutation, hit0: Hit, hit1: Hit) => void;
+ export type EventDropTransformers = (mutation: EventMutation, calendar: Calendar) => void;
+}
+
+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-resizing" {
+ import { Hit } from "@fullcalendar/core/interactions/hit";
+ export type EventResizeJoinTransforms = (hit0: Hit, hit1: Hit) => false | object;
+}
+
+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/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/interactions/interaction" {
+ import DateComponent from "@fullcalendar/core/component/DateComponent";
+ export abstract class Interaction {
+ component: DateComponent<any>;
+ constructor(settings: InteractionSettings);
+ destroy(): void;
+ }
+ export type InteractionClass = {
+ new (settings: InteractionSettings): Interaction;
+ };
+ export interface InteractionSettingsInput {
+ el: HTMLElement;
+ useEventCenter?: boolean;
+ }
+ export interface InteractionSettings {
+ component: DateComponent<any>;
+ el: HTMLElement;
+ useEventCenter: boolean;
+ }
+ export type InteractionSettingsStore = {
+ [componenUid: string]: InteractionSettings;
+ };
+ export function parseInteractionSettings(component: DateComponent<any>, input: InteractionSettingsInput): InteractionSettings;
+ export function interactionSettingsToStore(settings: InteractionSettings): {
+ [x: string]: InteractionSettings;
+ };
+ export let interactionSettingsStore: InteractionSettingsStore;
+}
+
+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/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/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 View, { ViewProps } from "@fullcalendar/core/View";
+ import { CalendarComponentProps } from "@fullcalendar/core/CalendarComponent";
+ import { isPropsValidTester } from "@fullcalendar/core/validation";
+ import { eventDragMutationMassager, 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[];
+ 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[];
+ 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, view: View): 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/event-sources/array-event-source" {
+ const _default_1: import("@fullcalendar/core/plugin-system").PluginDef;
+ export default _default_1;
+}
+
+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/event-sources/json-feed-event-source" {
+ const _default_2: import("@fullcalendar/core/plugin-system").PluginDef;
+ export default _default_2;
+}
+
+declare module "@fullcalendar/core/structs/recurring-event-simple" {
+ const _default_3: import("@fullcalendar/core/plugin-system").PluginDef;
+ export default _default_3;
+}
+
+declare module "@fullcalendar/core/util/object-similarity" {
+ export function isValuesSimilar(val0: any, val1: any, depth?: number): boolean;
+ export function isArraysSimilar(a0: any, a1: any, depth?: number): boolean;
+ export function isObjectsSimilar(obj0: any, obj1: any, depth?: number): boolean;
+ export function computeChangedProps(obj0: any, obj1: any, depth?: number): {};
+ export function anyKeysRemoved(obj0: any, obj1: any): boolean;
+}
+
+declare module "@fullcalendar/core/option-change-handlers" {
+ const _default_4: import("@fullcalendar/core/plugin-system").PluginDef;
+ export default _default_4;
+}
+
+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/OptionsManager" {
+ export { OptionsManager as default, OptionsManager };
+
+ class OptionsManager {
+ dirDefaults: any;
+ localeDefaults: any;
+ overrides: any;
+ dynamicOverrides: any;
+ computed: any;
+ constructor(overrides: any);
+ add(props: any): void;
+ addDynamic(props: any): void;
+ reset(props: any): void;
+ compute(): void;
+ }
+}
+
+declare module "@fullcalendar/core/reducers/eventSources" {
+ import { EventSourceHash } from "@fullcalendar/core/structs/event-source";
+ import Calendar from "@fullcalendar/core/Calendar";
+ import { DateProfile } from "@fullcalendar/core/DateProfileGenerator";
+ import { Action } from "@fullcalendar/core/reducers/types";
+ export default function (eventSources: EventSourceHash, action: Action, dateProfile: DateProfile | null, calendar: Calendar): EventSourceHash;
+}
+
+declare module "@fullcalendar/core/reducers/main" {
+ import Calendar from "@fullcalendar/core/Calendar";
+ import { CalendarState, Action } from "@fullcalendar/core/reducers/types";
+ export default function (state: CalendarState, action: Action, calendar: Calendar): CalendarState;
+}
+
+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/EventClicking" {
+ import { Interaction, InteractionSettings } from "@fullcalendar/core/interactions/interaction";
+ export { EventClicking as default, EventClicking };
+ class EventClicking extends Interaction {
+ constructor(settings: InteractionSettings);
+ handleSegClick: (ev: Event, segEl: HTMLElement) => void;
+ }
+}
+
+declare module "@fullcalendar/core/interactions/EventHovering" {
+ import { Interaction, InteractionSettings } from "@fullcalendar/core/interactions/interaction";
+ export { EventHovering as default, EventHovering };
+ class EventHovering extends Interaction {
+ removeHoverListeners: () => void;
+ currentSegEl: HTMLElement;
+ constructor(settings: InteractionSettings);
+ destroy(): void;
+ handleEventElRemove: (el: HTMLElement) => void;
+ handleSegEnter: (ev: Event, segEl: HTMLElement) => void;
+ handleSegLeave: (ev: Event, segEl: HTMLElement) => void;
+ triggerEvent(publicEvName: string, ev: Event | null, segEl: HTMLElement): void;
+ }
+}
+
+declare module "@fullcalendar/core/theme/StandardTheme" {
+ import Theme from "@fullcalendar/core/theme/Theme";
+ export { StandardTheme as default, StandardTheme };
+ class StandardTheme extends Theme {
+ }
+}
+
+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 } 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) => 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'];
+ private parseRawLocales;
+ private buildLocale;
+ private buildDateEnv;
+ private buildTheme;
+ private buildEventUiSingleBase;
+ private buildSelectionConfig;
+ private buildEventUiBySource;
+ private buildEventUiBases;
+ 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;
+ needsFullRerender: 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;
+ dispatch(action: Action): void;
+ reduce(state: CalendarState, action: Action, calendar: Calendar): CalendarState;
+ requestRerender(needsFull?: boolean): void;
+ tryRerender(): void;
+ batchRendering(func: any): void;
+ executeRender(): void;
+ renderComponent(needsFull: any): void;
+ resetOptions(options: any): void;
+ setOptions(options: any): void;
+ processOptions(options: any, mode?: 'dynamic' | 'reset'): void;
+ setOption(name: string, val: any): void;
+ getOption(name: string): any;
+ opt(name: string): any;
+ viewOpt(name: string): any;
+ viewOpts(): any;
+ handleOptions(options: any): void;
+ getAvailableLocaleCodes(): string[];
+ _buildSelectionConfig(rawOpts: any): EventUi;
+ _buildEventUiSingleBase(rawOpts: any): EventUi;
+ hasPublicHandlers(name: string): boolean;
+ publiclyTrigger(name: string, args?: any): any;
+ publiclyTriggerAfterSizing(name: any, args: any): 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<any>, settingsInput: InteractionSettingsInput): void;
+ unregisterInteractiveComponent(component: DateComponent<any>): 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): DatePointApi;
+ buildDateSpanApi(dateSpan: DateSpan): 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;
+}
+
+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";
+ export interface ComponentContext {
+ options: any;
+ dateEnv: DateEnv;
+ theme: Theme;
+ calendar: Calendar;
+ view: View;
+ }
+ export type EqualityFuncHash = {
+ [propName: string]: (obj0: any, obj1: any) => boolean;
+ };
+ export { Component as default, Component };
+ class Component<PropsType> {
+ equalityFuncs: EqualityFuncHash;
+ uid: string;
+ props: PropsType | null;
+ context: ComponentContext;
+ dateEnv: DateEnv;
+ theme: Theme;
+ view: View;
+ calendar: Calendar;
+ isRtl: boolean;
+ constructor(context: ComponentContext, isView?: boolean);
+ static addEqualityFuncs(newFuncs: EqualityFuncHash): void;
+ opt(name: any): any;
+ receiveProps(props: PropsType): void;
+ protected render(props: PropsType): void;
+ destroy(): void;
+ }
+}
+
+declare module "@fullcalendar/core/structs/view-config" {
+ import View from "@fullcalendar/core/View";
+ import { ViewSpec } from "@fullcalendar/core/structs/view-spec";
+ import { ComponentContext } from "@fullcalendar/core/component/Component";
+ import DateProfileGenerator from "@fullcalendar/core/DateProfileGenerator";
+ export type ViewClass = new (context: ComponentContext, viewSpec: ViewSpec, dateProfileGenerator: DateProfileGenerator, 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/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/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/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 { ComponentContext } from "@fullcalendar/core/component/Component";
+ 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";
+ export interface ViewProps {
+ 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<ViewProps> {
+ usesMinMaxTime: boolean;
+ dateProfileGeneratorClass: any;
+ on: EmitterInterface['on'];
+ one: EmitterInterface['one'];
+ off: EmitterInterface['off'];
+ trigger: EmitterInterface['trigger'];
+ triggerWith: EmitterInterface['triggerWith'];
+ hasHandlers: EmitterInterface['hasHandlers'];
+ viewSpec: ViewSpec;
+ dateProfileGenerator: DateProfileGenerator;
+ type: string;
+ title: string;
+ queuedScroll: any;
+ eventOrderSpecs: any;
+ nextDayThreshold: Duration;
+ isNowIndicatorRendered: boolean;
+ initialNowDate: DateMarker;
+ initialNowQueriedMs: number;
+ nowIndicatorTimeoutID: any;
+ nowIndicatorIntervalID: any;
+ private renderDatesMem;
+ private renderBusinessHoursMem;
+ private renderDateSelectionMem;
+ private renderEventsMem;
+ private renderEventSelectionMem;
+ private renderEventDragMem;
+ private renderEventResizeMem;
+ constructor(context: ComponentContext, viewSpec: ViewSpec, dateProfileGenerator: DateProfileGenerator, parentEl: HTMLElement);
+ initialize(): void;
+ readonly activeStart: Date;
+ readonly activeEnd: Date;
+ readonly currentStart: Date;
+ readonly currentEnd: Date;
+ render(props: ViewProps): 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): void;
+ updateNowIndicator(): void;
+ stopNowIndicator(): void;
+ getNowIndicatorUnit(dateProfile: DateProfile): void;
+ renderNowIndicator(date: any): void;
+ unrenderNowIndicator(): void;
+ addScroll(scroll: any): void;
+ popScroll(isResize: boolean): void;
+ applyQueuedScroll(isResize: boolean): void;
+ queryScroll(): any;
+ applyScroll(scroll: any, isResize: boolean): void;
+ computeDateScroll(timeMs: number): {};
+ queryDateScroll(): {};
+ applyDateScroll(scroll: any): void;
+ scrollToTime(time: Duration): void;
+ }
+}
+
+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 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' | string | ((cellinfo: CellInfo, jsevent: Event) => 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;
+ 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, view: View): void;
+ eventRender?(arg: {
+ event: EventApi;
+ el: HTMLElement;
+ view: View;
+ }): void;
+ eventPositioned?(arg: {
+ event: EventApi;
+ el: HTMLElement;
+ view: View;
+ }): void;
+ _eventsPositioned?(arg: {
+ view: View;
+ }): void;
+ eventDestroy?(arg: {
+ 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;
+ 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;
+ event: EventApi;
+ delta: Duration;
+ 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;
+ }
+ 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/component/date-rendering" {
+ import { DateMarker } from "@fullcalendar/core/datelib/marker";
+ import Component, { ComponentContext } from "@fullcalendar/core/component/Component";
+ import { DateProfile } from "@fullcalendar/core/DateProfileGenerator";
+ export function buildGotoAnchorHtml(component: Component<any>, gotoOptions: any, attrs: any, innerHtml?: any): string;
+ export function getAllDayHtml(component: Component<any>): any;
+ export function getDayClasses(date: DateMarker, dateProfile: DateProfile, context: ComponentContext, noThemeHighlight?: any): any[];
+}
+
+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/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/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/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/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/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<DayTableHeaderProps> {
+ el: HTMLElement;
+ thead: HTMLElement;
+ constructor(context: ComponentContext, parentEl: HTMLElement);
+ destroy(): void;
+ render(props: DayTableHeaderProps): void;
+ }
+}
+
+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;
+ private getDateDayIndex;
+ }
+}
+
+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[];
+ private daySeries;
+ constructor(daySeries: DaySeries, breakOnWeeks: boolean);
+ private buildCells;
+ private buildCell;
+ private buildHeaderDates;
+ 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";
+ export interface SliceableProps {
+ dateSelection: DateSpan;
+ businessHours: EventStore;
+ eventStore: EventStore;
+ eventDrag: EventInteractionState | null;
+ eventResize: EventInteractionState | null;
+ eventSelection: string;
+ eventUiBases: EventUiHash;
+ }
+ export interface SlicedProps<SegType extends Seg> {
+ dateSelectionSegs: SegType[];
+ businessHourSegs: SegType[];
+ fgEventSegs: SegType[];
+ bgEventSegs: SegType[];
+ eventDrag: EventSegUiInteractionState | null;
+ eventResize: EventSegUiInteractionState | null;
+ eventSelection: string;
+ }
+ export { Slicer as default, Slicer };
+ abstract class Slicer<SegType extends Seg, ExtraArgs extends any[] = []> {
+ private sliceBusinessHours;
+ private sliceDateSelection;
+ private sliceEventStore;
+ private sliceEventDrag;
+ private sliceEventResize;
+ abstract sliceRange(dateRange: DateRange, ...extraArgs: ExtraArgs): SegType[];
+ sliceProps(props: SliceableProps, dateProfile: DateProfile, nextDayThreshold: Duration | null, component: DateComponent<any>, // TODO: kill
+ ...extraArgs: ExtraArgs): SlicedProps<SegType>;
+ sliceNowDate(// does not memoize
+ date: DateMarker, component: DateComponent<any>, // TODO: kill
+ ...extraArgs: ExtraArgs): SegType[];
+ private _sliceBusinessHours;
+ private _sliceEventStore;
+ private _sliceInteraction;
+ private _sliceDateSpan;
+ private sliceEventRanges;
+ private sliceEventRange;
+ }
+}
+
+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, freezeRaw, 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 } from "@fullcalendar/core/util/object";
+ export { isObjectsSimilar, isValuesSimilar } from "@fullcalendar/core/util/object-similarity";
+ 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 } 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 } 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";
+}
\ No newline at end of file
--- /dev/null
+/*!
+FullCalendar Core Package v4.1.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 = {
+ '<tr': 'tbody',
+ '<td': 'tr'
+ };
+ function createElement(tagName, attrs, content) {
+ var el = document.createElement(tagName);
+ if (attrs) {
+ for (var attrName in attrs) {
+ if (attrName === 'style') {
+ applyStyle(el, attrs[attrName]);
+ }
+ else if (elementPropHash[attrName]) {
+ el[attrName] = attrs[attrName];
+ }
+ else {
+ el.setAttribute(attrName, attrs[attrName]);
+ }
+ }
+ }
+ if (typeof content === 'string') {
+ el.innerHTML = content; // shortcut. no need to process HTML in any way
+ }
+ else if (content != null) {
+ appendToElement(el, content);
+ }
+ return el;
+ }
+ function htmlToElement(html) {
+ html = html.trim();
+ var container = document.createElement(computeContainerTag(html));
+ container.innerHTML = html;
+ return container.firstChild;
+ }
+ function htmlToElements(html) {
+ return Array.prototype.slice.call(htmlToNodeList(html));
+ }
+ function htmlToNodeList(html) {
+ html = html.trim();
+ var container = document.createElement(computeContainerTag(html));
+ container.innerHTML = html;
+ return container.childNodes;
+ }
+ // assumes html already trimmed and tag names are lowercase
+ function computeContainerTag(html) {
+ return containerTagHash[html.substr(0, 3) // faster than using regex
+ ] || 'div';
+ }
+ function appendToElement(el, content) {
+ var childNodes = normalizeContent(content);
+ for (var i = 0; i < childNodes.length; i++) {
+ el.appendChild(childNodes[i]);
+ }
+ }
+ function prependToElement(parent, content) {
+ var newEls = normalizeContent(content);
+ var afterEl = parent.firstChild || null; // if no firstChild, will append to end, but that's okay, b/c there were no children
+ for (var i = 0; i < newEls.length; i++) {
+ parent.insertBefore(newEls[i], afterEl);
+ }
+ }
+ function insertAfterElement(refEl, content) {
+ var newEls = normalizeContent(content);
+ var afterEl = refEl.nextSibling || null;
+ for (var i = 0; i < newEls.length; i++) {
+ refEl.parentNode.insertBefore(newEls[i], afterEl);
+ }
+ }
+ function normalizeContent(content) {
+ var els;
+ if (typeof content === 'string') {
+ els = htmlToElements(content);
+ }
+ else if (content instanceof Node) {
+ els = [content];
+ }
+ else { // Node[] or NodeList
+ els = Array.prototype.slice.call(content);
+ }
+ return els;
+ }
+ function removeElement(el) {
+ if (el.parentNode) {
+ el.parentNode.removeChild(el);
+ }
+ }
+ // Querying
+ // ----------------------------------------------------------------------------------------------------------------
+ // from https://developer.mozilla.org/en-US/docs/Web/API/Element/closest
+ var matchesMethod = Element.prototype.matches ||
+ Element.prototype.matchesSelector ||
+ Element.prototype.msMatchesSelector;
+ var closestMethod = Element.prototype.closest || function (selector) {
+ // polyfill
+ var el = this;
+ if (!document.documentElement.contains(el)) {
+ return null;
+ }
+ do {
+ if (elementMatches(el, selector)) {
+ return el;
+ }
+ el = el.parentElement || el.parentNode;
+ } while (el !== null && el.nodeType === 1);
+ return null;
+ };
+ function elementClosest(el, selector) {
+ return closestMethod.call(el, selector);
+ }
+ function elementMatches(el, selector) {
+ return matchesMethod.call(el, selector);
+ }
+ // accepts multiple subject els
+ // returns a real array. good for methods like forEach
+ function findElements(container, selector) {
+ var containers = container instanceof HTMLElement ? [container] : container;
+ var allMatches = [];
+ for (var i = 0; i < containers.length; i++) {
+ var matches = containers[i].querySelectorAll(selector);
+ for (var j = 0; j < matches.length; j++) {
+ allMatches.push(matches[j]);
+ }
+ }
+ return allMatches;
+ }
+ // accepts multiple subject els
+ // only queries direct child elements
+ function findChildren(parent, selector) {
+ var parents = parent instanceof HTMLElement ? [parent] : parent;
+ var allMatches = [];
+ for (var i = 0; i < parents.length; i++) {
+ var childNodes = parents[i].children; // only ever elements
+ for (var j = 0; j < childNodes.length; j++) {
+ var childNode = childNodes[j];
+ if (!selector || elementMatches(childNode, selector)) {
+ allMatches.push(childNode);
+ }
+ }
+ }
+ return allMatches;
+ }
+ // Attributes
+ // ----------------------------------------------------------------------------------------------------------------
+ function forceClassName(el, className, bool) {
+ if (bool) {
+ el.classList.add(className);
+ }
+ else {
+ el.classList.remove(className);
+ }
+ }
+ // Style
+ // ----------------------------------------------------------------------------------------------------------------
+ var PIXEL_PROP_RE = /(top|left|right|bottom|width|height)$/i;
+ function applyStyle(el, props) {
+ for (var propName in props) {
+ applyStyleProp(el, propName, props[propName]);
+ }
+ }
+ function applyStyleProp(el, name, val) {
+ if (val == null) {
+ el.style[name] = '';
+ }
+ else if (typeof val === 'number' && PIXEL_PROP_RE.test(name)) {
+ el.style[name] = val + 'px';
+ }
+ else {
+ el.style[name] = val;
+ }
+ }
+
+ function pointInsideRect(point, rect) {
+ return point.left >= 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'
+ }
+ }, '<div></div>');
+ 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;
+ 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) {
+ var computed = window.getComputedStyle(el);
+ return el.getBoundingClientRect().height +
+ 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 naturalOffset = computeHeightAndMargins(el);
+ if (naturalOffset < minOffset) {
+ flexEls.push(el);
+ flexOffsets.push(naturalOffset);
+ flexHeights.push(el.offsetHeight);
+ }
+ 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 <td> 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.offsetWidth;
+ 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 = outerEl.offsetHeight - innerEl.offsetHeight; // grab the dimensions
+ // 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;
+ }
+ /*
+ Get a snapshot of an object, so we can compare it to later revisions.
+ Intentionally only works with arrays, jaja
+ */
+ function freezeRaw(raw) {
+ if (Array.isArray(raw)) {
+ return Array.prototype.slice.call(raw);
+ }
+ return raw;
+ }
+ /* 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, framingRange, dateEnv, recurringTypes) {
+ var typeDef = recurringTypes[eventDef.recurringDef.typeId];
+ var markers = typeDef.expand(eventDef.recurringDef.typeData, framingRange, 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;
+ }
+
+ // 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 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 starts = expandRecurringRanges(def, framingRange, calendar.dateEnv, calendar.pluginSystem.hooks.recurringTypes);
+ var duration = def.recurringDef.duration;
+ if (!duration) {
+ duration = def.allDay ?
+ calendar.defaultAllDayEventDuration :
+ calendar.defaultTimedEventDuration;
+ }
+ 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!?
+ var endDelta = null;
+ if (options.maintainDuration) {
+ var origDuration = diffDates(instanceRange.start, instanceRange.end, dateEnv, options.granularity);
+ var newDuration = diffDates(start, instanceRange.end, dateEnv, options.granularity);
+ endDelta = subtractDurations(origDuration, newDuration);
+ }
+ this.mutate({ startDelta: startDelta, endDelta: endDelta });
+ }
+ };
+ 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);
+ this.mutate({ startDelta: startDelta, endDelta: endDelta, standardProps: standardProps });
+ }
+ else {
+ standardProps.hasEnd = false;
+ this.mutate({ startDelta: 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({ startDelta: delta, endDelta: 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(view, segs, isMirror) {
+ if (view.hasPublicHandlers('eventRender')) {
+ segs = segs.filter(function (seg) {
+ var custom = view.publiclyTrigger('eventRender', [
+ {
+ event: new EventApi(view.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);
+ }
+
+ // 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 &&
+ willDeltasAffectDuration(eventConfig.startEditable ? mutation.startDelta : null, mutation.endDelta || null)) {
+ 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 willDeltasAffectDuration(startDelta, endDelta) {
+ if (startDelta && !asRoughMs(startDelta)) {
+ startDelta = null;
+ }
+ if (endDelta && !asRoughMs(endDelta)) {
+ endDelta = null;
+ }
+ if (!startDelta && !endDelta) {
+ return false;
+ }
+ if (Boolean(startDelta) !== Boolean(endDelta)) {
+ return true;
+ }
+ return !durationsEqual(startDelta, endDelta);
+ }
+ 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.startDelta && eventConfig.startEditable) {
+ copy.range = {
+ start: dateEnv.add(copy.range.start, mutation.startDelta),
+ end: copy.range.end
+ };
+ }
+ if (clearEnd) {
+ copy.range = {
+ start: copy.range.start,
+ end: calendar.getDefaultEventEnd(eventDef.allDay, copy.range.start)
+ };
+ }
+ else if (mutation.endDelta &&
+ (eventConfig.durationEditable ||
+ !willDeltasAffectDuration(// TODO: nonDRY logic above
+ eventConfig.startEditable ? mutation.startDelta : null, mutation.endDelta))) {
+ copy.range = {
+ start: copy.range.start,
+ end: dateEnv.add(copy.range.end, mutation.endDelta)
+ };
+ }
+ // 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)
+ 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 = state.eventStore.defs[subjectDef.defId];
+ var origInstance = state.eventStore.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(/"/g, '"')
+ .replace(/\n/g, '<br />');
+ }
+ // 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;
+ }
+
+ function isValuesSimilar(val0, val1, depth) {
+ if (depth === void 0) { depth = 1; }
+ if (val0 === val1) {
+ return true;
+ }
+ else if (Array.isArray(val0) && Array.isArray(val1)) {
+ return isArraysSimilar(val0, val1, depth);
+ }
+ else if (typeof val0 === 'object' && val0 && typeof val1 === 'object' && val1) { // non-null objects
+ return isObjectsSimilar(val0, val1, depth);
+ }
+ else {
+ return false;
+ }
+ }
+ function isArraysSimilar(a0, a1, depth) {
+ if (depth === void 0) { depth = 1; }
+ if (a0 === a1) {
+ return true;
+ }
+ else if (depth > 0) {
+ if (a0.length !== a1.length) {
+ return false;
+ }
+ else {
+ for (var i = 0; i < a0.length; i++) {
+ if (!isValuesSimilar(a0[i], a1[i], depth - 1)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+ else {
+ return false;
+ }
+ }
+ function isObjectsSimilar(obj0, obj1, depth) {
+ if (depth === void 0) { depth = 1; }
+ if (obj0 === obj1) {
+ return true;
+ }
+ else if (depth > 0) {
+ for (var prop in obj0) {
+ if (!(prop in obj1)) {
+ return false;
+ }
+ }
+ for (var prop in obj1) {
+ if (!(prop in obj0)) {
+ return false;
+ }
+ else {
+ if (!isValuesSimilar(obj0[prop], obj1[prop], depth - 1)) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+ else {
+ return false;
+ }
+ }
+ function computeChangedProps(obj0, obj1, depth) {
+ if (depth === void 0) { depth = 1; }
+ var res = {};
+ for (var prop in obj1) {
+ if (!(prop in obj0) ||
+ !isValuesSimilar(obj0[prop], obj1[prop], depth - 1)) {
+ res[prop] = obj1[prop];
+ }
+ }
+ return res;
+ }
+ function anyKeysRemoved(obj0, obj1) {
+ for (var prop in obj0) {
+ if (!(prop in obj1)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ 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 <a> tag or a non-clickable <span> 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(component, gotoOptions, attrs, innerHtml) {
+ var dateEnv = component.dateEnv;
+ 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 && component.opt('navLinks')) {
+ return '<a' + attrs +
+ ' data-goto="' + htmlEscape(JSON.stringify(finalOptions)) + '">' +
+ innerHtml +
+ '</a>';
+ }
+ else {
+ return '<span' + attrs + '>' +
+ innerHtml +
+ '</span>';
+ }
+ }
+ function getAllDayHtml(component) {
+ return component.opt('allDayHtml') || htmlEscape(component.opt('allDayText'));
+ }
+ // Computes HTML classNames for a single-day element
+ function getDayClasses(date, dateProfile, context, noThemeHighlight) {
+ var calendar = context.calendar, view = context.view, 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 (view.opt('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 Component = /** @class */ (function () {
+ function Component(context, isView) {
+ // HACK to populate view at top of component instantiation call chain
+ if (isView) {
+ context.view = this;
+ }
+ this.uid = String(guid++);
+ this.context = context;
+ this.dateEnv = context.dateEnv;
+ this.theme = context.theme;
+ this.view = context.view;
+ this.calendar = context.calendar;
+ this.isRtl = this.opt('dir') === 'rtl';
+ }
+ Component.addEqualityFuncs = function (newFuncs) {
+ this.prototype.equalityFuncs = __assign({}, this.prototype.equalityFuncs, newFuncs);
+ };
+ Component.prototype.opt = function (name) {
+ return this.context.options[name];
+ };
+ Component.prototype.receiveProps = function (props) {
+ var _a = recycleProps(this.props || {}, props, this.equalityFuncs), anyChanges = _a.anyChanges, comboProps = _a.comboProps;
+ this.props = comboProps;
+ if (anyChanges) {
+ this.render(comboProps);
+ }
+ };
+ Component.prototype.render = function (props) {
+ };
+ // 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(context, el, isView) {
+ var _this = _super.call(this, context, isView) || this;
+ _this.el = el;
+ return _this;
+ }
+ DateComponent.prototype.destroy = function () {
+ _super.prototype.destroy.call(this);
+ removeElement(this.el);
+ };
+ // TODO: WHAT ABOUT (sourceSeg && sourceSeg.component.doesDragMirror)
+ //
+ // Event Drag-n-Drop Rendering (for both events and external elements)
+ // ---------------------------------------------------------------------------------------------------------------
+ /*
+ renderEventDragSegs(state: EventSegUiInteractionState) {
+ if (state) {
+ let { isEvent, segs, sourceSeg } = state
+
+ if (this.eventRenderer) {
+ this.eventRenderer.hideByHash(state.affectedInstances)
+ }
+
+ // if the user is dragging something that is considered an event with real event data,
+ // and this component likes to do drag mirrors OR the component where the seg came from
+ // likes to do drag mirrors, then render a drag mirror.
+ if (isEvent && (this.doesDragMirror || sourceSeg && sourceSeg.component.doesDragMirror)) {
+ if (this.mirrorRenderer) {
+ this.mirrorRenderer.renderSegs(segs, { isDragging: true, sourceSeg })
+ }
+ }
+
+ // if it would be impossible to render a drag mirror OR this component likes to render
+ // highlights, then render a highlight.
+ if (!isEvent || this.doesDragHighlight) {
+ if (this.fillRenderer) {
+ this.fillRenderer.renderSegs('highlight', segs)
+ }
+ }
+ }
+ }
+ */
+ // 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.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 dateProfile = this.props.dateProfile; // HACK
+ if (dateProfile && // HACK for DayTile
+ !rangeContainsRange(dateProfile.validRange, selection.range)) {
+ return false;
+ }
+ return isDateSelectionValid(selection, this.calendar);
+ };
+ // Triggering
+ // -----------------------------------------------------------------------------------------------------------------
+ // TODO: move to Calendar
+ DateComponent.prototype.publiclyTrigger = function (name, args) {
+ var calendar = this.calendar;
+ return calendar.publiclyTrigger(name, args);
+ };
+ DateComponent.prototype.publiclyTriggerAfterSizing = function (name, args) {
+ var calendar = this.calendar;
+ return calendar.publiclyTriggerAfterSizing(name, args);
+ };
+ DateComponent.prototype.hasPublicHandlers = function (name) {
+ var calendar = this.calendar;
+ return calendar.hasPublicHandlers(name);
+ };
+ DateComponent.prototype.triggerRenderedSegs = function (segs, isMirrors) {
+ var calendar = this.calendar;
+ if (this.hasPublicHandlers('eventPositioned')) {
+ for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
+ var seg = segs_1[_i];
+ this.publiclyTriggerAfterSizing('eventPositioned', [
+ {
+ event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance),
+ isMirror: isMirrors,
+ isStart: seg.isStart,
+ isEnd: seg.isEnd,
+ el: seg.el,
+ view: this // ?
+ }
+ ]);
+ }
+ }
+ if (!calendar.state.loadingLevel) { // avoid initial empty state while pending
+ calendar.afterSizingTriggers._eventsPositioned = [null]; // fire once
+ }
+ };
+ DateComponent.prototype.triggerWillRemoveSegs = function (segs, isMirrors) {
+ var calendar = this.calendar;
+ for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {
+ var seg = segs_2[_i];
+ calendar.trigger('eventElRemove', seg.el);
+ }
+ if (this.hasPublicHandlers('eventDestroy')) {
+ for (var _a = 0, segs_3 = segs; _a < segs_3.length; _a++) {
+ var seg = segs_3[_a];
+ this.publiclyTrigger('eventDestroy', [
+ {
+ event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance),
+ isMirror: isMirrors,
+ el: seg.el,
+ view: this // ?
+ }
+ ]);
+ }
+ }
+ };
+ // 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 || [],
+ 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: [],
+ 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),
+ 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) {
+ return {
+ allDayGuess: Boolean(!props.startTime && !props.endTime),
+ duration: (props.startTime && props.endTime) ?
+ subtractDurations(props.endTime, props.startTime) :
+ null,
+ 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) {
+ handleEventSources([events], calendar);
+ },
+ eventSources: handleEventSources,
+ plugins: handlePlugins
+ }
+ });
+ function handleEventSources(inputs, calendar) {
+ 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 (isValuesSimilar(unfoundSources[i]._raw, input, 2)) {
+ 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.add = function (props) {
+ __assign(this.overrides, props);
+ this.compute();
+ };
+ OptionsManager.prototype.addDynamic = function (props) {
+ __assign(this.dynamicOverrides, props);
+ this.compute();
+ };
+ OptionsManager.prototype.reset = function (props) {
+ this.overrides = props;
+ 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;
+ }
+ else 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 = freezeRaw(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 ||
+ 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 }), _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.activeRange, p1.activeRange) &&
+ rangesEqual(p0.validRange, p1.validRange) &&
+ durationsEqual(p0.minTime, p1.minTime) &&
+ durationsEqual(p0.maxTime, p1.maxTime);
+ }
+
+ 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 = superType ? ensureViewDef(superType, hash, defaultConfigs, overrideConfigs) : null;
+ 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(context, extraClassName) {
+ var _this = _super.call(this, context) || 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, 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('<h2> </h2>')); // 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 = "<span class='" + buttonIcon + "'></span>";
+ buttonAriaAttr = ' aria-label="' + buttonName + '"';
+ }
+ buttonEl = htmlToElement(// type="button" so that it doesn't submit a form
+ '<button type="button" class="' + buttonClasses.join(' ') + '"' +
+ buttonAriaAttr +
+ '>' + buttonInnerHtml + '</button>');
+ 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 className = this.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(context, el) {
+ var _this = _super.call(this, context) || this;
+ _this._renderToolbars = memoizeRendering(_this.renderToolbars);
+ _this.buildViewPropTransformers = memoize(buildViewPropTransformers);
+ _this.el = el;
+ prependToElement(el, _this.contentEl = createElement('div', { className: 'fc-view-container' }));
+ var calendar = _this.calendar;
+ for (var _i = 0, _a = calendar.pluginSystem.hooks.viewContainerModifiers; _i < _a.length; _i++) {
+ var modifyViewContainer = _a[_i];
+ modifyViewContainer(_this.contentEl, calendar);
+ }
+ _this.toggleElClassNames(true);
+ _this.computeTitle = memoize(computeTitle);
+ _this.parseBusinessHours = memoize(function (input) {
+ return parseBusinessHours(input, _this.calendar);
+ });
+ return _this;
+ }
+ CalendarComponent.prototype.destroy = function () {
+ if (this.header) {
+ this.header.destroy();
+ }
+ if (this.footer) {
+ this.footer.destroy();
+ }
+ if (this.view) {
+ this.view.destroy();
+ }
+ removeElement(this.contentEl);
+ this.toggleElClassNames(false);
+ _super.prototype.destroy.call(this);
+ };
+ CalendarComponent.prototype.toggleElClassNames = function (bool) {
+ var classList = this.el.classList;
+ var dirClassName = 'fc-' + this.opt('dir');
+ var themeClassName = this.theme.getClass('widget');
+ if (bool) {
+ classList.add('fc');
+ classList.add(dirClassName);
+ classList.add(themeClassName);
+ }
+ else {
+ classList.remove('fc');
+ classList.remove(dirClassName);
+ classList.remove(themeClassName);
+ }
+ };
+ CalendarComponent.prototype.render = function (props) {
+ this.freezeHeight();
+ var title = this.computeTitle(props.dateProfile, props.viewSpec.options);
+ this._renderToolbars(props.viewSpec, props.dateProfile, props.currentDate, props.dateProfileGenerator, title);
+ this.renderView(props, title);
+ this.updateSize();
+ this.thawHeight();
+ };
+ CalendarComponent.prototype.renderToolbars = function (viewSpec, dateProfile, currentDate, dateProfileGenerator, title) {
+ var headerLayout = this.opt('header');
+ var footerLayout = this.opt('footer');
+ var now = this.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 (!this.header) {
+ this.header = new Toolbar(this.context, 'fc-header-toolbar');
+ prependToElement(this.el, this.header.el);
+ }
+ this.header.receiveProps(__assign({ layout: headerLayout }, toolbarProps));
+ }
+ else if (this.header) {
+ this.header.destroy();
+ this.header = null;
+ }
+ if (footerLayout) {
+ if (!this.footer) {
+ this.footer = new Toolbar(this.context, 'fc-footer-toolbar');
+ appendToElement(this.el, this.footer.el);
+ }
+ this.footer.receiveProps(__assign({ layout: footerLayout }, toolbarProps));
+ }
+ else if (this.footer) {
+ this.footer.destroy();
+ this.footer = null;
+ }
+ };
+ CalendarComponent.prototype.renderView = function (props, title) {
+ var view = this.view;
+ var viewSpec = props.viewSpec, dateProfileGenerator = props.dateProfileGenerator;
+ if (!view || view.viewSpec !== viewSpec) {
+ if (view) {
+ view.destroy();
+ }
+ view = this.view = new viewSpec['class']({
+ calendar: this.calendar,
+ view: null,
+ dateEnv: this.dateEnv,
+ theme: this.theme,
+ options: viewSpec.options
+ }, viewSpec, dateProfileGenerator, this.contentEl);
+ }
+ else {
+ view.addScroll(view.queryScroll());
+ }
+ view.title = title; // for the API
+ var viewProps = {
+ 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(this.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, view));
+ }
+ view.receiveProps(viewProps);
+ };
+ // Sizing
+ // -----------------------------------------------------------------------------------------------------------------
+ CalendarComponent.prototype.updateSize = function (isResize) {
+ if (isResize === void 0) { isResize = false; }
+ var view = this.view;
+ if (isResize) {
+ view.addScroll(view.queryScroll());
+ }
+ 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.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
+ this.viewHeight = this.el.parentNode.offsetHeight - this.queryToolbarsHeight();
+ }
+ else {
+ this.viewHeight = Math.round(this.contentEl.offsetWidth /
+ 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.offsetHeight,
+ 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.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' };
+ }
+ }
+ }
+ // 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 seg = getElSeg(segEl);
+ if (seg && // might be the <div> surrounding the more link
+ component.isValidSegDownEl(ev.target)) {
+ // our way to simulate a link click for elements that can't be <a> 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 : '';
+ component.publiclyTrigger('eventClick', [
+ {
+ el: segEl,
+ event: new EventApi(component.calendar, seg.eventRange.def, seg.eventRange.instance),
+ jsEvent: ev,
+ view: component.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);
+ component.calendar.on('eventElRemove', _this.handleEventElRemove);
+ return _this;
+ }
+ EventHovering.prototype.destroy = function () {
+ this.removeHoverListeners();
+ this.component.calendar.off('eventElRemove', this.handleEventElRemove);
+ };
+ EventHovering.prototype.triggerEvent = function (publicEvName, ev, segEl) {
+ var component = this.component;
+ var seg = getElSeg(segEl);
+ if (!ev || component.isValidSegDownEl(ev.target)) {
+ component.publiclyTrigger(publicEvName, [
+ {
+ el: segEl,
+ event: new EventApi(this.component.calendar, seg.eventRange.def, seg.eventRange.instance),
+ jsEvent: ev,
+ view: component.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.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, isObjectsSimilar);
+ 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.needsFullRerender = false;
+ 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.renderableEventStore = createEmptyEventStore();
+ this.bindHandlers();
+ this.executeRender();
+ }
+ else {
+ this.requestRerender(true);
+ }
+ };
+ 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 || this.needsFullRerender) {
+ if (oldState.eventStore) {
+ this.isEventsUpdated = true;
+ }
+ }
+ if (oldState.dateProfile !== newState.dateProfile || this.needsFullRerender) {
+ 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 || this.needsFullRerender) {
+ 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 (needsFull) {
+ if (needsFull === void 0) { needsFull = false; }
+ this.needsRerender = true;
+ this.needsFullRerender = this.needsFullRerender || needsFull;
+ 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 () {
+ var needsFullRerender = this.needsFullRerender; // save before clearing
+ // clear these BEFORE the render so that new values will accumulate during render
+ this.needsRerender = false;
+ this.needsFullRerender = false;
+ this.isRendering = true;
+ this.renderComponent(needsFullRerender);
+ 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 (needsFull) {
+ var _a = this, state = _a.state, component = _a.component;
+ var viewType = state.viewType;
+ var viewSpec = this.viewSpecs[viewType];
+ var savedScroll = (needsFull && component) ? component.view.queryScroll() : null;
+ 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);
+ if (needsFull || !component) {
+ if (component) {
+ component.freezeHeight(); // next component will unfreeze it
+ component.destroy();
+ }
+ component = this.component = new CalendarComponent({
+ calendar: this,
+ view: null,
+ dateEnv: this.dateEnv,
+ theme: this.theme,
+ options: this.optionsManager.computed
+ }, this.el);
+ }
+ component.receiveProps(__assign({}, state, { viewSpec: viewSpec, dateProfile: state.dateProfile, dateProfileGenerator: this.dateProfileGenerators[viewType], eventStore: renderableEventStore, eventUiBases: eventUiBases, dateSelection: state.dateSelection, eventSelection: state.eventSelection, eventDrag: state.eventDrag, eventResize: state.eventResize }));
+ if (savedScroll) {
+ component.view.applyScroll(savedScroll, false);
+ }
+ 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
+ // -----------------------------------------------------------------------------------------------------------------
+ /*
+ Not meant for public API
+ */
+ Calendar.prototype.resetOptions = function (options) {
+ var _this = this;
+ var changeHandlers = this.pluginSystem.hooks.optionChangeHandlers;
+ var oldOptions = this.optionsManager.overrides;
+ var oldNormalOptions = {};
+ var normalOptions = {};
+ var specialOptions = {};
+ for (var name_1 in oldOptions) {
+ if (!changeHandlers[name_1]) {
+ oldNormalOptions[name_1] = oldOptions[name_1];
+ }
+ }
+ for (var name_2 in options) {
+ if (changeHandlers[name_2]) {
+ specialOptions[name_2] = options[name_2];
+ }
+ else {
+ normalOptions[name_2] = options[name_2];
+ }
+ }
+ this.batchRendering(function () {
+ if (anyKeysRemoved(oldNormalOptions, normalOptions)) {
+ _this.processOptions(options, 'reset');
+ }
+ else {
+ _this.processOptions(computeChangedProps(oldNormalOptions, normalOptions));
+ }
+ // handle special options last
+ for (var name_3 in specialOptions) {
+ changeHandlers[name_3](specialOptions[name_3], _this);
+ }
+ });
+ };
+ /*
+ Not meant for public API. Won't give the same precedence that setOption does
+ */
+ Calendar.prototype.setOptions = function (options) {
+ var _this = this;
+ var changeHandlers = this.pluginSystem.hooks.optionChangeHandlers;
+ var normalOptions = {};
+ var specialOptions = {};
+ for (var name_4 in options) {
+ if (changeHandlers[name_4]) {
+ specialOptions[name_4] = options[name_4];
+ }
+ else {
+ normalOptions[name_4] = options[name_4];
+ }
+ }
+ this.batchRendering(function () {
+ _this.processOptions(normalOptions);
+ // handle special options last
+ for (var name_5 in specialOptions) {
+ changeHandlers[name_5](specialOptions[name_5], _this);
+ }
+ });
+ };
+ Calendar.prototype.processOptions = function (options, mode) {
+ var _this = this;
+ var oldDateEnv = this.dateEnv; // do this before handleOptions
+ var isTimeZoneDirty = false;
+ var isSizeDirty = false;
+ var anyDifficultOptions = false;
+ for (var name_6 in options) {
+ if (/^(height|contentHeight|aspectRatio)$/.test(name_6)) {
+ isSizeDirty = true;
+ }
+ else if (/^(defaultDate|defaultView)$/.test(name_6)) ;
+ else {
+ anyDifficultOptions = true;
+ if (name_6 === 'timeZone') {
+ isTimeZoneDirty = true;
+ }
+ }
+ }
+ if (mode === 'reset') {
+ anyDifficultOptions = true;
+ this.optionsManager.reset(options);
+ }
+ else if (mode === 'dynamic') {
+ this.optionsManager.addDynamic(options); // takes higher precedence
+ }
+ else {
+ this.optionsManager.add(options);
+ }
+ if (anyDifficultOptions) {
+ this.handleOptions(this.optionsManager.computed); // only for "difficult" options
+ this.needsFullRerender = true;
+ this.batchRendering(function () {
+ if (isTimeZoneDirty) {
+ _this.dispatch({
+ type: 'CHANGE_TIMEZONE',
+ oldDateEnv: oldDateEnv
+ });
+ }
+ /* HACK
+ has the same effect as calling this.requestRerender(true)
+ but recomputes the state's dateProfile
+ */
+ _this.dispatch({
+ type: 'SET_VIEW_TYPE',
+ viewType: _this.state.viewType
+ });
+ });
+ }
+ if (isSizeDirty) {
+ this.updateSize();
+ }
+ };
+ Calendar.prototype.setOption = function (name, val) {
+ var _a;
+ this.processOptions((_a = {}, _a[name] = val, _a), 'dynamic');
+ };
+ 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;
+ };
+ /*
+ 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_7 in afterSizingTriggers) {
+ for (var _i = 0, _a = afterSizingTriggers[name_7]; _i < _a.length; _i++) {
+ var args = _a[_i];
+ this.publiclyTrigger(name_7, 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.addDynamic({ 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 = this.buildDateSpanApi(selection);
+ arg.jsEvent = pev ? pev.origEvent : null;
+ arg.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 = this.buildDatePointApi(dateSpan);
+ arg.dayEl = dayEl;
+ arg.jsEvent = ev;
+ arg.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 time = createDuration(timeInput);
+ if (time) {
+ this.component.view.scrollToTime(time);
+ }
+ };
+ return Calendar;
+ }());
+ EmitterMixin.mixInto(Calendar);
+ // for memoizers
+ // -----------------------------------------------------------------------------------------------------------------
+ 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(context, viewSpec, dateProfileGenerator, parentEl) {
+ var _this = _super.call(this, context, createElement('div', { className: 'fc-view fc-' + viewSpec.type + '-view' }), true // isView (HACK)
+ ) || 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.dateProfileGenerator = dateProfileGenerator;
+ _this.type = viewSpec.type;
+ _this.eventOrderSpecs = parseFieldSpecs(_this.opt('eventOrder'));
+ _this.nextDayThreshold = createDuration(_this.opt('nextDayThreshold'));
+ parentEl.appendChild(_this.el);
+ _this.initialize();
+ return _this;
+ }
+ View.prototype.initialize = function () {
+ };
+ Object.defineProperty(View.prototype, "activeStart", {
+ // Date Setting/Unsetting
+ // -----------------------------------------------------------------------------------------------------------------
+ get: function () {
+ return this.dateEnv.toDate(this.props.dateProfile.activeRange.start);
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(View.prototype, "activeEnd", {
+ get: function () {
+ return this.dateEnv.toDate(this.props.dateProfile.activeRange.end);
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(View.prototype, "currentStart", {
+ get: function () {
+ return this.dateEnv.toDate(this.props.dateProfile.currentRange.start);
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(View.prototype, "currentEnd", {
+ get: function () {
+ return this.dateEnv.toDate(this.props.dateProfile.currentRange.end);
+ },
+ enumerable: true,
+ configurable: true
+ });
+ // General Rendering
+ // -----------------------------------------------------------------------------------------------------------------
+ View.prototype.render = function (props) {
+ 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.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.calendar;
+ if (isResize || calendar.isViewUpdated || calendar.isDatesUpdated || calendar.isEventsUpdated) {
+ // sort of the catch-all sizing
+ // anything that might cause dimension changes
+ this.updateBaseSize(isResize, viewHeight, isAuto);
+ }
+ };
+ View.prototype.updateBaseSize = function (isResize, viewHeight, isAuto) {
+ };
+ // Date Rendering
+ // -----------------------------------------------------------------------------------------------------------------
+ View.prototype.renderDatesWrap = function (dateProfile) {
+ this.renderDates(dateProfile);
+ this.addScroll({
+ timeMs: createDuration(this.opt('scrollTime')).milliseconds
+ });
+ this.startNowIndicator(dateProfile); // shouldn't render yet because updateSize will be called soon
+ };
+ 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.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
+ View.prototype.startNowIndicator = function (dateProfile) {
+ var _this = this;
+ var dateEnv = this.dateEnv;
+ var unit;
+ var update;
+ var delay; // ms wait value
+ if (this.opt('nowIndicator')) {
+ unit = this.getNowIndicatorUnit(dateProfile);
+ if (unit) {
+ update = this.updateNowIndicator.bind(this);
+ this.initialNowDate = this.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.isNowIndicatorRendered) {
+ if (this.nowIndicatorTimeoutID) {
+ clearTimeout(this.nowIndicatorTimeoutID);
+ this.nowIndicatorTimeoutID = null;
+ }
+ if (this.nowIndicatorIntervalID) {
+ clearInterval(this.nowIndicatorIntervalID);
+ this.nowIndicatorIntervalID = null;
+ }
+ this.unrenderNowIndicator();
+ this.isNowIndicatorRendered = false;
+ }
+ };
+ View.prototype.getNowIndicatorUnit = function (dateProfile) {
+ // 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) {
+ var queuedScroll = this.queuedScroll || (this.queuedScroll = {});
+ __assign(queuedScroll, scroll);
+ };
+ View.prototype.popScroll = function (isResize) {
+ this.applyQueuedScroll(isResize);
+ this.queuedScroll = null;
+ };
+ View.prototype.applyQueuedScroll = function (isResize) {
+ 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 timeMs = scroll.timeMs;
+ if (timeMs != null) {
+ delete scroll.timeMs;
+ if (this.props.dateProfile) { // dates rendered yet?
+ __assign(scroll, this.computeDateScroll(timeMs));
+ }
+ }
+ if (this.props.dateProfile) { // dates rendered yet?
+ this.applyDateScroll(scroll);
+ }
+ };
+ View.prototype.computeDateScroll = function (timeMs) {
+ return {}; // subclasses must implement
+ };
+ View.prototype.queryDateScroll = function () {
+ return {}; // subclasses must implement
+ };
+ View.prototype.applyDateScroll = function (scroll) {
+ // subclasses must implement
+ };
+ // for API
+ View.prototype.scrollToTime = function (time) {
+ this.applyScroll({
+ timeMs: time.milliseconds
+ }, false);
+ };
+ return View;
+ }(DateComponent));
+ EmitterMixin.mixInto(View);
+ View.prototype.usesMinMaxTime = false;
+ View.prototype.dateProfileGeneratorClass = DateProfileGenerator;
+
+ var FgEventRenderer = /** @class */ (function () {
+ function FgEventRenderer(context) {
+ this.segs = [];
+ this.isSizeDirty = false;
+ this.context = context;
+ }
+ FgEventRenderer.prototype.renderSegs = function (segs, mirrorInfo) {
+ 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;
+ this.context.view.triggerRenderedSegs(this.segs, Boolean(mirrorInfo));
+ };
+ FgEventRenderer.prototype.unrender = function (_segs, mirrorInfo) {
+ this.context.view.triggerWillRemoveSegs(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.view, 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.view.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
+ });
+ }
+
+ var FillRenderer = /** @class */ (function () {
+ function FillRenderer(context) {
+ this.fillSegTag = 'div';
+ this.dirtySizeFlags = {};
+ this.context = context;
+ this.containerElsByType = {};
+ this.segsByType = {};
+ }
+ FillRenderer.prototype.getSegsByType = function (type) {
+ return this.segsByType[type] || [];
+ };
+ FillRenderer.prototype.renderSegs = function (type, segs) {
+ var _a;
+ 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') {
+ this.context.view.triggerRenderedSegs(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) {
+ var segs = this.segsByType[type];
+ if (segs) {
+ if (type === 'bgEvent') {
+ this.context.view.triggerWillRemoveSegs(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.view, 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) + '"' : '') +
+ '></' + this.fillSegTag + '>';
+ };
+ 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 view = context.view, 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 '' +
+ '<th class="' + classNames.join(' ') + '"' +
+ ((isDateValid && datesRepDistinctDays) ?
+ ' data-date="' + dateEnv.formatIso(dateMarker, { omitTime: true }) + '"' :
+ '') +
+ (colspan > 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(view, { date: dateMarker, forceOff: !datesRepDistinctDays || colCnt === 1 }, innerHtml) :
+ // if not valid, display text, but no link
+ innerHtml) +
+ '</th>';
+ }
+
+ var DayHeader = /** @class */ (function (_super) {
+ __extends(DayHeader, _super);
+ function DayHeader(context, parentEl) {
+ var _this = _super.call(this, context) || this;
+ parentEl.innerHTML = ''; // because might be nbsp
+ parentEl.appendChild(_this.el = htmlToElement('<div class="fc-row ' + _this.theme.getClass('headerRow') + '">' +
+ '<table class="' + _this.theme.getClass('tableGrid') + '">' +
+ '<thead></thead>' +
+ '</table>' +
+ '</div>'));
+ _this.thead = _this.el.querySelector('thead');
+ return _this;
+ }
+ DayHeader.prototype.destroy = function () {
+ removeElement(this.el);
+ };
+ DayHeader.prototype.render = function (props) {
+ var dates = props.dates, datesRepDistinctDays = props.datesRepDistinctDays;
+ var parts = [];
+ if (props.renderIntroHtml) {
+ parts.push(props.renderIntroHtml());
+ }
+ var colHeadFormat = createFormatter(this.opt('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, this.context));
+ }
+ if (this.isRtl) {
+ parts.reverse();
+ }
+ this.thead.innerHTML = '<tr>' + parts.join('') + '</tr>';
+ };
+ 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, component) {
+ var extraArgs = [];
+ for (var _i = 4; _i < arguments.length; _i++) {
+ extraArgs[_i - 4] = 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, 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, component) {
+ var extraArgs = [];
+ for (var _i = 4; _i < arguments.length; _i++) {
+ extraArgs[_i - 4] = arguments[_i];
+ }
+ if (!businessHours) {
+ return [];
+ }
+ return this._sliceEventStore.apply(this, [expandRecurring(businessHours, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), component.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.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.1.0';
+
+ exports.Calendar = Calendar;
+ exports.Component = Component;
+ 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.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.freezeRaw = freezeRaw;
+ 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.isObjectsSimilar = isObjectsSimilar;
+ exports.isPropsValid = isPropsValid;
+ exports.isSingleDay = isSingleDay;
+ exports.isValidDate = isValidDate;
+ exports.isValuesSimilar = isValuesSimilar;
+ 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 });
+
+}));
--- /dev/null
+/*!
+FullCalendar Core Package v4.1.0
+Docs & License: https://fullcalendar.io/
+(c) 2019 Adam Shaw
+*/.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,AAEAAAALAIAAAwAwT1MvMg8SBfAAAAC8AAAAYGNtYXAXVtKNAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZgYydxIAAAF4AAAFNGhlYWQUJ7cIAAAGrAAAADZoaGVhB20DzAAABuQAAAAkaG10eCIABhQAAAcIAAAALGxvY2ED4AU6AAAHNAAAABhtYXhwAA8AjAAAB0wAAAAgbmFtZXsr690AAAdsAAABhnBvc3QAAwAAAAAI9AAAACAAAwPAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpBgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6Qb//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAWIAjQKeAskAEwAAJSc3NjQnJiIHAQYUFwEWMjc2NCcCnuLiDQ0MJAz/AA0NAQAMJAwNDcni4gwjDQwM/wANIwz/AA0NDCMNAAAAAQFiAI0CngLJABMAACUBNjQnASYiBwYUHwEHBhQXFjI3AZ4BAA0N/wAMJAwNDeLiDQ0MJAyNAQAMIw0BAAwMDSMM4uINIwwNDQAAAAIA4gC3Ax4CngATACcAACUnNzY0JyYiDwEGFB8BFjI3NjQnISc3NjQnJiIPAQYUHwEWMjc2NCcB87e3DQ0MIw3VDQ3VDSMMDQ0BK7e3DQ0MJAzVDQ3VDCQMDQ3zuLcMJAwNDdUNIwzWDAwNIwy4twwkDA0N1Q0jDNYMDA0jDAAAAgDiALcDHgKeABMAJwAAJTc2NC8BJiIHBhQfAQcGFBcWMjchNzY0LwEmIgcGFB8BBwYUFxYyNwJJ1Q0N1Q0jDA0Nt7cNDQwjDf7V1Q0N1QwkDA0Nt7cNDQwkDLfWDCMN1Q0NDCQMt7gMIw0MDNYMIw3VDQ0MJAy3uAwjDQwMAAADAFUAAAOrA1UAMwBoAHcAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMhMjY1NCYjISIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAAVYRGRkR/qoRGRkRA1UFBAUOCQkVDAsZDf2rDRkLDBUJCA4FBQUFBQUOCQgVDAsZDQJVDRkLDBUJCQ4FBAVVAgECBQMCBwQECAX9qwQJAwQHAwMFAQICAgIBBQMDBwQDCQQCVQUIBAQHAgMFAgEC/oAZEhEZGRESGQAAAAADAFUAAAOrA1UAMwBoAIkAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMzFRQWMzI2PQEzMjY1NCYrATU0JiMiBh0BIyIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAgBkSEhmAERkZEYAZEhIZgBEZGREDVQUEBQ4JCRUMCxkN/asNGQsMFQkIDgUFBQUFBQ4JCBUMCxkNAlUNGQsMFQkJDgUEBVUCAQIFAwIHBAQIBf2rBAkDBAcDAwUBAgICAgEFAwMHBAMJBAJVBQgEBAcCAwUCAQL+gIASGRkSgBkSERmAEhkZEoAZERIZAAABAOIAjQMeAskAIAAAExcHBhQXFjI/ARcWMjc2NC8BNzY0JyYiDwEnJiIHBhQX4uLiDQ0MJAzi4gwkDA0N4uINDQwkDOLiDCQMDQ0CjeLiDSMMDQ3h4Q0NDCMN4uIMIw0MDOLiDAwNIwwAAAABAAAAAQAAa5n0y18PPPUACwQAAAAAANivOVsAAAAA2K85WwAAAAADqwNVAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAOrAAEAAAAAAAAAAAAAAAAAAAALBAAAAAAAAAAAAAAAAgAAAAQAAWIEAAFiBAAA4gQAAOIEAABVBAAAVQQAAOIAAAAAAAoAFAAeAEQAagCqAOoBngJkApoAAQAAAAsAigADAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAcAAAABAAAAAAACAAcAYAABAAAAAAADAAcANgABAAAAAAAEAAcAdQABAAAAAAAFAAsAFQABAAAAAAAGAAcASwABAAAAAAAKABoAigADAAEECQABAA4ABwADAAEECQACAA4AZwADAAEECQADAA4APQADAAEECQAEAA4AfAADAAEECQAFABYAIAADAAEECQAGAA4AUgADAAEECQAKADQApGZjaWNvbnMAZgBjAGkAYwBvAG4Ac1ZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGZjaWNvbnMAZgBjAGkAYwBvAG4Ac2ZjaWNvbnMAZgBjAGkAYwBvAG4Ac1JlZ3VsYXIAUgBlAGcAdQBsAGEAcmZjaWNvbnMAZgBjAGkAYwBvAG4Ac0ZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") 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:"\e900"}.fc-icon-chevron-right:before{content:"\e901"}.fc-icon-chevrons-left:before{content:"\e902"}.fc-icon-chevrons-right:before{content:"\e903"}.fc-icon-minus-square:before{content:"\e904"}.fc-icon-plus-square:before{content:"\e905"}.fc-icon-x:before{content:"\e906"}.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
--- /dev/null
+/*!
+FullCalendar Core Package v4.1.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):(e=e||self,t(e.FullCalendar={}))}(this,function(e){"use strict";function t(e,t,n){var r=document.createElement(e);if(t)for(var i in t)"style"===i?g(r,t[i]):mi[i]?r[i]=t[i]:r.setAttribute(i,t[i]);return"string"==typeof n?r.innerHTML=n:null!=n&&a(r,n),r}function n(e){e=e.trim();var t=document.createElement(o(e));return t.innerHTML=e,t.firstChild}function r(e){return Array.prototype.slice.call(i(e))}function i(e){e=e.trim();var t=document.createElement(o(e));return t.innerHTML=e,t.childNodes}function o(e){return Ei[e.substr(0,3)]||"div"}function a(e,t){for(var n=l(t),r=0;r<n.length;r++)e.appendChild(n[r])}function s(e,t){for(var n=l(t),r=e.firstChild||null,i=0;i<n.length;i++)e.insertBefore(n[i],r)}function u(e,t){for(var n=l(t),r=e.nextSibling||null,i=0;i<n.length;i++)e.parentNode.insertBefore(n[i],r)}function l(e){return"string"==typeof e?r(e):e instanceof Node?[e]:Array.prototype.slice.call(e)}function c(e){e.parentNode&&e.parentNode.removeChild(e)}function d(e,t){return bi.call(e,t)}function f(e,t){return Si.call(e,t)}function p(e,t){for(var n=e instanceof HTMLElement?[e]:e,r=[],i=0;i<n.length;i++)for(var o=n[i].querySelectorAll(t),a=0;a<o.length;a++)r.push(o[a]);return r}function h(e,t){for(var n=e instanceof HTMLElement?[e]:e,r=[],i=0;i<n.length;i++)for(var o=n[i].children,a=0;a<o.length;a++){var s=o[a];t&&!f(s,t)||r.push(s)}return r}function v(e,t,n){n?e.classList.add(t):e.classList.remove(t)}function g(e,t){for(var n in t)y(e,n,t[n])}function y(e,t,n){null==n?e.style[t]="":"number"==typeof n&&Di.test(t)?e.style[t]=n+"px":e.style[t]=n}function m(e,t){return e.left>=t.left&&e.left<t.right&&e.top>=t.top&&e.top<t.bottom}function E(e,t){var n={left:Math.max(e.left,t.left),right:Math.min(e.right,t.right),top:Math.max(e.top,t.top),bottom:Math.min(e.bottom,t.bottom)};return n.left<n.right&&n.top<n.bottom&&n}function S(e,t,n){return{left:e.left+t,right:e.right+t,top:e.top+n,bottom:e.bottom+n}}function b(e,t){return{left:Math.min(Math.max(e.left,t.left),t.right),top:Math.min(Math.max(e.top,t.top),t.bottom)}}function D(e){return{left:(e.left+e.right)/2,top:(e.top+e.bottom)/2}}function T(e,t){return{left:e.left-t.left,top:e.top-t.top}}function w(){return null===Ti&&(Ti=R()),Ti}function R(){var e=t("div",{style:{position:"absolute",top:-1e3,left:0,border:0,padding:0,overflow:"scroll",direction:"rtl"}},"<div></div>");document.body.appendChild(e);var n=e.firstChild,r=n.getBoundingClientRect().left>e.getBoundingClientRect().left;return c(e),r}function I(e){return e=Math.max(0,e),e=Math.round(e)}function C(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=I(e.offsetWidth-e.clientWidth-r-i),u=I(e.offsetHeight-e.clientHeight-o-a),l={borderLeft:r,borderRight:i,borderTop:o,borderBottom:a,scrollbarBottom:u,scrollbarLeft:0,scrollbarRight:0};return w()&&"rtl"===n.direction?l.scrollbarLeft=s:l.scrollbarRight=s,t&&(l.paddingLeft=parseInt(n.paddingLeft,10)||0,l.paddingRight=parseInt(n.paddingRight,10)||0,l.paddingTop=parseInt(n.paddingTop,10)||0,l.paddingBottom=parseInt(n.paddingBottom,10)||0),l}function M(e,t){void 0===t&&(t=!1);var n=k(e),r=C(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 k(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 O(){return{left:window.pageXOffset,right:window.pageXOffset+document.documentElement.clientWidth,top:window.pageYOffset,bottom:window.pageYOffset+document.documentElement.clientHeight}}function _(e){var t=window.getComputedStyle(e);return e.getBoundingClientRect().height+parseInt(t.marginTop,10)+parseInt(t.marginBottom,10)}function P(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 H(e){return P(e).map(function(e){return M(e)}).concat(O()).reduce(function(e,t){return E(e,t)||t})}function x(e){e.preventDefault()}function N(e,t,n,r){function i(e){var t=d(e.target,n);t&&r.call(t,e,t)}return e.addEventListener(t,i),function(){e.removeEventListener(t,i)}}function z(e,t,n,r){var i;return N(e,"mouseover",t,function(e,t){if(t!==i){i=t,n(e,t);var o=function(e){i=null,r(e,t),t.removeEventListener("mouseleave",o)};t.addEventListener("mouseleave",o)}})}function U(e,t){var n=function(r){t(r),wi.forEach(function(t){e.removeEventListener(t,n)})};wi.forEach(function(t){e.addEventListener(t,n)})}function L(e,t){var n=ie(e);return n[2]+=7*t,oe(n)}function A(e,t){var n=ie(e);return n[2]+=t,oe(n)}function V(e,t){var n=ie(e);return n[6]+=t,oe(n)}function B(e,t){return F(e,t)/7}function F(e,t){return(t.valueOf()-e.valueOf())/864e5}function W(e,t){return(t.valueOf()-e.valueOf())/36e5}function Z(e,t){return(t.valueOf()-e.valueOf())/6e4}function j(e,t){return(t.valueOf()-e.valueOf())/1e3}function Y(e,t){var n=X(e),r=X(t);return{years:0,months:0,days:Math.round(F(n,r)),milliseconds:t.valueOf()-r.valueOf()-(e.valueOf()-n.valueOf())}}function q(e,t){var n=G(e,t);return null!==n&&n%7==0?n/7:null}function G(e,t){return se(e)===se(t)?Math.round(F(e,t)):null}function X(e){return oe([e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()])}function J(e){return oe([e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours()])}function K(e){return oe([e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes()])}function Q(e){return oe([e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds()])}function $(e,t,n){var r=e.getUTCFullYear(),i=ee(e,r,t,n);if(i<1)return ee(e,r-1,t,n);var o=ee(e,r+1,t,n);return o>=1?Math.min(i,o):i}function ee(e,t,n,r){var i=oe([t,0,1+te(t,n,r)]),o=X(e),a=Math.round(F(i,o));return Math.floor(a/7)+1}function te(e,t,n){var r=7+t-n;return-(7+oe([e,0,r]).getUTCDay()-t)%7+r-1}function ne(e){return[e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()]}function re(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 ie(e){return[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds()]}function oe(e){return 1===e.length&&(e=e.concat([0])),new Date(Date.UTC.apply(Date,e))}function ae(e){return!isNaN(e.valueOf())}function se(e){return 1e3*e.getUTCHours()*60*60+1e3*e.getUTCMinutes()*60+1e3*e.getUTCSeconds()+e.getUTCMilliseconds()}function ue(e,t){var n;return"string"==typeof e?le(e):"object"==typeof e&&e?ce(e):"number"==typeof e?ce((n={},n[t||"milliseconds"]=e,n)):null}function le(e){var t=Ci.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}function ce(e){return{years:e.years||e.year||0,months:e.months||e.month||0,days:(e.days||e.day||0)+7*de(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 de(e){return e.weeks||e.week||0}function fe(e,t){return e.years===t.years&&e.months===t.months&&e.days===t.days&&e.milliseconds===t.milliseconds}function pe(e){return 0===e.years&&0===e.months&&1===e.days&&0===e.milliseconds}function he(e,t){return{years:e.years+t.years,months:e.months+t.months,days:e.days+t.days,milliseconds:e.milliseconds+t.milliseconds}}function ve(e,t){return{years:e.years-t.years,months:e.months-t.months,days:e.days-t.days,milliseconds:e.milliseconds-t.milliseconds}}function ge(e,t){return{years:e.years*t,months:e.months*t,days:e.days*t,milliseconds:e.milliseconds*t}}function ye(e){return Ee(e)/365}function me(e){return Ee(e)/30}function Ee(e){return De(e)/864e5}function Se(e){return De(e)/6e4}function be(e){return De(e)/1e3}function De(e){return 31536e6*e.years+2592e6*e.months+864e5*e.days+e.milliseconds}function Te(e,t){for(var n=null,r=0;r<Ii.length;r++){var i=Ii[r];if(t[i]){var o=e[i]/t[i];if(!Ze(o)||null!==n&&n!==o)return null;n=o}else if(e[i])return null}return n}function we(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,t){t.left&&g(e,{borderLeftWidth:1,marginLeft:t.left-1}),t.right&&g(e,{borderRightWidth:1,marginRight:t.right-1})}function Ie(e){g(e,{marginLeft:"",marginRight:"",borderLeftWidth:"",borderRightWidth:""})}function Ce(){document.body.classList.add("fc-not-allowed")}function Me(){document.body.classList.remove("fc-not-allowed")}function ke(e,t,n){var r=Math.floor(t/e.length),i=Math.floor(t-r*(e.length-1)),o=[],a=[],s=[],u=0;Oe(e),e.forEach(function(t,n){var l=n===e.length-1?i:r,c=_(t);c<l?(o.push(t),a.push(c),s.push(t.offsetHeight)):u+=c}),n&&(t-=u,r=Math.floor(t/o.length),i=Math.floor(t-r*(o.length-1))),o.forEach(function(e,t){var n=t===o.length-1?i:r,u=a[t],l=s[t],c=n-(u-l);u<n&&(e.style.height=c+"px")})}function Oe(e){e.forEach(function(e){e.style.height=""})}function _e(e){var t=0;return e.forEach(function(e){var n=e.firstChild;if(n instanceof HTMLElement){var r=n.offsetWidth;r>t&&(t=r)}}),t++,e.forEach(function(e){e.style.width=t+"px"}),t}function Pe(e,t){var n={position:"relative",left:-1};g(e,n),g(t,n);var r=e.offsetHeight-t.offsetHeight,i={position:"",left:""};return g(e,i),g(t,i),r}function He(e){e.classList.add("fc-unselectable"),e.addEventListener("selectstart",x)}function xe(e){e.classList.remove("fc-unselectable"),e.removeEventListener("selectstart",x)}function Ne(e){e.addEventListener("contextmenu",x)}function ze(e){e.removeEventListener("contextmenu",x)}function Ue(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<i.length;t++)n=i[t],"string"==typeof n?r.push("-"===n.charAt(0)?{field:n.substring(1),order:-1}:{field:n,order:1}):"function"==typeof n&&r.push({func:n});return r}function Le(e,t,n){var r,i;for(r=0;r<n.length;r++)if(i=Ae(e,t,n[r]))return i;return 0}function Ae(e,t,n){return n.func?n.func(e,t):Ve(e[n.field],t[n.field])*(n.order||1)}function Ve(e,t){return e||t?null==t?-1:null==e?1:"string"==typeof e||"string"==typeof t?String(e).localeCompare(String(t)):e-t:0}function Be(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Fe(e,t){var n=String(e);return"000".substr(0,t-n.length)+n}function We(e,t){return e-t}function Ze(e){return e%1==0}function je(e,t,n){if("function"==typeof e&&(e=[e]),e){var r=void 0,i=void 0;for(r=0;r<e.length;r++)i=e[r].apply(t,n)||i;return i}}function Ye(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=0;n<e.length;n++)if(void 0!==e[n])return e[n]}function qe(e,t){var n,r,i,o,a,s=function(){var u=(new Date).valueOf()-o;u<t?n=setTimeout(s,t-u):(n=null,a=e.apply(i,r),i=r=null)};return function(){return i=this,r=arguments,o=(new Date).valueOf(),n||(n=setTimeout(s,t)),a}}function Ge(e,t,n,r){void 0===n&&(n={});var i={};for(var o in t){var a=t[o];void 0!==e[o]?a===Function?i[o]="function"==typeof e[o]?e[o]:null:i[o]=a?a(e[o]):e[o]:void 0!==n[o]?i[o]=n[o]:a===String?i[o]="":a&&a!==Number&&a!==Boolean&&a!==Function?i[o]=a(null):i[o]=null}if(r)for(var o in e)void 0===t[o]&&(r[o]=e[o]);return i}function Xe(e){return Array.isArray(e)?Array.prototype.slice.call(e):e}function Je(e){var t=Math.floor(F(e.start,e.end))||1,n=X(e.start);return{start:n,end:A(n,t)}}function Ke(e,t){void 0===t&&(t=ue(0));var n=null,r=null;if(e.end){r=X(e.end);var i=e.end.valueOf()-r.valueOf();i&&i>=De(t)&&(r=A(r,1))}return e.start&&(n=X(e.start),r&&r<=n&&(r=A(n,1))),{start:n,end:r}}function Qe(e){var t=Ke(e);return F(t.start,t.end)>1}function $e(e,t,n,r){return"year"===r?ue(n.diffWholeYears(e,t),"year"):"month"===r?ue(n.diffWholeMonths(e,t),"month"):Y(e,t)}function et(e,t){function n(){this.constructor=e}Mi(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}function tt(e,t,n,r,i){for(var o=0;o<r.length;o++){var a={},s=r[o].parse(e,a,n);if(s){var u=a.allDay;return delete a.allDay,null==u&&null==(u=t)&&null==(u=s.allDayGuess)&&(u=!1),ki(i,a),{allDay:u,duration:s.duration,typeData:s.typeData,typeId:o}}}return null}function nt(e,t,n,r){var i=r[e.recurringDef.typeId],o=i.expand(e.recurringDef.typeData,t,n);return e.allDay&&(o=o.map(X)),o}function rt(e,t){var n,r,i,o,a,s,u={};if(t)for(n=0;n<t.length;n++){for(r=t[n],i=[],o=e.length-1;o>=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]=rt(i))}for(n=e.length-1;n>=0;n--){s=e[n];for(r in s)r in u||(u[r]=s[r])}return u}function it(e,t){var n={};for(var r in e)t(e[r],r)&&(n[r]=e[r]);return n}function ot(e,t){var n={};for(var r in e)n[r]=t(e[r],r);return n}function at(e){for(var t={},n=0,r=e;n<r.length;n++){t[r[n]]=!0}return t}function st(e){var t=[];for(var n in e)t.push(e[n]);return t}function ut(e,t,n,r){for(var i=vt(),o=0,a=e;o<a.length;o++){var s=a[o],u=On(s,t,n,r);u&<(u,i)}return i}function lt(e,t){return void 0===t&&(t=vt()),t.defs[e.def.defId]=e.def,e.instance&&(t.instances[e.instance.instanceId]=e.instance),t}function ct(e,t,n){var r=n.dateEnv,i=e.defs,o=e.instances;o=it(o,function(e){return!i[e.defId].recurringDef});for(var a in i){var s=i[a];if(s.recurringDef){var u=nt(s,t,n.dateEnv,n.pluginSystem.hooks.recurringTypes),l=s.recurringDef.duration;l||(l=s.allDay?n.defaultAllDayEventDuration:n.defaultTimedEventDuration);for(var c=0,d=u;c<d.length;c++){var f=d[c],p=Pn(a,{start:f,end:r.add(f,l)});o[p.instanceId]=p}}}return{defs:i,instances:o}}function dt(e,t){var n=e.instances[t];if(n){var r=e.defs[n.defId],i=yt(e,function(e){return ft(r,e)});return i.defs[r.defId]=r,i.instances[n.instanceId]=n,i}return vt()}function ft(e,t){return Boolean(e.groupId&&e.groupId===t.groupId)}function pt(e,t,n){var r=n.opt("eventDataTransform"),i=t?t.eventDataTransform:null;return i&&(e=ht(e,i)),r&&(e=ht(e,r)),e}function ht(e,t){var n;if(t){n=[];for(var r=0,i=e;r<i.length;r++){var o=i[r],a=t(o);a?n.push(a):null==a&&n.push(o)}}else n=e;return n}function vt(){return{defs:{},instances:{}}}function gt(e,t){return{defs:ki({},e.defs,t.defs),instances:ki({},e.instances,t.instances)}}function yt(e,t){var n=it(e.defs,t),r=it(e.instances,function(e){return n[e.defId]});return{defs:n,instances:r}}function mt(e,t){var n=null,r=null;return e.start&&(n=t.createMarker(e.start)),e.end&&(r=t.createMarker(e.end)),n||r?n&&r&&r<n?null:{start:n,end:r}:null}function Et(e,t){var n,r,i=[],o=t.start;for(e.sort(St),n=0;n<e.length;n++)r=e[n],r.start>o&&i.push({start:o,end:r.start}),r.end>o&&(o=r.end);return o<t.end&&i.push({start:o,end:t.end}),i}function St(e,t){return e.start.valueOf()-t.start.valueOf()}function bt(e,t){var n=e.start,r=e.end,i=null;return null!==t.start&&(n=null===n?t.start:new Date(Math.max(n.valueOf(),t.start.valueOf()))),null!=t.end&&(r=null===r?t.end:new Date(Math.min(r.valueOf(),t.end.valueOf()))),(null===n||null===r||n<r)&&(i={start:n,end:r}),i}function Dt(e,t){return(null===e.start?null:e.start.valueOf())===(null===t.start?null:t.start.valueOf())&&(null===e.end?null:e.end.valueOf())===(null===t.end?null:t.end.valueOf())}function Tt(e,t){return(null===e.end||null===t.start||e.end>t.start)&&(null===e.start||null===t.end||e.start<t.end)}function wt(e,t){return(null===e.start||null!==t.start&&t.start>=e.start)&&(null===e.end||null!==t.end&&t.end<=e.end)}function Rt(e,t){return(null===e.start||t>=e.start)&&(null===e.end||t<e.end)}function It(e,t){return null!=t.start&&e<t.start?t.start:null!=t.end&&e>=t.end?new Date(t.end.valueOf()-1):e}function Ct(e,t){for(var n=0,r=0;r<e.length;)e[r]===t?(e.splice(r,1),n++):r++;return n}function Mt(e,t){var n,r=e.length;if(r!==t.length)return!1;for(n=0;n<r;n++)if(e[n]!==t[n])return!1;return!0}function kt(e){var t,n;return function(){return t&&Mt(t,arguments)||(t=arguments,n=e.apply(this,arguments)),n}}function Ot(e,t){var n=null;return function(){var r=e.apply(this,arguments);return(null===n||n!==r&&!t(n,r))&&(n=r),n}}function _t(e,t,n){var r=Object.keys(e).length;return 1===r&&"short"===e.timeZoneName?function(e){return Wt(e.timeZoneOffset)}:0===r&&t.week?function(e){return zt(n.computeWeekNumber(e.marker),n.weekLabel,n.locale,t.week)}:Pt(e,t,n)}function Pt(e,t,n){e=ki({},e),t=ki({},t),Ht(e,t),e.timeZone="UTC";var r,i=new Intl.DateTimeFormat(n.locale.codes,e);if(t.omitZeroMinute){var o=ki({},e);delete o.minute,r=new Intl.DateTimeFormat(n.locale.codes,o)}return function(o){var a,s=o.marker;return a=r&&!s.getUTCMinutes()?r:i,xt(a.format(s),o,e,t,n)}}function Ht(e,t){e.timeZoneName&&(e.hour||(e.hour="2-digit"),e.minute||(e.minute="2-digit")),"long"===e.timeZoneName&&(e.timeZoneName="short"),t.omitZeroMinute&&(e.second||e.millisecond)&&delete t.omitZeroMinute}function xt(e,t,n,r,i){return e=e.replace(Ni,""),"short"===n.timeZoneName&&(e=Nt(e,"UTC"===i.timeZone||null==t.timeZoneOffset?"UTC":Wt(t.timeZoneOffset))),r.omitCommas&&(e=e.replace(Hi,"").trim()),r.omitZeroMinute&&(e=e.replace(":00","")),!1===r.meridiem?e=e.replace(Pi,"").trim():"narrow"===r.meridiem?e=e.replace(Pi,function(e,t){return t.toLocaleLowerCase()}):"short"===r.meridiem?e=e.replace(Pi,function(e,t){return t.toLocaleLowerCase()+"m"}):"lowercase"===r.meridiem&&(e=e.replace(Pi,function(e){return e.toLocaleLowerCase()})),e=e.replace(xi," "),e=e.trim()}function Nt(e,t){var n=!1;return e=e.replace(zi,function(){return n=!0,t}),n||(e+=" "+t),e}function zt(e,t,n,r){var i=[];return"narrow"===r?i.push(t):"short"===r&&i.push(t," "),i.push(n.simpleNumberFormat.format(e)),n.options.isRtl&&i.reverse(),i.join("")}function Ut(e,t,n){return n.getMarkerYear(e)!==n.getMarkerYear(t)?5:n.getMarkerMonth(e)!==n.getMarkerMonth(t)?4:n.getMarkerDay(e)!==n.getMarkerDay(t)?2:se(e)!==se(t)?1:0}function Lt(e,t){var n={};for(var r in e)r in _i&&!(_i[r]<=t)||(n[r]=e[r]);return n}function At(e,t,n,r){for(var i=0;i<e.length;){var o=e.indexOf(t,i);if(-1===o)break;var a=e.substr(0,o);i=o+t.length;for(var s=e.substr(i),u=0;u<n.length;){var l=n.indexOf(r,u);if(-1===l)break;var c=n.substr(0,l);u=l+r.length;var d=n.substr(u);if(a===c&&s===d)return{before:a,after:s}}}return null}function Vt(e,t){return"object"==typeof e&&e?("string"==typeof t&&(e=ki({separator:t},e)),new Ui(e)):"string"==typeof e?new Li(e,t):"function"==typeof e?new Ai(e):void 0}function Bt(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",Wt(t,!0)))),r}function Ft(e){return Fe(e.getUTCHours(),2)+":"+Fe(e.getUTCMinutes(),2)+":"+Fe(e.getUTCSeconds(),2)}function Wt(e,t){void 0===t&&(t=!1);var n=e<0?"-":"+",r=Math.abs(e),i=Math.floor(r/60),o=Math.round(r%60);return t?n+Fe(i,2)+":"+Fe(o,2):"GMT"+n+i+(o?":"+Fe(o,2):"")}function Zt(e,t,n,r){var i=jt(e,n.calendarSystem);return{date:i,start:i,end:t?jt(t,n.calendarSystem):null,timeZone:n.timeZone,localeCodes:n.locale.codes,separator:r}}function jt(e,t){var n=t.markerToArray(e.marker);return{marker:e.marker,timeZoneOffset:e.timeZoneOffset,array:n,year:n[0],month:n[1],day:n[2],hour:n[3],minute:n[4],second:n[5],millisecond:n[6]}}function Yt(e,t,n,r){var i={},o={},a={},s=[],u=[],l=Kt(e.defs,t);for(var c in e.defs){var d=e.defs[c];"inverse-background"===d.rendering&&(d.groupId?(i[d.groupId]=[],a[d.groupId]||(a[d.groupId]=d)):o[c]=[])}for(var f in e.instances){var p=e.instances[f],d=e.defs[p.defId],h=l[d.defId],v=p.range,g=!d.allDay&&r?Ke(v,r):v,y=bt(g,n);y&&("inverse-background"===d.rendering?d.groupId?i[d.groupId].push(y):o[p.defId].push(y):("background"===d.rendering?s:u).push({def:d,ui:h,instance:p,range:y,isStart:g.start&&g.start.valueOf()===y.start.valueOf(),isEnd:g.end&&g.end.valueOf()===y.end.valueOf()}))}for(var m in i)for(var E=i[m],S=Et(E,n),b=0,D=S;b<D.length;b++){var T=D[b],d=a[m],h=l[d.defId];s.push({def:d,ui:h,instance:null,range:T,isStart:!1,isEnd:!1})}for(var c in o)for(var E=o[c],S=Et(E,n),w=0,R=S;w<R.length;w++){var T=R[w];s.push({def:e.defs[c],ui:l[c],instance:null,range:T,isStart:!1,isEnd:!1})}return{bg:s,fg:u}}function qt(e){return"background"===e.rendering||"inverse-background"===e.rendering}function Gt(e,t,n){e.hasPublicHandlers("eventRender")&&(t=t.filter(function(t){var r=e.publiclyTrigger("eventRender",[{event:new Bi(e.calendar,t.eventRange.def,t.eventRange.instance),isMirror:n,isStart:t.isStart,isEnd:t.isEnd,el:t.el,view:e}]);return!1!==r&&(r&&!0!==r&&(t.el=r),!0)}));for(var r=0,i=t;r<i.length;r++){var o=i[r];Xt(o.el,o)}return t}function Xt(e,t){e.fcSeg=t}function Jt(e){return e.fcSeg||null}function Kt(e,t){return ot(e,function(e){return Qt(e,t)})}function Qt(e,t){var n=[];return t[""]&&n.push(t[""]),t[e.defId]&&n.push(t[e.defId]),n.push(e.ui),Mn(n)}function $t(e,t,n,r){var i=Kt(e.defs,t),o=vt();for(var a in e.defs){var s=e.defs[a];o.defs[a]=en(s,i[a],n,r.pluginSystem.hooks.eventDefMutationAppliers,r)}for(var u in e.instances){var l=e.instances[u],s=o.defs[l.defId];o.instances[u]=nn(l,s,i[l.defId],n,r)}return o}function en(e,t,n,r,i){var o=n.standardProps||{};null==o.hasEnd&&t.durationEditable&&tn(t.startEditable?n.startDelta:null,n.endDelta||null)&&(o.hasEnd=!0);var a=ki({},e,o,{ui:ki({},e.ui,o.ui)});n.extendedProps&&(a.extendedProps=ki({},a.extendedProps,n.extendedProps));for(var s=0,u=r;s<u.length;s++){(0,u[s])(a,n,i)}return!a.hasEnd&&i.opt("forceEventDuration")&&(a.hasEnd=!0),a}function tn(e,t){return e&&!De(e)&&(e=null),t&&!De(t)&&(t=null),!(!e&&!t)&&(Boolean(e)!==Boolean(t)||!fe(e,t))}function nn(e,t,n,r,i){var o=i.dateEnv,a=r.standardProps&&!0===r.standardProps.allDay,s=r.standardProps&&!1===r.standardProps.hasEnd,u=ki({},e);return a&&(u.range=Je(u.range)),r.startDelta&&n.startEditable&&(u.range={start:o.add(u.range.start,r.startDelta),end:u.range.end}),s?u.range={start:u.range.start,end:i.getDefaultEventEnd(t.allDay,u.range.start)}:!r.endDelta||!n.durationEditable&&tn(n.startEditable?r.startDelta:null,r.endDelta)||(u.range={start:u.range.start,end:o.add(u.range.end,r.endDelta)}),t.allDay&&(u.range={start:X(u.range.start),end:X(u.range.end)}),u.range.end<u.range.start&&(u.range.end=i.getDefaultEventEnd(t.allDay,u.range.start)),u}function rn(e,t,n,r,i){switch(t.type){case"RECEIVE_EVENTS":return on(e,n[t.sourceId],t.fetchId,t.fetchRange,t.rawEvents,i);case"ADD_EVENTS":return an(e,t.eventStore,r?r.activeRange:null,i);case"MERGE_EVENTS":return gt(e,t.eventStore);case"PREV":case"NEXT":case"SET_DATE":case"SET_VIEW_TYPE":return r?ct(e,r.activeRange,i):e;case"CHANGE_TIMEZONE":return sn(e,t.oldDateEnv,i.dateEnv);case"MUTATE_EVENTS":return un(e,t.instanceId,t.mutation,t.fromApi,i);case"REMOVE_EVENT_INSTANCES":return cn(e,t.instances);case"REMOVE_EVENT_DEF":return yt(e,function(e){return e.defId!==t.defId});case"REMOVE_EVENT_SOURCE":return ln(e,t.sourceId);case"REMOVE_ALL_EVENT_SOURCES":return yt(e,function(e){return!e.sourceId});case"REMOVE_ALL_EVENTS":return vt();case"RESET_EVENTS":return{defs:e.defs,instances:e.instances};default:return e}}function on(e,t,n,r,i,o){if(t&&n===t.latestFetchId){var a=ut(pt(i,t,o),t.sourceId,o);return r&&(a=ct(a,r,o)),gt(ln(e,t.sourceId),a)}return e}function an(e,t,n,r){return n&&(t=ct(t,n,r)),gt(e,t)}function sn(e,t,n){var r=e.defs,i=ot(e.instances,function(e){var i=r[e.defId];return i.allDay||i.recurringDef?e:ki({},e,{range:{start:n.createMarker(t.toDate(e.range.start,e.forcedStartTzo)),end:n.createMarker(t.toDate(e.range.end,e.forcedEndTzo))},forcedStartTzo:n.canComputeOffset?null:e.forcedStartTzo,forcedEndTzo:n.canComputeOffset?null:e.forcedEndTzo})});return{defs:r,instances:i}}function un(e,t,n,r,i){var o=dt(e,t);return o=$t(o,r?{"":{startEditable:!0,durationEditable:!0,constraints:[],overlap:null,allows:[],backgroundColor:"",borderColor:"",textColor:"",classNames:[]}}:i.eventUiBases,n,i),gt(e,o)}function ln(e,t){return yt(e,function(e){return e.sourceId!==t})}function cn(e,t){return{defs:e.defs,instances:it(e.instances,function(e){return!t[e.instanceId]})}}function dn(e,t){return pn({eventDrag:e},t)}function fn(e,t){return pn({dateSelection:e},t)}function pn(e,t){var n=t.view,r=ki({businessHours:n?n.props.businessHours:vt(),dateSelection:"",eventStore:t.state.eventStore,eventUiBases:t.eventUiBases,eventSelection:"",eventDrag:null,eventResize:null},e);return(t.pluginSystem.hooks.isPropsValid||hn)(r,t)}function hn(e,t,n,r){return void 0===n&&(n={}),!(e.eventDrag&&!vn(e,t,n,r))&&!(e.dateSelection&&!gn(e,t,n,r))}function vn(e,t,n,r){var i=e.eventDrag,o=i.mutatedEvents,a=o.defs,s=o.instances,u=Kt(a,i.isEvent?e.eventUiBases:{"":t.selectionConfig});r&&(u=ot(u,r));var l=cn(e.eventStore,i.affectedEvents.instances),c=l.defs,d=l.instances,f=Kt(c,e.eventUiBases);for(var p in s){var h=s[p],v=h.range,g=u[h.defId],y=a[h.defId];if(!yn(g.constraints,v,l,e.businessHours,t))return!1;var m=t.opt("eventOverlap");"function"!=typeof m&&(m=null);for(var E in d){var S=d[E];if(Tt(v,S.range)){if(!1===f[S.defId].overlap&&i.isEvent)return!1;if(!1===g.overlap)return!1;if(m&&!m(new Bi(t,c[S.defId],S),new Bi(t,y,h)))return!1}}for(var b=0,D=g.allows;b<D.length;b++){var T=D[b],w=ki({},n,{range:h.range,allDay:y.allDay}),R=e.eventStore.defs[y.defId],I=e.eventStore.instances[p],C=void 0;if(C=R?new Bi(t,R,I):new Bi(t,y),!T(t.buildDateSpanApi(w),C))return!1}}return!0}function gn(e,t,n,r){var i=e.eventStore,o=i.defs,a=i.instances,s=e.dateSelection,u=s.range,l=t.selectionConfig;if(r&&(l=r(l)),!yn(l.constraints,u,i,e.businessHours,t))return!1;var c=t.opt("selectOverlap");"function"!=typeof c&&(c=null);for(var d in a){var f=a[d];if(Tt(u,f.range)){if(!1===l.overlap)return!1;if(c&&!c(new Bi(t,o[f.defId],f)))return!1}}for(var p=0,h=l.allows;p<h.length;p++){var v=h[p],g=ki({},n,s);if(!v(t.buildDateSpanApi(g),null))return!1}return!0}function yn(e,t,n,r,i){for(var o=0,a=e;o<a.length;o++){if(!Sn(mn(a[o],t,n,r,i),t))return!1}return!0}function mn(e,t,n,r,i){return"businessHours"===e?En(ct(r,t,i)):"string"==typeof e?En(yt(n,function(t){return t.groupId===e})):"object"==typeof e&&e?En(ct(e,t,i)):[]}function En(e){var t=e.instances,n=[];for(var r in t)n.push(t[r].range);return n}function Sn(e,t){for(var n=0,r=e;n<r.length;n++){if(wt(r[n],t))return!0}return!1}function bn(e,t){return Array.isArray(e)?ut(e,"",t,!0):"object"==typeof e&&e?ut([e],"",t,!0):null!=e?String(e):null}function Dn(e){return(e+"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/'/g,"'").replace(/"/g,""").replace(/\n/g,"<br />")}function Tn(e){var t=[];for(var n in e){var r=e[n];null!=r&&""!==r&&t.push(n+":"+r)}return t.join(";")}function wn(e){var t=[];for(var n in e){var r=e[n];null!=r&&t.push(n+'="'+Dn(r)+'"')}return t.join(" ")}function Rn(e){return Array.isArray(e)?e:"string"==typeof e?e.split(/\s+/):[]}function In(e,t,n){var r=Ge(e,Fi,{},n),i=bn(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 Cn(e,t,n,r){var i={},o={};for(var a in Fi){var s=e+Be(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 In(i,n)}function Mn(e){return e.reduce(kn,Wi)}function kn(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)}}function On(e,t,n,r){var i=zn(t,n),o={},a=tt(e,i,n.dateEnv,n.pluginSystem.hooks.recurringTypes,o);if(a){var s=_n(o,t,a.allDay,Boolean(a.duration),n);return s.recurringDef={typeId:a.typeId,typeData:a.typeData,duration:a.duration},{def:s,instance:null}}var u={},l=Hn(e,i,n,u,r);if(l){var s=_n(u,t,l.allDay,l.hasEnd,n);return{def:s,instance:Pn(s.defId,l.range,l.forcedStartTzo,l.forcedEndTzo)}}return null}function _n(e,t,n,r,i){var o={},a=Nn(e,i,o);a.defId=String(Yi++),a.sourceId=t,a.allDay=n,a.hasEnd=r;for(var s=0,u=i.pluginSystem.hooks.eventDefParsers;s<u.length;s++){var l=u[s],c={};l(a,o,c),o=c}return a.extendedProps=ki(o,a.extendedProps||{}),Object.freeze(a.ui.classNames),Object.freeze(a.extendedProps),a}function Pn(e,t,n,r){return{instanceId:String(Yi++),defId:e,range:t,forcedStartTzo:null==n?null:n,forcedEndTzo:null==r?null:r}}function Hn(e,t,n,r,i){var o,a,s=xn(e,r),u=s.allDay,l=null,c=!1,d=null;if(o=n.dateEnv.createMarkerMeta(s.start))l=o.marker;else if(!i)return null;return null!=s.end&&(a=n.dateEnv.createMarkerMeta(s.end)),null==u&&(u=null!=t?t:(!o||o.isTimeUnspecified)&&(!a||a.isTimeUnspecified)),u&&l&&(l=X(l)),a&&(d=a.marker,u&&(d=X(d)),l&&d<=l&&(d=null)),d?c=!0:i||(c=n.opt("forceEventDuration")||!1,d=n.dateEnv.add(l,u?n.defaultAllDayEventDuration:n.defaultTimedEventDuration)),{allDay:u,hasEnd:c,range:{start:l,end:d},forcedStartTzo:o?o.forcedTzo:null,forcedEndTzo:a?a.forcedTzo:null}}function xn(e,t){var n=Ge(e,ji,{},t);return n.start=null!==n.start?n.start:n.date,delete n.date,n}function Nn(e,t,n){var r={},i=Ge(e,Zi,{},r),o=In(r,t,n);return i.publicId=i.id,delete i.id,i.ui=o,i}function zn(e,t){var n=null;if(e){n=t.state.eventSources[e].allDayDefault}return null==n&&(n=t.opt("allDayDefault")),n}function Un(e,t){return ut(Ln(e),"",t)}function Ln(e){var t;return t=!0===e?[{}]:Array.isArray(e)?e.filter(function(e){return e.daysOfWeek}):"object"==typeof e&&e?[e]:[],t=t.map(function(e){return ki({},qi,e)})}function An(e,t,n){function r(){if(a){for(var e=0,n=s;e<n.length;e++){n[e].unrender()}t&&t.apply(o,a),a=null}}function i(){a&&Mt(a,arguments)||(r(),o=this,a=arguments,e.apply(this,arguments))}void 0===n&&(n=[]);var o,a,s=[];i.dependents=s,i.unrender=r;for(var u=0,l=n;u<l.length;u++){l[u].dependents.push(i)}return i}function Vn(e,t,n){return void 0===n&&(n=1),e===t||(Array.isArray(e)&&Array.isArray(t)?Bn(e,t,n):!("object"!=typeof e||!e||"object"!=typeof t||!t)&&Fn(e,t,n))}function Bn(e,t,n){if(void 0===n&&(n=1),e===t)return!0;if(n>0){if(e.length!==t.length)return!1;for(var r=0;r<e.length;r++)if(!Vn(e[r],t[r],n-1))return!1;return!0}return!1}function Fn(e,t,n){if(void 0===n&&(n=1),e===t)return!0;if(n>0){for(var r in e)if(!(r in t))return!1;for(var r in t){if(!(r in e))return!1;if(!Vn(e[r],t[r],n-1))return!1}return!0}return!1}function Wn(e,t,n){void 0===n&&(n=1);var r={};for(var i in t)i in e&&Vn(e[i],t[i],n-1)||(r[i]=t[i]);return r}function Zn(e,t){for(var n in e)if(!(n in t))return!0;return!1}function jn(e,t,n){var r=[];e&&r.push(e),t&&r.push(t);var i={"":Mn(r)};return n&&ki(i,n),i}function Yn(e,t,n,r){var i,o,a,s,u=e.dateEnv;return t instanceof Date?i=t:(i=t.date,o=t.type,a=t.forceOff),s={date:u.formatIso(i,{omitTime:!0}),type:o||"day"},"string"==typeof n&&(r=n,n=null),n=n?" "+wn(n):"",r=r||"",!a&&e.opt("navLinks")?"<a"+n+' data-goto="'+Dn(JSON.stringify(s))+'">'+r+"</a>":"<span"+n+">"+r+"</span>"}function qn(e){return e.opt("allDayHtml")||Dn(e.opt("allDayText"))}
+function Gn(e,t,n,r){var i,o,a=n.calendar,s=n.view,u=n.theme,l=n.dateEnv,c=[];return Rt(t.activeRange,e)?(c.push("fc-"+Ri[e.getUTCDay()]),s.opt("monthMode")&&l.getMonth(e)!==l.getMonth(t.currentRange.start)&&c.push("fc-other-month"),i=X(a.getNow()),o=A(i,1),e<i?c.push("fc-past"):e>=o?c.push("fc-future"):(c.push("fc-today"),!0!==r&&c.push(u.getClass("today")))):c.push("fc-disabled-day"),c}function Xn(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)}function Jn(e,t,n){(e[t]||(e[t]=[])).push(n)}function Kn(e,t,n){n?e[t]&&(e[t]=e[t].filter(function(e){return e!==n})):delete e[t]}function Qn(e,t,n){var r={},i=!1;for(var o in t)o in e&&(e[o]===t[o]||n[o]&&n[o](e[o],t[o]))?r[o]=e[o]:(r[o]=t[o],i=!0);for(var o in e)if(!(o in t)){i=!0;break}return{anyChanges:i,comboProps:r}}function $n(e){return{id:String(so++),deps:e.deps||[],reducers:e.reducers||[],eventDefParsers:e.eventDefParsers||[],eventDragMutationMassagers:e.eventDragMutationMassagers||[],eventDefMutationAppliers:e.eventDefMutationAppliers||[],dateSelectionTransformers:e.dateSelectionTransformers||[],datePointTransforms:e.datePointTransforms||[],dateSpanTransforms:e.dateSpanTransforms||[],views:e.views||{},viewPropsTransformers:e.viewPropsTransformers||[],isPropsValid:e.isPropsValid||null,externalDefTransforms:e.externalDefTransforms||[],eventResizeJoinTransforms:e.eventResizeJoinTransforms||[],viewContainerModifiers:e.viewContainerModifiers||[],eventDropTransformers:e.eventDropTransformers||[],componentInteractions:e.componentInteractions||[],calendarInteractions:e.calendarInteractions||[],themeClasses:e.themeClasses||{},eventSourceDefs:e.eventSourceDefs||[],cmdFormatter:e.cmdFormatter,recurringTypes:e.recurringTypes||[],namedTimeZonedImpl:e.namedTimeZonedImpl,defaultView:e.defaultView||"",elementDraggingImpl:e.elementDraggingImpl,optionChangeHandlers:e.optionChangeHandlers||{}}}function er(e,t){return{reducers:e.reducers.concat(t.reducers),eventDefParsers:e.eventDefParsers.concat(t.eventDefParsers),eventDragMutationMassagers:e.eventDragMutationMassagers.concat(t.eventDragMutationMassagers),eventDefMutationAppliers:e.eventDefMutationAppliers.concat(t.eventDefMutationAppliers),dateSelectionTransformers:e.dateSelectionTransformers.concat(t.dateSelectionTransformers),datePointTransforms:e.datePointTransforms.concat(t.datePointTransforms),dateSpanTransforms:e.dateSpanTransforms.concat(t.dateSpanTransforms),views:ki({},e.views,t.views),viewPropsTransformers:e.viewPropsTransformers.concat(t.viewPropsTransformers),isPropsValid:t.isPropsValid||e.isPropsValid,externalDefTransforms:e.externalDefTransforms.concat(t.externalDefTransforms),eventResizeJoinTransforms:e.eventResizeJoinTransforms.concat(t.eventResizeJoinTransforms),viewContainerModifiers:e.viewContainerModifiers.concat(t.viewContainerModifiers),eventDropTransformers:e.eventDropTransformers.concat(t.eventDropTransformers),calendarInteractions:e.calendarInteractions.concat(t.calendarInteractions),componentInteractions:e.componentInteractions.concat(t.componentInteractions),themeClasses:ki({},e.themeClasses,t.themeClasses),eventSourceDefs:e.eventSourceDefs.concat(t.eventSourceDefs),cmdFormatter:t.cmdFormatter||e.cmdFormatter,recurringTypes:e.recurringTypes.concat(t.recurringTypes),namedTimeZonedImpl:t.namedTimeZonedImpl||e.namedTimeZonedImpl,defaultView:e.defaultView||t.defaultView,elementDraggingImpl:e.elementDraggingImpl||t.elementDraggingImpl,optionChangeHandlers:ki({},e.optionChangeHandlers,t.optionChangeHandlers)}}function tr(e,t,n,r,i){e=e.toUpperCase();var o=null;"GET"===e?t=nr(t,n):o=rr(n);var a=new XMLHttpRequest;a.open(e,t,!0),"GET"!==e&&a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.onload=function(){if(a.status>=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 nr(e,t){return e+(-1===e.indexOf("?")?"?":"&")+rr(t)}function rr(e){var t=[];for(var n in e)t.push(encodeURIComponent(n)+"="+encodeURIComponent(e[n]));return t.join("&")}function ir(e,t,n){var r,i,o,a,s=n.dateEnv,u={};return r=e.startParam,null==r&&(r=n.opt("startParam")),i=e.endParam,null==i&&(i=n.opt("endParam")),o=e.timeZoneParam,null==o&&(o=n.opt("timeZoneParam")),a="function"==typeof e.extraParams?e.extraParams():e.extraParams||{},ki(u,a),u[r]=s.formatIso(t.start),u[i]=s.formatIso(t.end),"local"!==s.timeZone&&(u[o]=s.timeZone),u}function or(e,t,n,r){for(var i=e?at(e):null,o=X(n.start),a=n.end,s=[];o<a;){var u=void 0;i&&!i[o.getUTCDay()]||(u=t?r.add(o,t):o,s.push(u)),o=A(o,1)}return s}function ar(e,t){for(var n=st(t.state.eventSources),r=[],i=0,o=e;i<o.length;i++){for(var a=o[i],s=!1,u=0;u<n.length;u++)if(Vn(n[u]._raw,a,2)){n.splice(u,1),s=!0;break}s||r.push(a)}for(var l=0,c=n;l<c.length;l++){var d=c[l];t.dispatch({type:"REMOVE_EVENT_SOURCE",sourceId:d.sourceId})}for(var f=0,p=r;f<p.length;f++){var h=p[f];t.addEventSource(h)}}function sr(e,t){t.addPluginInputs(e)}function ur(e){return rt(e,Do)}function lr(e){for(var t=[],n=0,r=e;n<r.length;n++){var i=r[n];if("string"==typeof i){var o="FullCalendar"+Be(i);window[o]?t.push(window[o].default):console.warn("Plugin file not loaded for "+i)}else t.push(i)}return To.concat(t)}function cr(e){for(var t=e.length>0?e[0].code:"en",n=window.FullCalendarLocalesAll||[],r=window.FullCalendarLocales||{},i=n.concat(st(r),e),o={en:wo},a=0,s=i;a<s.length;a++){var u=s[a];o[u.code]=u}return{map:o,defaultCode:t}}function dr(e,t){return"object"!=typeof e||Array.isArray(e)?fr(e,t):hr(e.code,[e.code],e)}function fr(e,t){var n=[].concat(e||[]);return hr(e,n,pr(n,t)||wo)}function pr(e,t){for(var n=0;n<e.length;n++)for(var r=e[n].toLocaleLowerCase().split("-"),i=r.length;i>0;i--){var o=r.slice(0,i).join("-");if(t[o])return t[o]}return null}function hr(e,t,n){var r=rt([wo,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}}function vr(e){return new Io[e]}function gr(e){var t=Mo.exec(e);if(t){var n=new Date(Date.UTC(Number(t[1]),t[3]?Number(t[3])-1:0,Number(t[5]||1),Number(t[7]||0),Number(t[8]||0),Number(t[10]||0),t[12]?1e3*Number("0."+t[12]):0));if(ae(n)){var r=null;return t[13]&&(r=("-"===t[15]?-1:1)*(60*Number(t[16]||0)+Number(t[18]||0))),{marker:n,isTimeUnspecified:!t[6],timeZoneOffset:r}}}return null}function yr(e,t){return!t.pluginSystem.hooks.eventSourceDefs[e.sourceDefId].ignoreRange}function mr(e,t){for(var n=t.pluginSystem.hooks.eventSourceDefs,r=n.length-1;r>=0;r--){var i=n[r],o=i.parseMeta(e);if(o){var a=Er("object"==typeof e?e:{},o,r,t);return a._raw=Xe(e),a}}return null}function Er(e,t,n,r){var i={},o=Ge(e,Oo,{},i),a={},s=In(i,r,a);return o.isFetching=!1,o.latestFetchId="",o.fetchRange=null,o.publicId=String(e.id||""),o.sourceId=String(_o++),o.sourceDefId=n,o.meta=t,o.ui=s,o.extendedProps=a,o}function Sr(e,t,n,r){switch(t.type){case"ADD_EVENT_SOURCES":return br(e,t.sources,n?n.activeRange:null,r);case"REMOVE_EVENT_SOURCE":return Dr(e,t.sourceId);case"PREV":case"NEXT":case"SET_DATE":case"SET_VIEW_TYPE":return n?Tr(e,n.activeRange,r):e;case"FETCH_EVENT_SOURCES":case"CHANGE_TIMEZONE":return Rr(e,t.sourceIds?at(t.sourceIds):Mr(e,r),n?n.activeRange:null,r);case"RECEIVE_EVENTS":case"RECEIVE_EVENT_ERROR":return Cr(e,t.sourceId,t.fetchId,t.fetchRange);case"REMOVE_ALL_EVENT_SOURCES":return{};default:return e}}function br(e,t,n,r){for(var i={},o=0,a=t;o<a.length;o++){var s=a[o];i[s.sourceId]=s}return n&&(i=Tr(i,n,r)),ki({},e,i)}function Dr(e,t){return it(e,function(e){return e.sourceId!==t})}function Tr(e,t,n){return Rr(e,it(e,function(e){return wr(e,t,n)}),t,n)}function wr(e,t,n){return yr(e,n)?!n.opt("lazyFetching")||!e.fetchRange||t.start<e.fetchRange.start||t.end>e.fetchRange.end:!e.latestFetchId}function Rr(e,t,n,r){var i={};for(var o in e){var a=e[o];t[o]?i[o]=Ir(a,n,r):i[o]=a}return i}function Ir(e,t,n){var r=n.pluginSystem.hooks.eventSourceDefs[e.sourceDefId],i=String(Po++);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})}),ki({},e,{isFetching:!0,latestFetchId:i})}function Cr(e,t,n,r){var i,o=e[t];return o&&n===o.latestFetchId?ki({},e,(i={},i[t]=ki({},o,{isFetching:!1,fetchRange:r}),i)):e}function Mr(e,t){return it(e,function(e){return yr(e,t)})}function kr(e,t){return Dt(e.activeRange,t.activeRange)&&Dt(e.validRange,t.validRange)&&fe(e.minTime,t.minTime)&&fe(e.maxTime,t.maxTime)}function Or(e,t,n){for(var r=_r(e.viewType,t),i=Pr(e.dateProfile,t,e.currentDate,r,n),o=Sr(e.eventSources,t,i,n),a=ki({},e,{viewType:r,dateProfile:i,currentDate:Hr(e.currentDate,t,i),eventSources:o,eventStore:rn(e.eventStore,t,o,i,n),dateSelection:xr(e.dateSelection,t,n),eventSelection:Nr(e.eventSelection,t),eventDrag:zr(e.eventDrag,t,o,n),eventResize:Ur(e.eventResize,t,o,n),eventSourceLoadingLevel:Lr(o),loadingLevel:Lr(o)}),s=0,u=n.pluginSystem.hooks.reducers;s<u.length;s++){a=(0,u[s])(a,t,n)}return a}function _r(e,t){switch(t.type){case"SET_VIEW_TYPE":return t.viewType;default:return e}}function Pr(e,t,n,r,i){var o;switch(t.type){case"PREV":o=i.dateProfileGenerators[r].buildPrev(e,n);break;case"NEXT":o=i.dateProfileGenerators[r].buildNext(e,n);break;case"SET_DATE":e.activeRange&&Rt(e.currentRange,t.dateMarker)||(o=i.dateProfileGenerators[r].build(t.dateMarker,void 0,!0));break;case"SET_VIEW_TYPE":var a=i.dateProfileGenerators[r];if(!a)throw new Error(r?'The FullCalendar view "'+r+'" does not exist. Make sure your plugins are loaded correctly.':"No available FullCalendar view plugins.");o=a.build(t.dateMarker||n,void 0,!0)}return!o||!o.isValid||e&&kr(e,o)?e:o}function Hr(e,t,n){switch(t.type){case"PREV":case"NEXT":return Rt(n.currentRange,e)?e:n.currentRange.start;case"SET_DATE":case"SET_VIEW_TYPE":var r=t.dateMarker||e;return n.activeRange&&!Rt(n.activeRange,r)?n.currentRange.start:r;default:return e}}function xr(e,t,n){switch(t.type){case"SELECT_DATES":return t.selection;case"UNSELECT_DATES":return null;default:return e}}function Nr(e,t){switch(t.type){case"SELECT_EVENT":return t.eventInstanceId;case"UNSELECT_EVENT":return"";default:return e}}function zr(e,t,n,r){switch(t.type){case"SET_EVENT_DRAG":var i=t.state;return{affectedEvents:i.affectedEvents,mutatedEvents:i.mutatedEvents,isEvent:i.isEvent,origSeg:i.origSeg};case"UNSET_EVENT_DRAG":return null;default:return e}}function Ur(e,t,n,r){switch(t.type){case"SET_EVENT_RESIZE":var i=t.state;return{affectedEvents:i.affectedEvents,mutatedEvents:i.mutatedEvents,isEvent:i.isEvent,origSeg:i.origSeg};case"UNSET_EVENT_RESIZE":return null;default:return e}}function Lr(e){var t=0;for(var n in e)e[n].isFetching&&t++;return t}function Ar(e,t,n){var r=Vr(e,t),i=r.range;if(!i.start)return null;if(!i.end){if(null==n)return null;i.end=t.add(i.start,n)}return r}function Vr(e,t){var n={},r=Ge(e,xo,{},n),i=r.start?t.createMarkerMeta(r.start):null,o=r.end?t.createMarkerMeta(r.end):null,a=r.allDay;return null==a&&(a=i&&i.isTimeUnspecified&&(!o||o.isTimeUnspecified)),n.range={start:i?i.marker:null,end:o?o.marker:null},n.allDay=a,n}function Br(e,t){return Dt(e.range,t.range)&&e.allDay===t.allDay&&Fr(e,t)}function Fr(e,t){for(var n in t)if("range"!==n&&"allDay"!==n&&e[n]!==t[n])return!1;for(var n in e)if(!(n in t))return!1;return!0}function Wr(e,t){return{start:t.toDate(e.range.start),end:t.toDate(e.range.end),startStr:t.formatIso(e.range.start,{omitTime:e.allDay}),endStr:t.formatIso(e.range.end,{omitTime:e.allDay}),allDay:e.allDay}}function Zr(e,t){return{date:t.toDate(e.range.start),dateStr:t.formatIso(e.range.start,{omitTime:e.allDay}),allDay:e.allDay}}function jr(e,t,n){var r=_n({editable:!1},"",e.allDay,!0,n);return{def:r,ui:Qt(r,t),instance:Pn(r.defId,e.range),range:e.range,isStart:!0,isEnd:!0}}function Yr(e,t){var n,r={};for(n in e)qr(n,r,e,t);for(n in t)qr(n,r,e,t);return r}function qr(e,t,n,r){if(t[e])return t[e];var i=Gr(e,t,n,r);return i&&(t[e]=i),i}function Gr(e,t,n,r){var i=n[e],o=r[e],a=function(e){return i&&null!==i[e]?i[e]:o&&null!==o[e]?o[e]:null},s=a("class"),u=a("superType");!u&&s&&(u=Xr(s,r)||Xr(s,n));var l=u?qr(u,t,n,r):null;return!s&&l&&(s=l.class),s?{type:e,class:s,defaults:ki({},l?l.defaults:{},i?i.options:{}),overrides:ki({},l?l.overrides:{},o?o.options:{})}:null}function Xr(e,t){var n=Object.getPrototypeOf(e.prototype);for(var r in t){var i=t[r];if(i.class&&i.class.prototype===n)return r}return""}function Jr(e){return ot(e,Kr)}function Kr(e){"function"==typeof e&&(e={class:e});var t={},n=Ge(e,No,{},t);return{superType:n.type,class:n.class,options:t}}function Qr(e,t){var n=Jr(e),r=Jr(t.overrides.views);return ot(Yr(n,r),function(e){return $r(e,r,t)})}function $r(e,t,n){var r=e.overrides.duration||e.defaults.duration||n.dynamicOverrides.duration||n.overrides.duration,i=null,o="",a="",s={};if(r&&(i=ue(r))){var u=we(i,!de(r));o=u.unit,1===u.value&&(a=o,s=t[o]?t[o].options:{})}var l=function(t){var n=t.buttonText||{},r=e.defaults.buttonTextKey;return null!=r&&null!=n[r]?n[r]:null!=n[e.type]?n[e.type]:null!=n[a]?n[a]:void 0};return{type:e.type,class:e.class,duration:i,durationUnit:o,singleUnit:a,options:ki({},So,e.defaults,n.dirDefaults,n.localeDefaults,n.overrides,s,e.overrides,n.dynamicOverrides),buttonTextOverride:l(n.dynamicOverrides)||l(n.overrides)||e.overrides.buttonText,buttonTextDefault:l(n.localeDefaults)||l(n.dirDefaults)||e.defaults.buttonText||l(So)||e.type}}function ei(e,t){var n;return n=/^(year|month)$/.test(e.currentRangeUnit)?e.currentRange:e.activeRange,this.dateEnv.formatRange(n.start,n.end,Vt(t.titleFormat||ti(e),t.titleRangeSeparator),{isEndExclusive:e.isRangeAllDay})}function ti(e){var t=e.currentRangeUnit;if("year"===t)return{year:"numeric"};if("month"===t)return{year:"numeric",month:"long"};var n=G(e.currentRange.start,e.currentRange.end);return null!==n&&n>1?{year:"numeric",month:"short",day:"numeric"}:{year:"numeric",month:"long",day:"numeric"}}function ni(e){return e.map(function(e){return new e})}function ri(e,t){return{component:e,el:t.el,useEventCenter:null==t.useEventCenter||t.useEventCenter}}function ii(e){var t;return t={},t[e.component.uid]=e,t}function oi(e,t,n,r,i,o,a){return new ko({calendarSystem:"gregory",timeZone:t,namedTimeZoneImpl:n,locale:e,weekNumberCalculation:i,firstDay:r,weekLabel:o,cmdFormatter:a})}function ai(e){return new(this.pluginSystem.hooks.themeClasses[e.themeSystem]||Fo)(e)}function si(e){var t=this.tryRerender.bind(this);return null!=e&&(t=qe(t,e)),t}function ui(e){return ot(e,function(e){return e.ui})}function li(e,t,n){var r={"":t};for(var i in e){var o=e[i];o.sourceId&&n[o.sourceId]&&(r[i]=n[o.sourceId])}return r}function ci(e){var t=e.eventRange.def,n=e.eventRange.instance.range,r=n.start?n.start.valueOf():0,i=n.end?n.end.valueOf():0;return ki({},t.extendedProps,t,{id:t.publicId,start:r,end:i,duration:i-r,allDay:Number(t.allDay),_seg:e})}function di(e,t){void 0===t&&(t={});var n=pi(t),r=Vt(t),i=n.createMarkerMeta(e);return i?n.format(i.marker,r,{forcedTzo:i.forcedTzo}):""}function fi(e,t,n){var r=pi("object"==typeof n&&n?n:{}),i=Vt(n,So.defaultRangeSeparator),o=r.createMarkerMeta(e),a=r.createMarkerMeta(t);return o&&a?r.formatRange(o.marker,a.marker,i,{forcedStartTzo:o.forcedTzo,forcedEndTzo:a.forcedTzo,isEndExclusive:n.isEndExclusive}):""}function pi(e){var t=dr(e.locale||"en",cr([]).map);return e=ki({timeZone:So.timeZone,calendarSystem:"gregory"},e,{locale:t}),new ko(e)}function hi(e){var t={},n=Ge(e,Xo,Jo,t);return n.leftoverProps=t,n}function vi(e,t){return!e||t>10?{weekday:"short"}:t>1?{weekday:"short",month:"numeric",day:"numeric",omitCommas:!0}:{weekday:"long"}}function gi(e,t,n,r,i,o,a,s){var u,l=o.view,c=o.dateEnv,d=o.theme,f=o.options,p=Rt(t.activeRange,e),h=["fc-day-header",d.getClass("widgetHeader")];return u="function"==typeof f.columnHeaderHtml?f.columnHeaderHtml(c.toDate(e)):Dn("function"==typeof f.columnHeaderText?f.columnHeaderText(c.toDate(e)):c.format(e,i)),n?h=h.concat(Gn(e,t,o,!0)):h.push("fc-"+Ri[e.getUTCDay()]),'<th class="'+h.join(" ")+'"'+(p&&n?' data-date="'+c.formatIso(e,{omitTime:!0})+'"':"")+(a>1?' colspan="'+a+'"':"")+(s?" "+s:"")+">"+(p?Yn(l,{date:e,forceOff:!n||1===r},u):u)+"</th>"}function yi(e,t){var n=e.activeRange;return t?n:{start:V(n.start,e.minTime.milliseconds),end:V(n.end,e.maxTime.milliseconds-864e5)}}var mi={className:!0,colSpan:!0,rowSpan:!0},Ei={"<tr":"tbody","<td":"tr"},Si=Element.prototype.matches||Element.prototype.matchesSelector||Element.prototype.msMatchesSelector,bi=Element.prototype.closest||function(e){var t=this;if(!document.documentElement.contains(t))return null;do{if(f(t,e))return t;t=t.parentElement||t.parentNode}while(null!==t&&1===t.nodeType);return null},Di=/(top|left|right|bottom|width|height)$/i,Ti=null,wi=["webkitTransitionEnd","otransitionend","oTransitionEnd","msTransitionEnd","transitionend"],Ri=["sun","mon","tue","wed","thu","fri","sat"],Ii=["years","months","days","milliseconds"],Ci=/^(-?)(?:(\d+)\.)?(\d+):(\d\d)(?::(\d\d)(?:\.(\d\d\d))?)?/,Mi=function(e,t){return(Mi=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)},ki=function(){return ki=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++){t=arguments[n];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])}return e},ki.apply(this,arguments)},Oi={week:3,separator:0,omitZeroMinute:0,meridiem:0,omitCommas:0},_i={timeZoneName:7,era:6,year:5,month:4,day:2,weekday:2,hour:1,minute:1,second:1},Pi=/\s*([ap])\.?m\.?/i,Hi=/,/g,xi=/\s+/g,Ni=/\u200e/g,zi=/UTC|GMT/,Ui=function(){function e(e){var t={},n={},r=0;for(var i in e)i in Oi?(n[i]=e[i],r=Math.max(Oi[i],r)):(t[i]=e[i],i in _i&&(r=Math.max(_i[i],r)));this.standardDateProps=t,this.extendedSettings=n,this.severity=r,this.buildFormattingFunc=kt(_t)}return e.prototype.format=function(e,t){return this.buildFormattingFunc(this.standardDateProps,this.extendedSettings,t)(e)},e.prototype.formatRange=function(e,t,n){var r=this,i=r.standardDateProps,o=r.extendedSettings,a=Ut(e.marker,t.marker,n.calendarSystem);if(!a)return this.format(e,n);var s=a;!(s>1)||"numeric"!==i.year&&"2-digit"!==i.year||"numeric"!==i.month&&"2-digit"!==i.month||"numeric"!==i.day&&"2-digit"!==i.day||(s=1);var u=this.format(e,n),l=this.format(t,n);if(u===l)return u;var c=Lt(i,s),d=_t(c,o,n),f=d(e),p=d(t),h=At(u,f,l,p),v=o.separator||"";return h?h.before+f+v+p+h.after:u+v+l},e.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"}},e}(),Li=function(){function e(e,t){this.cmdStr=e,this.separator=t}return e.prototype.format=function(e,t){return t.cmdFormatter(this.cmdStr,Zt(e,null,t,this.separator))},e.prototype.formatRange=function(e,t,n){return n.cmdFormatter(this.cmdStr,Zt(e,t,n,this.separator))},e}(),Ai=function(){function e(e){this.func=e}return e.prototype.format=function(e,t){return this.func(Zt(e,null,t))},e.prototype.formatRange=function(e,t,n){return this.func(Zt(e,t,n))},e}(),Vi=function(){function e(e,t){this.calendar=e,this.internalEventSource=t}return e.prototype.remove=function(){this.calendar.dispatch({type:"REMOVE_EVENT_SOURCE",sourceId:this.internalEventSource.sourceId})},e.prototype.refetch=function(){this.calendar.dispatch({type:"FETCH_EVENT_SOURCES",sourceIds:[this.internalEventSource.sourceId]})},Object.defineProperty(e.prototype,"id",{get:function(){return this.internalEventSource.publicId},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"url",{get:function(){return this.internalEventSource.meta.url},enumerable:!0,configurable:!0}),e}(),Bi=function(){function e(e,t,n){this._calendar=e,this._def=t,this._instance=n||null}return e.prototype.setProp=function(e,t){var n,r;if(e in ji);else if(e in Zi)"function"==typeof Zi[e]&&(t=Zi[e](t)),this.mutate({standardProps:(n={},n[e]=t,n)});else if(e in Fi){var i=void 0;"function"==typeof Fi[e]&&(t=Fi[e](t)),"color"===e?i={backgroundColor:t,borderColor:t}:"editable"===e?i={startEditable:t,durationEditable:t}:(r={},r[e]=t,i=r),this.mutate({standardProps:{ui:i}})}},e.prototype.setExtendedProp=function(e,t){var n;this.mutate({extendedProps:(n={},n[e]=t,n)})},e.prototype.setStart=function(e,t){void 0===t&&(t={});var n=this._calendar.dateEnv,r=n.createMarker(e);if(r&&this._instance){var i=this._instance.range,o=$e(i.start,r,n,t.granularity),a=null;if(t.maintainDuration){a=ve($e(i.start,i.end,n,t.granularity),$e(r,i.end,n,t.granularity))}this.mutate({startDelta:o,endDelta:a})}},e.prototype.setEnd=function(e,t){void 0===t&&(t={});var n,r=this._calendar.dateEnv;if((null==e||(n=r.createMarker(e)))&&this._instance)if(n){var i=$e(this._instance.range.end,n,r,t.granularity);this.mutate({endDelta:i})}else this.mutate({standardProps:{hasEnd:!1}})},e.prototype.setDates=function(e,t,n){void 0===n&&(n={});var r,i=this._calendar.dateEnv,o={allDay:n.allDay},a=i.createMarker(e);if(a&&(null==t||(r=i.createMarker(t)))&&this._instance){var s=this._instance.range;!0===n.allDay&&(s=Je(s));var u=$e(s.start,a,i,n.granularity);if(r){var l=$e(s.end,r,i,n.granularity);this.mutate({startDelta:u,endDelta:l,standardProps:o})}else o.hasEnd=!1,this.mutate({startDelta:u,standardProps:o})}},e.prototype.moveStart=function(e){var t=ue(e);t&&this.mutate({startDelta:t})},e.prototype.moveEnd=function(e){var t=ue(e);t&&this.mutate({endDelta:t})},e.prototype.moveDates=function(e){var t=ue(e);t&&this.mutate({startDelta:t,endDelta:t})},e.prototype.setAllDay=function(e,t){void 0===t&&(t={});var n={allDay:e},r=t.maintainDuration;null==r&&(r=this._calendar.opt("allDayMaintainDuration")),this._def.allDay!==e&&(n.hasEnd=r),this.mutate({standardProps:n})},e.prototype.formatRange=function(e){var t=this._calendar.dateEnv,n=this._instance,r=Vt(e,this._calendar.opt("defaultRangeSeparator"));return this._def.hasEnd?t.formatRange(n.range.start,n.range.end,r,{forcedStartTzo:n.forcedStartTzo,forcedEndTzo:n.forcedEndTzo}):t.format(n.range.start,r,{forcedTzo:n.forcedStartTzo})},e.prototype.mutate=function(e){var t=this._def,n=this._instance;if(n){this._calendar.dispatch({type:"MUTATE_EVENTS",instanceId:n.instanceId,mutation:e,fromApi:!0});var r=this._calendar.state.eventStore;this._def=r.defs[t.defId],this._instance=r.instances[n.instanceId]}},e.prototype.remove=function(){this._calendar.dispatch({type:"REMOVE_EVENT_DEF",defId:this._def.defId})},Object.defineProperty(e.prototype,"source",{get:function(){var e=this._def.sourceId;return e?new Vi(this._calendar,this._calendar.state.eventSources[e]):null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"start",{get:function(){return this._instance?this._calendar.dateEnv.toDate(this._instance.range.start):null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"end",{get:function(){return this._instance&&this._def.hasEnd?this._calendar.dateEnv.toDate(this._instance.range.end):null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"id",{get:function(){return this._def.publicId},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"groupId",{get:function(){return this._def.groupId},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"allDay",{get:function(){return this._def.allDay},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"title",{get:function(){return this._def.title},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"url",{get:function(){return this._def.url},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"rendering",{get:function(){return this._def.rendering},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"startEditable",{get:function(){return this._def.ui.startEditable},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"durationEditable",{get:function(){return this._def.ui.durationEditable},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"constraint",{get:function(){return this._def.ui.constraints[0]||null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"overlap",{get:function(){return this._def.ui.overlap},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"allow",{get:function(){return this._def.ui.allows[0]||null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"backgroundColor",{get:function(){return this._def.ui.backgroundColor},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"borderColor",{get:function(){return this._def.ui.borderColor},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"textColor",{get:function(){return this._def.ui.textColor},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"classNames",{get:function(){return this._def.ui.classNames},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"extendedProps",{get:function(){return this._def.extendedProps},enumerable:!0,configurable:!0}),e}(),Fi={editable:Boolean,startEditable:Boolean,durationEditable:Boolean,constraint:null,overlap:null,allow:null,className:Rn,classNames:Rn,color:String,backgroundColor:String,borderColor:String,textColor:String},Wi={startEditable:null,durationEditable:null,constraints:[],overlap:null,allows:[],backgroundColor:"",borderColor:"",textColor:"",classNames:[]},Zi={id:String,groupId:String,title:String,url:String,rendering:String,extendedProps:null},ji={start:null,date:null,end:null,allDay:null},Yi=0,qi={startTime:"09:00",endTime:"17:00",daysOfWeek:[1,2,3,4,5],rendering:"inverse-background",classNames:"fc-nonbusiness",groupId:"_businessHours"},Gi=vt(),Xi=function(){function e(){this.getKeysForEventDefs=kt(this._getKeysForEventDefs),this.splitDateSelection=kt(this._splitDateSpan),this.splitEventStore=kt(this._splitEventStore),this.splitIndividualUi=kt(this._splitIndividualUi),this.splitEventDrag=kt(this._splitInteraction),this.splitEventResize=kt(this._splitInteraction),this.eventUiBuilders={}}return e.prototype.splitProps=function(e){var t=this,n=this.getKeyInfo(e),r=this.getKeysForEventDefs(e.eventStore),i=this.splitDateSelection(e.dateSelection),o=this.splitIndividualUi(e.eventUiBases,r),a=this.splitEventStore(e.eventStore,r),s=this.splitEventDrag(e.eventDrag),u=this.splitEventResize(e.eventResize),l={};this.eventUiBuilders=ot(n,function(e,n){return t.eventUiBuilders[n]||kt(jn)});for(var c in n){var d=n[c],f=a[c]||Gi,p=this.eventUiBuilders[c];l[c]={businessHours:d.businessHours||e.businessHours,dateSelection:i[c]||null,eventStore:f,eventUiBases:p(e.eventUiBases[""],d.ui,o[c]),eventSelection:f.instances[e.eventSelection]?e.eventSelection:"",eventDrag:s[c]||null,eventResize:u[c]||null}}return l},e.prototype._splitDateSpan=function(e){var t={};if(e)for(var n=this.getKeysForDateSpan(e),r=0,i=n;r<i.length;r++){var o=i[r];t[o]=e}return t},e.prototype._getKeysForEventDefs=function(e){var t=this;return ot(e.defs,function(e){return t.getKeysForEventDef(e)})},e.prototype._splitEventStore=function(e,t){var n=e.defs,r=e.instances,i={};for(var o in n)for(var a=0,s=t[o];a<s.length;a++){var u=s[a];i[u]||(i[u]=vt()),i[u].defs[o]=n[o]}for(var l in r)for(var c=r[l],d=0,f=t[c.defId];d<f.length;d++){var u=f[d];i[u]&&(i[u].instances[l]=c)}return i},e.prototype._splitIndividualUi=function(e,t){var n={};for(var r in e)if(r)for(var i=0,o=t[r];i<o.length;i++){var a=o[i];n[a]||(n[a]={}),n[a][r]=e[r]}return n},e.prototype._splitInteraction=function(e){var t={};if(e){var n=this._splitEventStore(e.affectedEvents,this._getKeysForEventDefs(e.affectedEvents)),r=this._getKeysForEventDefs(e.mutatedEvents),i=this._splitEventStore(e.mutatedEvents,r),o=function(r){t[r]||(t[r]={affectedEvents:n[r]||Gi,mutatedEvents:i[r]||Gi,isEvent:e.isEvent,origSeg:e.origSeg})};for(var a in n)o(a);for(var a in i)o(a)}return t},e}(),Ji=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}(),Ki=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return et(t,e),t.prototype.on=function(e,t){return Jn(this._handlers||(this._handlers={}),e,t),this},t.prototype.one=function(e,t){return Jn(this._oneHandlers||(this._oneHandlers={}),e,t),this},t.prototype.off=function(e,t){return this._handlers&&Kn(this._handlers,e,t),this._oneHandlers&&Kn(this._oneHandlers,e,t),this},t.prototype.trigger=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];return this.triggerWith(e,this,t),this},t.prototype.triggerWith=function(e,t,n){return this._handlers&&je(this._handlers[e],t,n),this._oneHandlers&&(je(this._oneHandlers[e],t,n),delete this._oneHandlers[e]),this},t.prototype.hasHandlers=function(e){return this._handlers&&this._handlers[e]&&this._handlers[e].length||this._oneHandlers&&this._oneHandlers[e]&&this._oneHandlers[e].length},t}(Ji),Qi=function(){function e(e,t,n,r){this.originEl=e,this.els=t,this.isHorizontal=n,this.isVertical=r}return e.prototype.build=function(){var e=this.originEl,t=this.originClientRect=e.getBoundingClientRect();this.isHorizontal&&this.buildElHorizontals(t.left),this.isVertical&&this.buildElVerticals(t.top)},e.prototype.buildElHorizontals=function(e){for(var t=[],n=[],r=0,i=this.els;r<i.length;r++){var o=i[r],a=o.getBoundingClientRect();t.push(a.left-e),n.push(a.right-e)}this.lefts=t,this.rights=n},e.prototype.buildElVerticals=function(e){for(var t=[],n=[],r=0,i=this.els;r<i.length;r++){var o=i[r],a=o.getBoundingClientRect();t.push(a.top-e),n.push(a.bottom-e)}this.tops=t,this.bottoms=n},e.prototype.leftToIndex=function(e){var t,n=this.lefts,r=this.rights,i=n.length;for(t=0;t<i;t++)if(e>=n[t]&&e<r[t])return t},e.prototype.topToIndex=function(e){var t,n=this.tops,r=this.bottoms,i=n.length;for(t=0;t<i;t++)if(e>=n[t]&&e<r[t])return t},e.prototype.getWidth=function(e){return this.rights[e]-this.lefts[e]},e.prototype.getHeight=function(e){return this.bottoms[e]-this.tops[e]},e}(),$i=function(){function e(){}return e.prototype.getMaxScrollTop=function(){return this.getScrollHeight()-this.getClientHeight()},e.prototype.getMaxScrollLeft=function(){return this.getScrollWidth()-this.getClientWidth()},e.prototype.canScrollVertically=function(){return this.getMaxScrollTop()>0},e.prototype.canScrollHorizontally=function(){return this.getMaxScrollLeft()>0},e.prototype.canScrollUp=function(){return this.getScrollTop()>0},e.prototype.canScrollDown=function(){return this.getScrollTop()<this.getMaxScrollTop()},e.prototype.canScrollLeft=function(){return this.getScrollLeft()>0},e.prototype.canScrollRight=function(){return this.getScrollLeft()<this.getMaxScrollLeft()},e}(),eo=function(e){function t(t){var n=e.call(this)||this;return n.el=t,n}return et(t,e),t.prototype.getScrollTop=function(){return this.el.scrollTop},t.prototype.getScrollLeft=function(){return this.el.scrollLeft},t.prototype.setScrollTop=function(e){this.el.scrollTop=e},t.prototype.setScrollLeft=function(e){this.el.scrollLeft=e},t.prototype.getScrollWidth=function(){return this.el.scrollWidth},t.prototype.getScrollHeight=function(){return this.el.scrollHeight},t.prototype.getClientHeight=function(){return this.el.clientHeight},t.prototype.getClientWidth=function(){return this.el.clientWidth},t}($i),to=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return et(t,e),t.prototype.getScrollTop=function(){return window.pageYOffset},
+t.prototype.getScrollLeft=function(){return window.pageXOffset},t.prototype.setScrollTop=function(e){window.scroll(window.pageXOffset,e)},t.prototype.setScrollLeft=function(e){window.scroll(e,window.pageYOffset)},t.prototype.getScrollWidth=function(){return document.documentElement.scrollWidth},t.prototype.getScrollHeight=function(){return document.documentElement.scrollHeight},t.prototype.getClientHeight=function(){return document.documentElement.clientHeight},t.prototype.getClientWidth=function(){return document.documentElement.clientWidth},t}($i),no=function(e){function n(n,r){var i=e.call(this,t("div",{className:"fc-scroller"}))||this;return i.overflowX=n,i.overflowY=r,i.applyOverflow(),i}return et(n,e),n.prototype.clear=function(){this.setHeight("auto"),this.applyOverflow()},n.prototype.destroy=function(){c(this.el)},n.prototype.applyOverflow=function(){g(this.el,{overflowX:this.overflowX,overflowY:this.overflowY})},n.prototype.lockOverflow=function(e){var t=this.overflowX,n=this.overflowY;e=e||this.getScrollbarWidths(),"auto"===t&&(t=e.bottom||this.canScrollHorizontally()?"scroll":"hidden"),"auto"===n&&(n=e.left||e.right||this.canScrollVertically()?"scroll":"hidden"),g(this.el,{overflowX:t,overflowY:n})},n.prototype.setHeight=function(e){y(this.el,"height",e)},n.prototype.getScrollbarWidths=function(){var e=C(this.el);return{left:e.scrollbarLeft,right:e.scrollbarRight,bottom:e.scrollbarBottom}},n}(eo),ro=function(){function e(e){this.calendarOptions=e,this.processIconOverride()}return e.prototype.processIconOverride=function(){this.iconOverrideOption&&this.setIconOverride(this.calendarOptions[this.iconOverrideOption])},e.prototype.setIconOverride=function(e){var t,n;if("object"==typeof e&&e){t=ki({},this.iconClasses);for(n in e)t[n]=this.applyIconOverridePrefix(e[n]);this.iconClasses=t}else!1===e&&(this.iconClasses={})},e.prototype.applyIconOverridePrefix=function(e){var t=this.iconOverridePrefix;return t&&0!==e.indexOf(t)&&(e=t+e),e},e.prototype.getClass=function(e){return this.classes[e]||""},e.prototype.getIconClass=function(e){var t=this.iconClasses[e];return t?this.baseIconClass+" "+t:""},e.prototype.getCustomButtonIconClass=function(e){var t;return this.iconOverrideCustomButtonOption&&(t=e[this.iconOverrideCustomButtonOption])?this.baseIconClass+" "+this.applyIconOverridePrefix(t):""},e}();ro.prototype.classes={},ro.prototype.iconClasses={},ro.prototype.baseIconClass="",ro.prototype.iconOverridePrefix="";var io=0,oo=function(){function e(e,t){t&&(e.view=this),this.uid=String(io++),this.context=e,this.dateEnv=e.dateEnv,this.theme=e.theme,this.view=e.view,this.calendar=e.calendar,this.isRtl="rtl"===this.opt("dir")}return e.addEqualityFuncs=function(e){this.prototype.equalityFuncs=ki({},this.prototype.equalityFuncs,e)},e.prototype.opt=function(e){return this.context.options[e]},e.prototype.receiveProps=function(e){var t=Qn(this.props||{},e,this.equalityFuncs),n=t.anyChanges,r=t.comboProps;this.props=r,n&&this.render(r)},e.prototype.render=function(e){},e.prototype.destroy=function(){},e}();oo.prototype.equalityFuncs={};var ao=function(e){function t(t,n,r){var i=e.call(this,t,r)||this;return i.el=n,i}return et(t,e),t.prototype.destroy=function(){e.prototype.destroy.call(this),c(this.el)},t.prototype.buildPositionCaches=function(){},t.prototype.queryHit=function(e,t,n,r){return null},t.prototype.isInteractionValid=function(e){var t=this.calendar,n=this.props.dateProfile,r=e.mutatedEvents.instances;if(n)for(var i in r)if(!wt(n.validRange,r[i].range))return!1;return dn(e,t)},t.prototype.isDateSelectionValid=function(e){var t=this.props.dateProfile;return!(t&&!wt(t.validRange,e.range))&&fn(e,this.calendar)},t.prototype.publiclyTrigger=function(e,t){return this.calendar.publiclyTrigger(e,t)},t.prototype.publiclyTriggerAfterSizing=function(e,t){return this.calendar.publiclyTriggerAfterSizing(e,t)},t.prototype.hasPublicHandlers=function(e){return this.calendar.hasPublicHandlers(e)},t.prototype.triggerRenderedSegs=function(e,t){var n=this.calendar;if(this.hasPublicHandlers("eventPositioned"))for(var r=0,i=e;r<i.length;r++){var o=i[r];this.publiclyTriggerAfterSizing("eventPositioned",[{event:new Bi(n,o.eventRange.def,o.eventRange.instance),isMirror:t,isStart:o.isStart,isEnd:o.isEnd,el:o.el,view:this}])}n.state.loadingLevel||(n.afterSizingTriggers._eventsPositioned=[null])},t.prototype.triggerWillRemoveSegs=function(e,t){for(var n=this.calendar,r=0,i=e;r<i.length;r++){var o=i[r];n.trigger("eventElRemove",o.el)}if(this.hasPublicHandlers("eventDestroy"))for(var a=0,s=e;a<s.length;a++){var o=s[a];this.publiclyTrigger("eventDestroy",[{event:new Bi(n,o.eventRange.def,o.eventRange.instance),isMirror:t,el:o.el,view:this}])}},t.prototype.isValidSegDownEl=function(e){return!this.props.eventDrag&&!this.props.eventResize&&!d(e,".fc-mirror")&&(this.isPopover()||!this.isInPopover(e))},t.prototype.isValidDateDownEl=function(e){var t=d(e,this.fgSegSelector);return(!t||t.classList.contains("fc-mirror"))&&!d(e,".fc-more")&&!d(e,"a[data-goto]")&&!this.isInPopover(e)},t.prototype.isPopover=function(){return this.el.classList.contains("fc-popover")},t.prototype.isInPopover=function(e){return Boolean(d(e,".fc-popover"))},t}(oo);ao.prototype.fgSegSelector=".fc-event-container > *",ao.prototype.bgSegSelector=".fc-bgevent:not(.fc-nonbusiness)";var so=0,uo=function(){function e(){this.hooks={reducers:[],eventDefParsers:[],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={}}return e.prototype.add=function(e){if(!this.addedHash[e.id]){this.addedHash[e.id]=!0;for(var t=0,n=e.deps;t<n.length;t++){var r=n[t];this.add(r)}this.hooks=er(this.hooks,e)}},e}(),lo={ignoreRange:!0,parseMeta:function(e){return Array.isArray(e)?e:Array.isArray(e.events)?e.events:null},fetch:function(e,t){t({rawEvents:e.eventSource.meta})}},co=$n({eventSourceDefs:[lo]}),fo={parseMeta:function(e){return"function"==typeof e?e:"function"==typeof e.events?e.events:null},fetch:function(e,t,n){var r=e.calendar.dateEnv;Xn(e.eventSource.meta.bind(null,{start:r.toDate(e.range.start),end:r.toDate(e.range.end),startStr:r.formatIso(e.range.start),endStr:r.formatIso(e.range.end),timeZone:r.timeZone}),function(e){t({rawEvents:e})},n)}},po=$n({eventSourceDefs:[fo]}),ho={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=ir(r,e.range,e.calendar);tr(r.method,r.url,i,function(e,n){t({rawEvents:e,xhr:n})},function(e,t){n({message:e,xhr:t})})}},vo=$n({eventSourceDefs:[ho]}),go={parse:function(e,t,n){var r=n.createMarker.bind(n),i={daysOfWeek:null,startTime:ue,endTime:ue,startRecur:r,endRecur:r},o=Ge(e,i,{},t),a=!1;for(var s in o)if(null!=o[s]){a=!0;break}return a?{allDayGuess:Boolean(!o.startTime&&!o.endTime),duration:o.startTime&&o.endTime?ve(o.endTime,o.startTime):null,typeData:o}:null},expand:function(e,t,n){var r=bt(t,{start:e.startRecur,end:e.endRecur});return r?or(e.daysOfWeek,e.startTime,r,n):[]}},yo=$n({recurringTypes:[go]}),mo=$n({optionChangeHandlers:{events:function(e,t){ar([e],t)},eventSources:ar,plugins:sr}}),Eo={},So={defaultRangeSeparator:" - ",titleRangeSeparator:" – ",defaultTimedEventDuration:"01:00:00",defaultAllDayEventDuration:{day:1},forceEventDuration:!1,nextDayThreshold:"00:00:00",columnHeader:!0,defaultView:"",aspectRatio:1.35,header:{left:"title",center:"",right:"today prev,next"},weekends:!0,weekNumbers:!1,weekNumberCalculation:"local",editable:!1,scrollTime:"06:00:00",minTime:"00:00:00",maxTime:"24:00:00",showNonCurrentDates:!0,lazyFetching:!0,startParam:"start",endParam:"end",timeZoneParam:"timeZone",timeZone:"local",locales:[],locale:"",timeGridEventMinHeight:0,themeSystem:"standard",dragRevertDuration:500,dragScroll:!0,allDayMaintainDuration:!1,unselectAuto:!0,dropAccept:"*",eventOrder:"start,-duration,allDay,title",eventLimit:!1,eventLimitClick:"popover",dayPopoverFormat:{month:"long",day:"numeric",year:"numeric"},handleWindowResize:!0,windowResizeDelay:100,longPressDelay:1e3,eventDragMinDistance:5},bo={header:{left:"next,prev today",center:"",right:"title"},buttonIcons:{prev:"fc-icon-chevron-right",next:"fc-icon-chevron-left",prevYear:"fc-icon-chevrons-right",nextYear:"fc-icon-chevrons-left"}},Do=["header","footer","buttonText","buttonIcons"],To=[co,po,vo,yo,mo],wo={code:"en",week:{dow:0,doy:4},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"},Ro=function(){function e(e){this.overrides=ki({},e),this.dynamicOverrides={},this.compute()}return e.prototype.add=function(e){ki(this.overrides,e),this.compute()},e.prototype.addDynamic=function(e){ki(this.dynamicOverrides,e),this.compute()},e.prototype.reset=function(e){this.overrides=e,this.compute()},e.prototype.compute=function(){var e=Ye(this.dynamicOverrides.locales,this.overrides.locales,So.locales),t=Ye(this.dynamicOverrides.locale,this.overrides.locale,So.locale),n=cr(e),r=dr(t||n.defaultCode,n.map).options,i=Ye(this.dynamicOverrides.dir,this.overrides.dir,r.dir),o="rtl"===i?bo:{};this.dirDefaults=o,this.localeDefaults=r,this.computed=ur([So,o,r,this.overrides,this.dynamicOverrides])},e}(),Io={},Co=function(){function e(){}return e.prototype.getMarkerYear=function(e){return e.getUTCFullYear()},e.prototype.getMarkerMonth=function(e){return e.getUTCMonth()},e.prototype.getMarkerDay=function(e){return e.getUTCDate()},e.prototype.arrayToMarker=function(e){return oe(e)},e.prototype.markerToArray=function(e){return ie(e)},e}();!function(e,t){Io[e]=t}("gregory",Co);var Mo=/^\s*(\d{4})(-(\d{2})(-(\d{2})([T ](\d{2}):(\d{2})(:(\d{2})(\.(\d+))?)?(Z|(([-+])(\d{2})(:?(\d{2}))?))?)?)?)?$/,ko=function(){function e(e){var t=this.timeZone=e.timeZone,n="local"!==t&&"UTC"!==t;e.namedTimeZoneImpl&&n&&(this.namedTimeZoneImpl=new e.namedTimeZoneImpl(t)),this.canComputeOffset=Boolean(!n||this.namedTimeZoneImpl),this.calendarSystem=vr(e.calendarSystem),this.locale=e.locale,this.weekDow=e.locale.week.dow,this.weekDoy=e.locale.week.doy,"ISO"===e.weekNumberCalculation?(this.weekDow=1,this.weekDoy=4):"number"==typeof e.firstDay&&(this.weekDow=e.firstDay),"function"==typeof e.weekNumberCalculation&&(this.weekNumberFunc=e.weekNumberCalculation),this.weekLabel=null!=e.weekLabel?e.weekLabel:e.locale.options.weekLabel,this.cmdFormatter=e.cmdFormatter}return e.prototype.createMarker=function(e){var t=this.createMarkerMeta(e);return null===t?null:t.marker},e.prototype.createNowMarker=function(){return this.canComputeOffset?this.timestampToMarker((new Date).valueOf()):oe(ne(new Date))},e.prototype.createMarkerMeta=function(e){if("string"==typeof e)return this.parse(e);var t=null;return"number"==typeof e?t=this.timestampToMarker(e):e instanceof Date?(e=e.valueOf(),isNaN(e)||(t=this.timestampToMarker(e))):Array.isArray(e)&&(t=oe(e)),null!==t&&ae(t)?{marker:t,isTimeUnspecified:!1,forcedTzo:null}:null},e.prototype.parse=function(e){var t=gr(e);if(null===t)return null;var n=t.marker,r=null;return null!==t.timeZoneOffset&&(this.canComputeOffset?n=this.timestampToMarker(n.valueOf()-60*t.timeZoneOffset*1e3):r=t.timeZoneOffset),{marker:n,isTimeUnspecified:t.isTimeUnspecified,forcedTzo:r}},e.prototype.getYear=function(e){return this.calendarSystem.getMarkerYear(e)},e.prototype.getMonth=function(e){return this.calendarSystem.getMarkerMonth(e)},e.prototype.add=function(e,t){var n=this.calendarSystem.markerToArray(e);return n[0]+=t.years,n[1]+=t.months,n[2]+=t.days,n[6]+=t.milliseconds,this.calendarSystem.arrayToMarker(n)},e.prototype.subtract=function(e,t){var n=this.calendarSystem.markerToArray(e);return n[0]-=t.years,n[1]-=t.months,n[2]-=t.days,n[6]-=t.milliseconds,this.calendarSystem.arrayToMarker(n)},e.prototype.addYears=function(e,t){var n=this.calendarSystem.markerToArray(e);return n[0]+=t,this.calendarSystem.arrayToMarker(n)},e.prototype.addMonths=function(e,t){var n=this.calendarSystem.markerToArray(e);return n[1]+=t,this.calendarSystem.arrayToMarker(n)},e.prototype.diffWholeYears=function(e,t){var n=this.calendarSystem;return se(e)===se(t)&&n.getMarkerDay(e)===n.getMarkerDay(t)&&n.getMarkerMonth(e)===n.getMarkerMonth(t)?n.getMarkerYear(t)-n.getMarkerYear(e):null},e.prototype.diffWholeMonths=function(e,t){var n=this.calendarSystem;return se(e)===se(t)&&n.getMarkerDay(e)===n.getMarkerDay(t)?n.getMarkerMonth(t)-n.getMarkerMonth(e)+12*(n.getMarkerYear(t)-n.getMarkerYear(e)):null},e.prototype.greatestWholeUnit=function(e,t){var n=this.diffWholeYears(e,t);return null!==n?{unit:"year",value:n}:null!==(n=this.diffWholeMonths(e,t))?{unit:"month",value:n}:null!==(n=q(e,t))?{unit:"week",value:n}:null!==(n=G(e,t))?{unit:"day",value:n}:(n=W(e,t),Ze(n)?{unit:"hour",value:n}:(n=Z(e,t),Ze(n)?{unit:"minute",value:n}:(n=j(e,t),Ze(n)?{unit:"second",value:n}:{unit:"millisecond",value:t.valueOf()-e.valueOf()})))},e.prototype.countDurationsBetween=function(e,t,n){var r;return n.years&&null!==(r=this.diffWholeYears(e,t))?r/ye(n):n.months&&null!==(r=this.diffWholeMonths(e,t))?r/me(n):n.days&&null!==(r=G(e,t))?r/Ee(n):(t.valueOf()-e.valueOf())/De(n)},e.prototype.startOf=function(e,t){return"year"===t?this.startOfYear(e):"month"===t?this.startOfMonth(e):"week"===t?this.startOfWeek(e):"day"===t?X(e):"hour"===t?J(e):"minute"===t?K(e):"second"===t?Q(e):void 0},e.prototype.startOfYear=function(e){return this.calendarSystem.arrayToMarker([this.calendarSystem.getMarkerYear(e)])},e.prototype.startOfMonth=function(e){return this.calendarSystem.arrayToMarker([this.calendarSystem.getMarkerYear(e),this.calendarSystem.getMarkerMonth(e)])},e.prototype.startOfWeek=function(e){return this.calendarSystem.arrayToMarker([this.calendarSystem.getMarkerYear(e),this.calendarSystem.getMarkerMonth(e),e.getUTCDate()-(e.getUTCDay()-this.weekDow+7)%7])},e.prototype.computeWeekNumber=function(e){return this.weekNumberFunc?this.weekNumberFunc(this.toDate(e)):$(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=V(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)),Bt(e,n,t.omitTime)},e.prototype.timestampToMarker=function(e){return"local"===this.timeZone?oe(ne(new Date(e))):"UTC"!==this.timeZone&&this.namedTimeZoneImpl?oe(this.namedTimeZoneImpl.timestampToArray(e)):new Date(e)},e.prototype.offsetForMarker=function(e){return"local"===this.timeZone?-re(ie(e)).getTimezoneOffset():"UTC"===this.timeZone?0:this.namedTimeZoneImpl?this.namedTimeZoneImpl.offsetForArray(ie(e)):null},e.prototype.toDate=function(e,t){return"local"===this.timeZone?re(ie(e)):"UTC"===this.timeZone?new Date(e.valueOf()):this.namedTimeZoneImpl?new Date(e.valueOf()-1e3*this.namedTimeZoneImpl.offsetForArray(ie(e))*60):new Date(e.valueOf()-(t||0))},e}(),Oo={id:String,allDayDefault:Boolean,eventDataTransform:Function,success:Function,failure:Function},_o=0,Po=0,Ho=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){void 0===n&&(n=!1);var r,i,o,a,s,u,l=null,c=null;return r=this.buildValidRange(),r=this.trimHiddenDays(r),n&&(e=It(e,r)),i=this.buildCurrentRangeInfo(e,t),o=/^(year|month|week|day)$/.test(i.unit),a=this.buildRenderRange(this.trimHiddenDays(i.range),i.unit,o),a=this.trimHiddenDays(a),s=a,this.options.showNonCurrentDates||(s=bt(s,i.range)),l=ue(this.options.minTime),c=ue(this.options.maxTime),s=this.adjustActiveRange(s,l,c),s=bt(s,r),u=Tt(i.range,r),{validRange:r,currentRange:i.range,currentRangeUnit:i.unit,isRangeAllDay:o,activeRange:s,renderRange:a,minTime:l,maxTime:c,isValid:u,dateIncrement:this.buildDateIncrement(i.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,i=r.viewSpec,o=r.dateEnv,a=null,s=null,u=null;return i.duration?(a=i.duration,s=i.durationUnit,u=this.buildRangeFromDuration(e,t,a,s)):(n=this.options.dayCount)?(s="day",u=this.buildRangeFromDayCount(e,t,n)):(u=this.buildCustomVisibleRange(e))?s=o.greatestWholeUnit(u.start,u.end).unit:(a=this.getFallbackDuration(),s=we(a).unit,u=this.buildRangeFromDuration(e,t,a,s)),{duration:a,unit:s,range:u}},e.prototype.getFallbackDuration=function(){return ue({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=X(i),i=r.add(i,t)),Ee(n)>1&&(o=X(o),o=A(o,-1),o=r.add(o,n))),{start:i,end:o}},e.prototype.buildRangeFromDuration=function(e,t,n,r){function i(){s=c.startOf(e,d),u=c.add(s,n),l={start:s,end:u}}var o,a,s,u,l,c=this.dateEnv,d=this.options.dateAlignment;return d||(o=this.options.dateIncrement,o?(a=ue(o),d=De(a)<De(n)?we(a,!de(o)).unit:r):d=r),Ee(n)<=1&&this.isHiddenDay(s)&&(s=this.skipHiddenDays(s,t),s=X(s)),i(),this.trimHiddenDays(l)||(e=this.skipHiddenDays(e,t),i()),l},e.prototype.buildRangeFromDayCount=function(e,t,n){var r,i=this.dateEnv,o=this.options.dateAlignment,a=0,s=e;o&&(s=i.startOf(s,o)),s=X(s),s=this.skipHiddenDays(s,t),r=s;do{r=A(r,1),this.isHiddenDay(r)||a++}while(a<n);return{start:s,end:r}},e.prototype.buildCustomVisibleRange=function(e){var t=this.dateEnv,n=this.getRangeOption("visibleRange",t.toDate(e));return!n||null!=n.start&&null!=n.end?n:null},e.prototype.buildRenderRange=function(e,t,n){return e},e.prototype.buildDateIncrement=function(e){var t,n=this.options.dateIncrement;return n?ue(n):(t=this.options.dateAlignment)?ue(1,t):e||ue({days:1})},e.prototype.getRangeOption=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];var r=this.options[e];return"function"==typeof r&&(r=r.apply(null,t)),r&&(r=mt(r,this.dateEnv)),r&&(r=Ke(r)),r},e.prototype.initHiddenDays=function(){var e,t=this.options.hiddenDays||[],n=[],r=0;for(!1===this.options.weekends&&t.push(0,6),e=0;e<7;e++)(n[e]=-1!==t.indexOf(e))||r++;if(!r)throw new Error("invalid hiddenDays");this.isHiddenDayHash=n},e.prototype.trimHiddenDays=function(e){var t=e.start,n=e.end;return t&&(t=this.skipHiddenDays(t)),n&&(n=this.skipHiddenDays(n,-1,!0)),null==t||null==n||t<n?{start:t,end:n}:null},e.prototype.isHiddenDay=function(e){return e instanceof Date&&(e=e.getUTCDay()),this.isHiddenDayHash[e]},e.prototype.skipHiddenDays=function(e,t,n){for(void 0===t&&(t=1),void 0===n&&(n=!1);this.isHiddenDayHash[(e.getUTCDay()+(n?t:0)+7)%7];)e=A(e,t);return e},e}(),xo={start:null,end:null,allDay:Boolean},No={type:String,class:null},zo=function(e){function r(n,r){var i=e.call(this,n)||this;return i._renderLayout=An(i.renderLayout,i.unrenderLayout),i._updateTitle=An(i.updateTitle,null,[i._renderLayout]),i._updateActiveButton=An(i.updateActiveButton,null,[i._renderLayout]),i._updateToday=An(i.updateToday,null,[i._renderLayout]),i._updatePrev=An(i.updatePrev,null,[i._renderLayout]),i._updateNext=An(i.updateNext,null,[i._renderLayout]),i.el=t("div",{className:"fc-toolbar "+r}),i}return et(r,e),r.prototype.destroy=function(){e.prototype.destroy.call(this),this._renderLayout.unrender(),c(this.el)},r.prototype.render=function(e){this._renderLayout(e.layout),this._updateTitle(e.title),this._updateActiveButton(e.activeButton),this._updateToday(e.isTodayEnabled),this._updatePrev(e.isPrevEnabled),this._updateNext(e.isNextEnabled)},r.prototype.renderLayout=function(e){var t=this.el;this.viewsWithButtons=[],a(t,this.renderSection("left",e.left)),a(t,this.renderSection("center",e.center)),a(t,this.renderSection("right",e.right))},r.prototype.unrenderLayout=function(){this.el.innerHTML=""},r.prototype.renderSection=function(e,r){var i=this,o=this,s=o.theme,u=o.calendar,l=u.optionsManager,c=u.viewSpecs,d=t("div",{className:"fc-"+e}),f=l.computed.customButtons||{},p=l.overrides.buttonText||{},h=l.computed.buttonText||{};return r&&r.split(" ").forEach(function(e,t){var r,o=[],l=!0;if(e.split(",").forEach(function(e,t){var r,a,d,v,g,y,m,E,S;"title"===e?(o.push(n("<h2> </h2>")),l=!1):((r=f[e])?(d=function(e){r.click&&r.click.call(E,e)},(v=s.getCustomButtonIconClass(r))||(v=s.getIconClass(e))||(g=r.text)):(a=c[e])?(i.viewsWithButtons.push(e),d=function(){u.changeView(e)},(g=a.buttonTextOverride)||(v=s.getIconClass(e))||(g=a.buttonTextDefault)):u[e]&&(d=function(){u[e]()},(g=p[e])||(v=s.getIconClass(e))||(g=h[e])),d&&(m=["fc-"+e+"-button",s.getClass("button")],g?(y=Dn(g),S=""):v&&(y="<span class='"+v+"'></span>",S=' aria-label="'+e+'"'),E=n('<button type="button" class="'+m.join(" ")+'"'+S+">"+y+"</button>"),E.addEventListener("click",d),o.push(E)))}),o.length>1){r=document.createElement("div");var v=s.getClass("buttonGroup");l&&v&&r.classList.add(v),a(r,o),d.appendChild(r)}else a(d,o)}),d},r.prototype.updateToday=function(e){this.toggleButtonEnabled("today",e)},r.prototype.updatePrev=function(e){this.toggleButtonEnabled("prev",e)},r.prototype.updateNext=function(e){this.toggleButtonEnabled("next",e)},r.prototype.updateTitle=function(e){p(this.el,"h2").forEach(function(t){t.innerText=e})},r.prototype.updateActiveButton=function(e){var t=this.theme.getClass("buttonActive");p(this.el,"button").forEach(function(n){e&&n.classList.contains("fc-"+e+"-button")?n.classList.add(t):n.classList.remove(t)})},r.prototype.toggleButtonEnabled=function(e,t){p(this.el,".fc-"+e+"-button").forEach(function(e){e.disabled=!t})},r}(oo),Uo=function(e){function n(n,r){var i=e.call(this,n)||this;i._renderToolbars=An(i.renderToolbars),i.buildViewPropTransformers=kt(ni),i.el=r,s(r,i.contentEl=t("div",{className:"fc-view-container"}));for(var o=i.calendar,a=0,u=o.pluginSystem.hooks.viewContainerModifiers;a<u.length;a++){(0,u[a])(i.contentEl,o)}return i.toggleElClassNames(!0),i.computeTitle=kt(ei),i.parseBusinessHours=kt(function(e){return Un(e,i.calendar)}),i}return et(n,e),n.prototype.destroy=function(){this.header&&this.header.destroy(),this.footer&&this.footer.destroy(),this.view&&this.view.destroy(),c(this.contentEl),this.toggleElClassNames(!1),e.prototype.destroy.call(this)},n.prototype.toggleElClassNames=function(e){var t=this.el.classList,n="fc-"+this.opt("dir"),r=this.theme.getClass("widget");e?(t.add("fc"),t.add(n),t.add(r)):(t.remove("fc"),t.remove(n),t.remove(r))},n.prototype.render=function(e){this.freezeHeight();var t=this.computeTitle(e.dateProfile,e.viewSpec.options);this._renderToolbars(e.viewSpec,e.dateProfile,e.currentDate,e.dateProfileGenerator,t),this.renderView(e,t),this.updateSize(),this.thawHeight()},n.prototype.renderToolbars=function(e,t,n,r,i){var o=this.opt("header"),u=this.opt("footer"),l=this.calendar.getNow(),c=r.build(l),d=r.buildPrev(t,n),f=r.buildNext(t,n),p={title:i,activeButton:e.type,isTodayEnabled:c.isValid&&!Rt(t.currentRange,l),isPrevEnabled:d.isValid,isNextEnabled:f.isValid};o?(this.header||(this.header=new zo(this.context,"fc-header-toolbar"),s(this.el,this.header.el)),this.header.receiveProps(ki({layout:o},p))):this.header&&(this.header.destroy(),this.header=null),u?(this.footer||(this.footer=new zo(this.context,"fc-footer-toolbar"),a(this.el,this.footer.el)),this.footer.receiveProps(ki({layout:u},p))):this.footer&&(this.footer.destroy(),this.footer=null)},n.prototype.renderView=function(e,t){var n=this.view,r=e.viewSpec,i=e.dateProfileGenerator;n&&n.viewSpec===r?n.addScroll(n.queryScroll()):(n&&n.destroy(),n=this.view=new r.class({calendar:this.calendar,view:null,dateEnv:this.dateEnv,theme:this.theme,options:r.options},r,i,this.contentEl)),n.title=t;for(var o={dateProfile:e.dateProfile,businessHours:this.parseBusinessHours(r.options.businessHours),eventStore:e.eventStore,eventUiBases:e.eventUiBases,dateSelection:e.dateSelection,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize},a=this.buildViewPropTransformers(this.calendar.pluginSystem.hooks.viewPropsTransformers),s=0,u=a;s<u.length;s++){var l=u[s];ki(o,l.transform(o,r,e,n))}n.receiveProps(o)},n.prototype.updateSize=function(e){void 0===e&&(e=!1);var t=this.view;e&&t.addScroll(t.queryScroll()),(e||null==this.isHeightAuto)&&this.computeHeightVars(),t.updateSize(e,this.viewHeight,this.isHeightAuto),t.updateNowIndicator(),t.popScroll(e)},n.prototype.computeHeightVars=function(){var e=this.calendar,t=e.opt("height"),n=e.opt("contentHeight");this.isHeightAuto="auto"===t||"auto"===n,this.viewHeight="number"==typeof n?n:"function"==typeof n?n():"number"==typeof t?t-this.queryToolbarsHeight():"function"==typeof t?t()-this.queryToolbarsHeight():"parent"===t?this.el.parentNode.offsetHeight-this.queryToolbarsHeight():Math.round(this.contentEl.offsetWidth/Math.max(e.opt("aspectRatio"),.5))},n.prototype.queryToolbarsHeight=function(){var e=0;return this.header&&(e+=_(this.header.el)),this.footer&&(e+=_(this.footer.el)),e},n.prototype.freezeHeight=function(){g(this.el,{height:this.el.offsetHeight,overflow:"hidden"})},n.prototype.thawHeight=function(){g(this.el,{height:"",overflow:""})},n}(oo),Lo=function(){function e(e){this.component=e.component}return e.prototype.destroy=function(){},e}(),Ao={},Vo=function(e){function t(t){var n=e.call(this,t)||this;n.handleSegClick=function(e,t){var r=n.component,i=Jt(t);if(i&&r.isValidSegDownEl(e.target)){var o=d(e.target,".fc-has-url"),a=o?o.querySelector("a[href]").href:"";r.publiclyTrigger("eventClick",[{el:t,event:new Bi(r.calendar,i.eventRange.def,i.eventRange.instance),jsEvent:e,view:r.view}]),a&&!e.defaultPrevented&&(window.location.href=a)}};var r=t.component;return n.destroy=N(r.el,"click",r.fgSegSelector+","+r.bgSegSelector,n.handleSegClick),n}return et(t,e),t}(Lo),Bo=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){Jt(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=t.component;return n.removeHoverListeners=z(r.el,r.fgSegSelector+","+r.bgSegSelector,n.handleSegEnter,n.handleSegLeave),r.calendar.on("eventElRemove",n.handleEventElRemove),n}return et(t,e),t.prototype.destroy=function(){this.removeHoverListeners(),this.component.calendar.off("eventElRemove",this.handleEventElRemove)},t.prototype.triggerEvent=function(e,t,n){var r=this.component,i=Jt(n);t&&!r.isValidSegDownEl(t.target)||r.publiclyTrigger(e,[{el:n,event:new Bi(this.component.calendar,i.eventRange.def,i.eventRange.instance),jsEvent:t,view:r.view}])},t}(Lo),Fo=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return et(t,e),t}(ro);Fo.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"},Fo.prototype.baseIconClass="fc-icon",Fo.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"},Fo.prototype.iconOverrideOption="buttonIcons",Fo.prototype.iconOverrideCustomButtonOption="icon",Fo.prototype.iconOverridePrefix="fc-icon-";var Wo=function(){function e(e,t){var n=this;this.parseRawLocales=kt(cr),this.buildLocale=kt(dr),this.buildDateEnv=kt(oi),this.buildTheme=kt(ai),this.buildEventUiSingleBase=kt(this._buildEventUiSingleBase),this.buildSelectionConfig=kt(this._buildSelectionConfig),this.buildEventUiBySource=Ot(ui,Fn),this.buildEventUiBases=kt(li),this.interactionsStore={},this.actionQueue=[],this.isReducing=!1,this.needsRerender=!1,this.needsFullRerender=!1,this.isRendering=!1,this.renderingPauseDepth=0,this.buildDelayedRerender=kt(si),this.afterSizingTriggers={},this.isViewUpdated=!1,this.isDatesUpdated=!1,this.isEventsUpdated=!1,this.el=e,this.optionsManager=new Ro(t||{}),this.pluginSystem=new uo,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=lr(e),n=0,r=t;n<r.length;n++){var i=r[n];this.pluginSystem.add(i)}},Object.defineProperty(e.prototype,"view",{get:function(){return this.component?this.component.view:null},enumerable:!0,configurable:!0}),e.prototype.render=function(){this.component?this.requestRerender(!0):(this.renderableEventStore=vt(),this.bindHandlers(),this.executeRender())},e.prototype.destroy=function(){if(this.component){this.unbindHandlers(),this.component.destroy(),this.component=null;for(var e=0,t=this.calendarInteractions;e<t.length;e++){t[e].destroy()}this.publiclyTrigger("_destroyed")}},e.prototype.bindHandlers=function(){var e=this;this.removeNavLinkListener=N(this.el,"click","a[data-goto]",function(t,n){var r=n.getAttribute("data-goto");r=r?JSON.parse(r):{};var i=e.dateEnv,o=i.createMarker(r.date),a=r.type,s=e.viewOpt("navLink"+Be(a)+"Click");"function"==typeof s?s(i.toDate(o),t):("string"==typeof s&&(a=s),e.zoomTo(o,a))}),this.opt("handleWindowResize")&&window.addEventListener("resize",this.windowResizeProxy=qe(this.windowResize.bind(this),this.opt("windowResizeDelay")))},e.prototype.unbindHandlers=function(){this.removeNavLinkListener(),this.windowResizeProxy&&(window.removeEventListener("resize",this.windowResizeProxy),this.windowResizeProxy=null)},e.prototype.hydrate=function(){var e=this;this.state=this.buildInitialState();var t=this.opt("eventSources")||[],n=this.opt("events"),r=[];n&&t.unshift(n);for(var i=0,o=t;i<o.length;i++){var a=o[i],s=mr(a,this);s&&r.push(s)}this.batchRendering(function(){e.dispatch({type:"INIT"}),e.dispatch({type:"ADD_EVENT_SOURCES",sources:r}),e.dispatch({type:"SET_VIEW_TYPE",viewType:e.opt("defaultView")||e.pluginSystem.hooks.defaultView})})},e.prototype.buildInitialState=function(){return{viewType:null,loadingLevel:0,eventSourceLoadingLevel:0,currentDate:this.getInitialDate(),dateProfile:null,eventSources:{},eventStore:vt(),dateSelection:null,eventSelection:"",eventDrag:null,eventResize:null}},e.prototype.dispatch=function(e){if(this.actionQueue.push(e),!this.isReducing){this.isReducing=!0;for(var t=this.state;this.actionQueue.length;)this.state=this.reduce(this.state,this.actionQueue.shift(),this);var n=this.state;this.isReducing=!1,
+!t.loadingLevel&&n.loadingLevel?this.publiclyTrigger("loading",[!0]):t.loadingLevel&&!n.loadingLevel&&this.publiclyTrigger("loading",[!1]);var r=this.component&&this.component.view;(t.eventStore!==n.eventStore||this.needsFullRerender)&&t.eventStore&&(this.isEventsUpdated=!0),(t.dateProfile!==n.dateProfile||this.needsFullRerender)&&(t.dateProfile&&r&&this.publiclyTrigger("datesDestroy",[{view:r,el:r.el}]),this.isDatesUpdated=!0),(t.viewType!==n.viewType||this.needsFullRerender)&&(t.viewType&&r&&this.publiclyTrigger("viewSkeletonDestroy",[{view:r,el:r.el}]),this.isViewUpdated=!0),this.requestRerender()}},e.prototype.reduce=function(e,t,n){return Or(e,t,n)},e.prototype.requestRerender=function(e){void 0===e&&(e=!1),this.needsRerender=!0,this.needsFullRerender=this.needsFullRerender||e,this.delayedRerender()},e.prototype.tryRerender=function(){this.component&&this.needsRerender&&!this.renderingPauseDepth&&!this.isRendering&&this.executeRender()},e.prototype.batchRendering=function(e){this.renderingPauseDepth++,e(),this.renderingPauseDepth--,this.needsRerender&&this.requestRerender()},e.prototype.executeRender=function(){var e=this.needsFullRerender;this.needsRerender=!1,this.needsFullRerender=!1,this.isRendering=!0,this.renderComponent(e),this.isRendering=!1,this.needsRerender&&this.delayedRerender()},e.prototype.renderComponent=function(e){var t=this,n=t.state,r=t.component,i=n.viewType,o=this.viewSpecs[i],a=e&&r?r.view.queryScroll():null;if(!o)throw new Error('View type "'+i+'" is not valid');var s=this.renderableEventStore=n.eventSourceLoadingLevel&&!this.opt("progressiveEventRendering")?this.renderableEventStore:n.eventStore,u=this.buildEventUiSingleBase(o.options),l=this.buildEventUiBySource(n.eventSources),c=this.eventUiBases=this.buildEventUiBases(s.defs,u,l);!e&&r||(r&&(r.freezeHeight(),r.destroy()),r=this.component=new Uo({calendar:this,view:null,dateEnv:this.dateEnv,theme:this.theme,options:this.optionsManager.computed},this.el)),r.receiveProps(ki({},n,{viewSpec:o,dateProfile:n.dateProfile,dateProfileGenerator:this.dateProfileGenerators[i],eventStore:s,eventUiBases:c,dateSelection:n.dateSelection,eventSelection:n.eventSelection,eventDrag:n.eventDrag,eventResize:n.eventResize})),a&&r.view.applyScroll(a,!1),this.isViewUpdated&&(this.isViewUpdated=!1,this.publiclyTrigger("viewSkeletonRender",[{view:r.view,el:r.view.el}])),this.isDatesUpdated&&(this.isDatesUpdated=!1,this.publiclyTrigger("datesRender",[{view:r.view,el:r.view.el}])),this.isEventsUpdated&&(this.isEventsUpdated=!1),this.releaseAfterSizingTriggers()},e.prototype.resetOptions=function(e){var t=this,n=this.pluginSystem.hooks.optionChangeHandlers,r=this.optionsManager.overrides,i={},o={},a={};for(var s in r)n[s]||(i[s]=r[s]);for(var u in e)n[u]?a[u]=e[u]:o[u]=e[u];this.batchRendering(function(){Zn(i,o)?t.processOptions(e,"reset"):t.processOptions(Wn(i,o));for(var r in a)n[r](a[r],t)})},e.prototype.setOptions=function(e){var t=this,n=this.pluginSystem.hooks.optionChangeHandlers,r={},i={};for(var o in e)n[o]?i[o]=e[o]:r[o]=e[o];this.batchRendering(function(){t.processOptions(r);for(var e in i)n[e](i[e],t)})},e.prototype.processOptions=function(e,t){var n=this,r=this.dateEnv,i=!1,o=!1,a=!1;for(var s in e)/^(height|contentHeight|aspectRatio)$/.test(s)?o=!0:/^(defaultDate|defaultView)$/.test(s)||(a=!0,"timeZone"===s&&(i=!0));"reset"===t?(a=!0,this.optionsManager.reset(e)):"dynamic"===t?this.optionsManager.addDynamic(e):this.optionsManager.add(e),a&&(this.handleOptions(this.optionsManager.computed),this.needsFullRerender=!0,this.batchRendering(function(){i&&n.dispatch({type:"CHANGE_TIMEZONE",oldDateEnv:r}),n.dispatch({type:"SET_VIEW_TYPE",viewType:n.state.viewType})})),o&&this.updateSize()},e.prototype.setOption=function(e,t){var n;this.processOptions((n={},n[e]=t,n),"dynamic")},e.prototype.getOption=function(e){return this.optionsManager.computed[e]},e.prototype.opt=function(e){return this.optionsManager.computed[e]},e.prototype.viewOpt=function(e){return this.viewOpts()[e]},e.prototype.viewOpts=function(){return this.viewSpecs[this.state.viewType].options},e.prototype.handleOptions=function(e){var t=this,n=this.pluginSystem.hooks;this.defaultAllDayEventDuration=ue(e.defaultAllDayEventDuration),this.defaultTimedEventDuration=ue(e.defaultTimedEventDuration),this.delayedRerender=this.buildDelayedRerender(e.rerenderDelay),this.theme=this.buildTheme(e);var r=this.parseRawLocales(e.locales);this.availableRawLocales=r.map;var i=this.buildLocale(e.locale||r.defaultCode,r.map);this.dateEnv=this.buildDateEnv(i,e.timeZone,n.namedTimeZonedImpl,e.firstDay,e.weekNumberCalculation,e.weekLabel,n.cmdFormatter),this.selectionConfig=this.buildSelectionConfig(e),this.viewSpecs=Qr(n.views,this.optionsManager),this.dateProfileGenerators=ot(this.viewSpecs,function(e){return new e.class.prototype.dateProfileGeneratorClass(e,t)})},e.prototype.getAvailableLocaleCodes=function(){return Object.keys(this.availableRawLocales)},e.prototype._buildSelectionConfig=function(e){return Cn("select",e,this)},e.prototype._buildEventUiSingleBase=function(e){return e.editable&&(e=ki({},e,{eventEditable:!0})),Cn("event",e,this)},e.prototype.hasPublicHandlers=function(e){return this.hasHandlers(e)||this.opt(e)},e.prototype.publiclyTrigger=function(e,t){var n=this.opt(e);if(this.triggerWith(e,this,t),n)return n.apply(this,t)},e.prototype.publiclyTriggerAfterSizing=function(e,t){var n=this.afterSizingTriggers;(n[e]||(n[e]=[])).push(t)},e.prototype.releaseAfterSizingTriggers=function(){var e=this.afterSizingTriggers;for(var t in e)for(var n=0,r=e[t];n<r.length;n++){var i=r[n];this.publiclyTrigger(t,i)}this.afterSizingTriggers={}},e.prototype.isValidViewType=function(e){return Boolean(this.viewSpecs[e])},e.prototype.changeView=function(e,t){var n=null;t&&(t.start&&t.end?(this.optionsManager.addDynamic({visibleRange:t}),this.handleOptions(this.optionsManager.computed)):n=this.dateEnv.createMarker(t)),this.unselect(),this.dispatch({type:"SET_VIEW_TYPE",viewType:e,dateMarker:n})},e.prototype.zoomTo=function(e,t){var n;t=t||"day",n=this.viewSpecs[t]||this.getUnitViewSpec(t),this.unselect(),n?this.dispatch({type:"SET_VIEW_TYPE",viewType:n.type,dateMarker:e}):this.dispatch({type:"SET_DATE",dateMarker:e})},e.prototype.getUnitViewSpec=function(e){var t,n,r=this.component,i=[];r.header&&i.push.apply(i,r.header.viewsWithButtons),r.footer&&i.push.apply(i,r.footer.viewsWithButtons);for(var o in this.viewSpecs)i.push(o);for(t=0;t<i.length;t++)if((n=this.viewSpecs[i[t]])&&n.singleUnit===e)return n},e.prototype.getInitialDate=function(){var e=this.opt("defaultDate");return null!=e?this.dateEnv.createMarker(e):this.getNow()},e.prototype.prev=function(){this.unselect(),this.dispatch({type:"PREV"})},e.prototype.next=function(){this.unselect(),this.dispatch({type:"NEXT"})},e.prototype.prevYear=function(){this.unselect(),this.dispatch({type:"SET_DATE",dateMarker:this.dateEnv.addYears(this.state.currentDate,-1)})},e.prototype.nextYear=function(){this.unselect(),this.dispatch({type:"SET_DATE",dateMarker:this.dateEnv.addYears(this.state.currentDate,1)})},e.prototype.today=function(){this.unselect(),this.dispatch({type:"SET_DATE",dateMarker:this.getNow()})},e.prototype.gotoDate=function(e){this.unselect(),this.dispatch({type:"SET_DATE",dateMarker:this.dateEnv.createMarker(e)})},e.prototype.incrementDate=function(e){var t=ue(e);t&&(this.unselect(),this.dispatch({type:"SET_DATE",dateMarker:this.dateEnv.add(this.state.currentDate,t)}))},e.prototype.getDate=function(){return this.dateEnv.toDate(this.state.currentDate)},e.prototype.formatDate=function(e,t){var n=this.dateEnv;return n.format(n.createMarker(e),Vt(t))},e.prototype.formatRange=function(e,t,n){var r=this.dateEnv;return r.formatRange(r.createMarker(e),r.createMarker(t),Vt(n,this.opt("defaultRangeSeparator")),n)},e.prototype.formatIso=function(e,t){var n=this.dateEnv;return n.formatIso(n.createMarker(e),{omitTime:t})},e.prototype.windowResize=function(e){!this.isHandlingWindowResize&&this.component&&e.target===window&&(this.isHandlingWindowResize=!0,this.updateSize(),this.publiclyTrigger("windowResize",[this.view]),this.isHandlingWindowResize=!1)},e.prototype.updateSize=function(){this.component&&this.component.updateSize(!0)},e.prototype.registerInteractiveComponent=function(e,t){var n=ri(e,t),r=[Vo,Bo],i=r.concat(this.pluginSystem.hooks.componentInteractions),o=i.map(function(e){return new e(n)});this.interactionsStore[e.uid]=o,Ao[e.uid]=n},e.prototype.unregisterInteractiveComponent=function(e){for(var t=0,n=this.interactionsStore[e.uid];t<n.length;t++){n[t].destroy()}delete this.interactionsStore[e.uid],delete Ao[e.uid]},e.prototype.select=function(e,t){var n;n=null==t?null!=e.start?e:{start:e,end:null}:{start:e,end:t};var r=Ar(n,this.dateEnv,ue({days:1}));r&&(this.dispatch({type:"SELECT_DATES",selection:r}),this.triggerDateSelect(r))},e.prototype.unselect=function(e){this.state.dateSelection&&(this.dispatch({type:"UNSELECT_DATES"}),this.triggerDateUnselect(e))},e.prototype.triggerDateSelect=function(e,t){var n=this.buildDateSpanApi(e);n.jsEvent=t?t.origEvent:null,n.view=this.view,this.publiclyTrigger("select",[n])},e.prototype.triggerDateUnselect=function(e){this.publiclyTrigger("unselect",[{jsEvent:e?e.origEvent:null,view:this.view}])},e.prototype.triggerDateClick=function(e,t,n,r){var i=this.buildDatePointApi(e);i.dayEl=t,i.jsEvent=r,i.view=n,this.publiclyTrigger("dateClick",[i])},e.prototype.buildDatePointApi=function(e){for(var t={},n=0,r=this.pluginSystem.hooks.datePointTransforms;n<r.length;n++){var i=r[n];ki(t,i(e,this))}return ki(t,Zr(e,this.dateEnv)),t},e.prototype.buildDateSpanApi=function(e){for(var t={},n=0,r=this.pluginSystem.hooks.dateSpanTransforms;n<r.length;n++){var i=r[n];ki(t,i(e,this))}return ki(t,Wr(e,this.dateEnv)),t},e.prototype.getNow=function(){var e=this.opt("now");return"function"==typeof e&&(e=e()),null==e?this.dateEnv.createNowMarker():this.dateEnv.createMarker(e)},e.prototype.getDefaultEventEnd=function(e,t){var n=t;return e?(n=X(n),n=this.dateEnv.add(n,this.defaultAllDayEventDuration)):n=this.dateEnv.add(n,this.defaultTimedEventDuration),n},e.prototype.addEvent=function(e,t){if(e instanceof Bi){var n=e._def,r=e._instance;return this.state.eventStore.defs[n.defId]||this.dispatch({type:"ADD_EVENTS",eventStore:lt({def:n,instance:r})}),e}var i;if(t instanceof Vi)i=t.internalEventSource.sourceId;else if(null!=t){var o=this.getEventSourceById(t);if(!o)return console.warn('Could not find an event source with ID "'+t+'"'),null;i=o.internalEventSource.sourceId}var a=On(e,i,this);return a?(this.dispatch({type:"ADD_EVENTS",eventStore:lt(a)}),new Bi(this,a.def,a.def.recurringDef?null:a.instance)):null},e.prototype.getEventById=function(e){var t=this.state.eventStore,n=t.defs,r=t.instances;e=String(e);for(var i in n){var o=n[i];if(o.publicId===e){if(o.recurringDef)return new Bi(this,o,null);for(var a in r){var s=r[a];if(s.defId===o.defId)return new Bi(this,o,s)}}}return null},e.prototype.getEvents=function(){var e=this.state.eventStore,t=e.defs,n=e.instances,r=[];for(var i in n){var o=n[i],a=t[o.defId];r.push(new Bi(this,a,o))}return r},e.prototype.removeAllEvents=function(){this.dispatch({type:"REMOVE_ALL_EVENTS"})},e.prototype.rerenderEvents=function(){this.dispatch({type:"RESET_EVENTS"})},e.prototype.getEventSources=function(){var e=this.state.eventSources,t=[];for(var n in e)t.push(new Vi(this,e[n]));return t},e.prototype.getEventSourceById=function(e){var t=this.state.eventSources;e=String(e);for(var n in t)if(t[n].publicId===e)return new Vi(this,t[n]);return null},e.prototype.addEventSource=function(e){if(e instanceof Vi)return this.state.eventSources[e.internalEventSource.sourceId]||this.dispatch({type:"ADD_EVENT_SOURCES",sources:[e.internalEventSource]}),e;var t=mr(e,this);return t?(this.dispatch({type:"ADD_EVENT_SOURCES",sources:[t]}),new Vi(this,t)):null},e.prototype.removeAllEventSources=function(){this.dispatch({type:"REMOVE_ALL_EVENT_SOURCES"})},e.prototype.refetchEvents=function(){this.dispatch({type:"FETCH_EVENT_SOURCES"})},e.prototype.scrollToTime=function(e){var t=ue(e);t&&this.component.view.scrollToTime(t)},e}();Ki.mixInto(Wo);var Zo=function(e){function n(n,r,i,o){var a=e.call(this,n,t("div",{className:"fc-view fc-"+r.type+"-view"}),!0)||this;return a.renderDatesMem=An(a.renderDatesWrap,a.unrenderDatesWrap),a.renderBusinessHoursMem=An(a.renderBusinessHours,a.unrenderBusinessHours,[a.renderDatesMem]),a.renderDateSelectionMem=An(a.renderDateSelectionWrap,a.unrenderDateSelectionWrap,[a.renderDatesMem]),a.renderEventsMem=An(a.renderEvents,a.unrenderEvents,[a.renderDatesMem]),a.renderEventSelectionMem=An(a.renderEventSelectionWrap,a.unrenderEventSelectionWrap,[a.renderEventsMem]),a.renderEventDragMem=An(a.renderEventDragWrap,a.unrenderEventDragWrap,[a.renderDatesMem]),a.renderEventResizeMem=An(a.renderEventResizeWrap,a.unrenderEventResizeWrap,[a.renderDatesMem]),a.viewSpec=r,a.dateProfileGenerator=i,a.type=r.type,a.eventOrderSpecs=Ue(a.opt("eventOrder")),a.nextDayThreshold=ue(a.opt("nextDayThreshold")),o.appendChild(a.el),a.initialize(),a}return et(n,e),n.prototype.initialize=function(){},Object.defineProperty(n.prototype,"activeStart",{get:function(){return this.dateEnv.toDate(this.props.dateProfile.activeRange.start)},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"activeEnd",{get:function(){return this.dateEnv.toDate(this.props.dateProfile.activeRange.end)},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"currentStart",{get:function(){return this.dateEnv.toDate(this.props.dateProfile.currentRange.start)},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"currentEnd",{get:function(){return this.dateEnv.toDate(this.props.dateProfile.currentRange.end)},enumerable:!0,configurable:!0}),n.prototype.render=function(e){this.renderDatesMem(e.dateProfile),this.renderBusinessHoursMem(e.businessHours),this.renderDateSelectionMem(e.dateSelection),this.renderEventsMem(e.eventStore),this.renderEventSelectionMem(e.eventSelection),this.renderEventDragMem(e.eventDrag),this.renderEventResizeMem(e.eventResize)},n.prototype.destroy=function(){e.prototype.destroy.call(this),this.renderDatesMem.unrender()},n.prototype.updateSize=function(e,t,n){var r=this.calendar;(e||r.isViewUpdated||r.isDatesUpdated||r.isEventsUpdated)&&this.updateBaseSize(e,t,n)},n.prototype.updateBaseSize=function(e,t,n){},n.prototype.renderDatesWrap=function(e){this.renderDates(e),this.addScroll({timeMs:ue(this.opt("scrollTime")).milliseconds}),this.startNowIndicator(e)},n.prototype.unrenderDatesWrap=function(){this.stopNowIndicator(),this.unrenderDates()},n.prototype.renderDates=function(e){},n.prototype.unrenderDates=function(){},n.prototype.renderBusinessHours=function(e){},n.prototype.unrenderBusinessHours=function(){},n.prototype.renderDateSelectionWrap=function(e){e&&this.renderDateSelection(e)},n.prototype.unrenderDateSelectionWrap=function(e){e&&this.unrenderDateSelection(e)},n.prototype.renderDateSelection=function(e){},n.prototype.unrenderDateSelection=function(e){},n.prototype.renderEvents=function(e){},n.prototype.unrenderEvents=function(){},n.prototype.sliceEvents=function(e,t){var n=this.props;return Yt(e,n.eventUiBases,n.dateProfile.activeRange,t?this.nextDayThreshold:null).fg},n.prototype.renderEventSelectionWrap=function(e){e&&this.renderEventSelection(e)},n.prototype.unrenderEventSelectionWrap=function(e){e&&this.unrenderEventSelection(e)},n.prototype.renderEventSelection=function(e){},n.prototype.unrenderEventSelection=function(e){},n.prototype.renderEventDragWrap=function(e){e&&this.renderEventDrag(e)},n.prototype.unrenderEventDragWrap=function(e){e&&this.unrenderEventDrag(e)},n.prototype.renderEventDrag=function(e){},n.prototype.unrenderEventDrag=function(e){},n.prototype.renderEventResizeWrap=function(e){e&&this.renderEventResize(e)},n.prototype.unrenderEventResizeWrap=function(e){e&&this.unrenderEventResize(e)},n.prototype.renderEventResize=function(e){},n.prototype.unrenderEventResize=function(e){},n.prototype.startNowIndicator=function(e){var t,n,r,i=this,o=this.dateEnv;this.opt("nowIndicator")&&(t=this.getNowIndicatorUnit(e))&&(n=this.updateNowIndicator.bind(this),this.initialNowDate=this.calendar.getNow(),this.initialNowQueriedMs=(new Date).valueOf(),r=o.add(o.startOf(this.initialNowDate,t),ue(1,t)).valueOf()-this.initialNowDate.valueOf(),this.nowIndicatorTimeoutID=setTimeout(function(){i.nowIndicatorTimeoutID=null,n(),r="second"===t?1e3:6e4,i.nowIndicatorIntervalID=setInterval(n,r)},r))},n.prototype.updateNowIndicator=function(){this.props.dateProfile&&this.initialNowDate&&(this.unrenderNowIndicator(),this.renderNowIndicator(V(this.initialNowDate,(new Date).valueOf()-this.initialNowQueriedMs)),this.isNowIndicatorRendered=!0)},n.prototype.stopNowIndicator=function(){this.isNowIndicatorRendered&&(this.nowIndicatorTimeoutID&&(clearTimeout(this.nowIndicatorTimeoutID),this.nowIndicatorTimeoutID=null),this.nowIndicatorIntervalID&&(clearInterval(this.nowIndicatorIntervalID),this.nowIndicatorIntervalID=null),this.unrenderNowIndicator(),this.isNowIndicatorRendered=!1)},n.prototype.getNowIndicatorUnit=function(e){},n.prototype.renderNowIndicator=function(e){},n.prototype.unrenderNowIndicator=function(){},n.prototype.addScroll=function(e){var t=this.queuedScroll||(this.queuedScroll={});ki(t,e)},n.prototype.popScroll=function(e){this.applyQueuedScroll(e),this.queuedScroll=null},n.prototype.applyQueuedScroll=function(e){this.applyScroll(this.queuedScroll||{},e)},n.prototype.queryScroll=function(){var e={};return this.props.dateProfile&&ki(e,this.queryDateScroll()),e},n.prototype.applyScroll=function(e,t){var n=e.timeMs;null!=n&&(delete e.timeMs,this.props.dateProfile&&ki(e,this.computeDateScroll(n))),this.props.dateProfile&&this.applyDateScroll(e)},n.prototype.computeDateScroll=function(e){return{}},n.prototype.queryDateScroll=function(){return{}},n.prototype.applyDateScroll=function(e){},n.prototype.scrollToTime=function(e){this.applyScroll({timeMs:e.milliseconds},!1)},n}(ao);Ki.mixInto(Zo),Zo.prototype.usesMinMaxTime=!1,Zo.prototype.dateProfileGeneratorClass=Ho;var jo=function(){function e(e){this.segs=[],this.isSizeDirty=!1,this.context=e}return e.prototype.renderSegs=function(e,t){this.rangeUpdated(),e=this.renderSegEls(e,t),this.segs=e,this.attachSegs(e,t),this.isSizeDirty=!0,this.context.view.triggerRenderedSegs(this.segs,Boolean(t))},e.prototype.unrender=function(e,t){this.context.view.triggerWillRemoveSegs(this.segs,Boolean(t)),this.detachSegs(this.segs),this.segs=[]},e.prototype.rangeUpdated=function(){var e,t,n=this.context.options;this.eventTimeFormat=Vt(n.eventTimeFormat||this.computeEventTimeFormat(),n.defaultRangeSeparator),e=n.displayEventTime,null==e&&(e=this.computeDisplayEventTime()),t=n.displayEventEnd,null==t&&(t=this.computeDisplayEventEnd()),this.displayEventTime=e,this.displayEventEnd=t},e.prototype.renderSegEls=function(e,t){var n,i="";if(e.length){for(n=0;n<e.length;n++)i+=this.renderSegHtml(e[n],t);r(i).forEach(function(t,n){var r=e[n];t&&(r.el=t)}),e=Gt(this.context.view,e,Boolean(t))}return e},e.prototype.getSegClasses=function(e,t,n,r){var i=["fc-event",e.isStart?"fc-start":"fc-not-start",e.isEnd?"fc-end":"fc-not-end"].concat(e.eventRange.ui.classNames);return t&&i.push("fc-draggable"),n&&i.push("fc-resizable"),r&&(i.push("fc-mirror"),r.isDragging&&i.push("fc-dragging"),r.isResizing&&i.push("fc-resizing")),i},e.prototype.getTimeText=function(e,t,n){var r=e.def,i=e.instance;return this._getTimeText(i.range.start,r.hasEnd?i.range.end:null,r.allDay,t,n,i.forcedStartTzo,i.forcedEndTzo)},e.prototype._getTimeText=function(e,t,n,r,i,o,a){var s=this.context.dateEnv;return null==r&&(r=this.eventTimeFormat),null==i&&(i=this.displayEventEnd),this.displayEventTime&&!n?i&&t?s.formatRange(e,t,r,{forcedStartTzo:o,forcedEndTzo:a}):s.format(e,r,{forcedTzo:o}):""},e.prototype.computeEventTimeFormat=function(){return{hour:"numeric",minute:"2-digit",omitZeroMinute:!0}},e.prototype.computeDisplayEventTime=function(){return!0},e.prototype.computeDisplayEventEnd=function(){return!0},e.prototype.getSkinCss=function(e){return{"background-color":e.backgroundColor,"border-color":e.borderColor,color:e.textColor}},e.prototype.sortEventSegs=function(e){var t=this.context.view.eventOrderSpecs,n=e.map(ci);return n.sort(function(e,n){return Le(e,n,t)}),n.map(function(e){return e._seg})},e.prototype.computeSizes=function(e){(e||this.isSizeDirty)&&this.computeSegSizes(this.segs)},e.prototype.assignSizes=function(e){(e||this.isSizeDirty)&&(this.assignSegSizes(this.segs),this.isSizeDirty=!1)},e.prototype.computeSegSizes=function(e){},e.prototype.assignSegSizes=function(e){},e.prototype.hideByHash=function(e){if(e)for(var t=0,n=this.segs;t<n.length;t++){var r=n[t];e[r.eventRange.instance.instanceId]&&(r.el.style.visibility="hidden")}},e.prototype.showByHash=function(e){if(e)for(var t=0,n=this.segs;t<n.length;t++){var r=n[t];e[r.eventRange.instance.instanceId]&&(r.el.style.visibility="")}},e.prototype.selectByInstanceId=function(e){if(e)for(var t=0,n=this.segs;t<n.length;t++){var r=n[t],i=r.eventRange.instance;i&&i.instanceId===e&&r.el&&r.el.classList.add("fc-selected")}},e.prototype.unselectByInstanceId=function(e){if(e)for(var t=0,n=this.segs;t<n.length;t++){var r=n[t];r.el&&r.el.classList.remove("fc-selected")}},e}(),Yo=function(){function e(e){this.fillSegTag="div",this.dirtySizeFlags={},this.context=e,this.containerElsByType={},this.segsByType={}}return e.prototype.getSegsByType=function(e){return this.segsByType[e]||[]},e.prototype.renderSegs=function(e,t){var n,r=this.renderSegEls(e,t),i=this.attachSegs(e,r);i&&(n=this.containerElsByType[e]||(this.containerElsByType[e]=[])).push.apply(n,i),this.segsByType[e]=r,"bgEvent"===e&&this.context.view.triggerRenderedSegs(r,!1),this.dirtySizeFlags[e]=!0},e.prototype.unrender=function(e){var t=this.segsByType[e];t&&("bgEvent"===e&&this.context.view.triggerWillRemoveSegs(t,!1),this.detachSegs(e,t))},e.prototype.renderSegEls=function(e,t){var n,i=this,o="";if(t.length){for(n=0;n<t.length;n++)o+=this.renderSegHtml(e,t[n]);r(o).forEach(function(e,n){var r=t[n];e&&(r.el=e)}),"bgEvent"===e&&(t=Gt(this.context.view,t,!1)),t=t.filter(function(e){return f(e.el,i.fillSegTag)})}return t},e.prototype.renderSegHtml=function(e,t){var n=null,r=[];return"highlight"!==e&&"businessHours"!==e&&(n={"background-color":t.eventRange.ui.backgroundColor}),"highlight"!==e&&(r=r.concat(t.eventRange.ui.classNames)),"businessHours"===e?r.push("fc-bgevent"):r.push("fc-"+e.toLowerCase()),"<"+this.fillSegTag+(r.length?' class="'+r.join(" ")+'"':"")+(n?' style="'+Tn(n)+'"':"")+"></"+this.fillSegTag+">"},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}(),qo=function(){function e(e){this.timeZoneName=e}return e}(),Go=function(){function e(e){this.emitter=new Ki}return e.prototype.destroy=function(){},e.prototype.setMirrorIsVisible=function(e){},e.prototype.setMirrorNeedsRevert=function(e){},e.prototype.setAutoScrollEnabled=function(e){},e}(),Xo={startTime:ue,duration:ue,create:Boolean,sourceId:String},Jo={create:!0},Ko=function(e){function t(t,r){var i=e.call(this,t)||this;return r.innerHTML="",r.appendChild(i.el=n('<div class="fc-row '+i.theme.getClass("headerRow")+'"><table class="'+i.theme.getClass("tableGrid")+'"><thead></thead></table></div>')),i.thead=i.el.querySelector("thead"),i}return et(t,e),t.prototype.destroy=function(){c(this.el)},t.prototype.render=function(e){var t=e.dates,n=e.datesRepDistinctDays,r=[];e.renderIntroHtml&&r.push(e.renderIntroHtml());for(var i=Vt(this.opt("columnHeaderFormat")||vi(n,t.length)),o=0,a=t;o<a.length;o++){var s=a[o];r.push(gi(s,e.dateProfile,n,t.length,i,this.context))}this.isRtl&&r.reverse(),this.thead.innerHTML="<tr>"+r.join("")+"</tr>"},t}(oo),Qo=function(){function e(e,t){for(var n=e.start,r=e.end,i=[],o=[],a=-1;n<r;)t.isHiddenDay(n)?i.push(a+.5):(a++,i.push(a),o.push(n)),n=A(n,1);this.dates=o,this.indices=i,this.cnt=o.length}return e.prototype.sliceRange=function(e){var t=this.getDateDayIndex(e.start),n=this.getDateDayIndex(A(e.end,-1)),r=Math.max(0,t),i=Math.min(this.cnt-1,n);return r=Math.ceil(r),i=Math.floor(i),r<=i?{firstIndex:r,lastIndex:i,isStart:t===r,isEnd:n===i}:null},e.prototype.getDateDayIndex=function(e){var t=this.indices,n=Math.floor(F(this.dates[0],e));return n<0?t[0]-1:n>=t.length?t[t.length-1]+1:t[n]},e}(),$o=function(){function e(e,t){var n,r,i,o=e.dates;if(t){for(r=o[0].getUTCDay(),n=1;n<o.length&&o[n].getUTCDay()!==r;n++);i=Math.ceil(o.length/n)}else i=1,n=o.length;this.rowCnt=i,this.colCnt=n,this.daySeries=e,this.cells=this.buildCells(),this.headerDates=this.buildHeaderDates()}return e.prototype.buildCells=function(){for(var e=[],t=0;t<this.rowCnt;t++){for(var n=[],r=0;r<this.colCnt;r++)n.push(this.buildCell(t,r));e.push(n)}return e},e.prototype.buildCell=function(e,t){return{date:this.daySeries.dates[e*this.colCnt+t]}},e.prototype.buildHeaderDates=function(){for(var e=[],t=0;t<this.colCnt;t++)e.push(this.cells[0][t].date);return e},e.prototype.sliceRange=function(e){var t=this.colCnt,n=this.daySeries.sliceRange(e),r=[];if(n)for(var i=n.firstIndex,o=n.lastIndex,a=i;a<=o;){var s=Math.floor(a/t),u=Math.min((s+1)*t,o+1);r.push({row:s,firstCol:a%t,lastCol:(u-1)%t,isStart:n.isStart&&a===i,isEnd:n.isEnd&&u-1===o}),a=u}return r},e}(),ea=function(){function e(){this.sliceBusinessHours=kt(this._sliceBusinessHours),this.sliceDateSelection=kt(this._sliceDateSpan),this.sliceEventStore=kt(this._sliceEventStore),this.sliceEventDrag=kt(this._sliceInteraction),this.sliceEventResize=kt(this._sliceInteraction)}return e.prototype.sliceProps=function(e,t,n,r){for(var i=[],o=4;o<arguments.length;o++)i[o-4]=arguments[o];var a=e.eventUiBases,s=this.sliceEventStore.apply(this,[e.eventStore,a,t,n,r].concat(i));return{dateSelectionSegs:this.sliceDateSelection.apply(this,[e.dateSelection,a,r].concat(i)),businessHourSegs:this.sliceBusinessHours.apply(this,[e.businessHours,t,n,r].concat(i)),fgEventSegs:s.fg,bgEventSegs:s.bg,eventDrag:this.sliceEventDrag.apply(this,[e.eventDrag,a,t,n,r].concat(i)),eventResize:this.sliceEventResize.apply(this,[e.eventResize,a,t,n,r].concat(i)),eventSelection:e.eventSelection}},e.prototype.sliceNowDate=function(e,t){for(var n=[],r=2;r<arguments.length;r++)n[r-2]=arguments[r];return this._sliceDateSpan.apply(this,[{range:{start:e,end:V(e,1)},allDay:!1},{},t].concat(n))},e.prototype._sliceBusinessHours=function(e,t,n,r){for(var i=[],o=4;o<arguments.length;o++)i[o-4]=arguments[o];return e?this._sliceEventStore.apply(this,[ct(e,yi(t,Boolean(n)),r.calendar),{},t,n,r].concat(i)).bg:[]},e.prototype._sliceEventStore=function(e,t,n,r,i){for(var o=[],a=5;a<arguments.length;a++)o[a-5]=arguments[a];if(e){var s=Yt(e,t,yi(n,Boolean(r)),r);return{bg:this.sliceEventRanges(s.bg,i,o),fg:this.sliceEventRanges(s.fg,i,o)}}return{bg:[],fg:[]}},e.prototype._sliceInteraction=function(e,t,n,r,i){for(var o=[],a=5;a<arguments.length;a++)o[a-5]=arguments[a];if(!e)return null;var s=Yt(e.mutatedEvents,t,yi(n,Boolean(r)),r);return{segs:this.sliceEventRanges(s.fg,i,o),affectedInstances:e.affectedEvents.instances,isEvent:e.isEvent,sourceSeg:e.origSeg}},e.prototype._sliceDateSpan=function(e,t,n){for(var r=[],i=3;i<arguments.length;i++)r[i-3]=arguments[i];if(!e)return[];for(var o=jr(e,t,n.calendar),a=this.sliceRange.apply(this,[e.range].concat(r)),s=0,u=a;s<u.length;s++){var l=u[s];l.component=n,l.eventRange=o}return a},e.prototype.sliceEventRanges=function(e,t,n){for(var r=[],i=0,o=e;i<o.length;i++){var a=o[i];r.push.apply(r,this.sliceEventRange(a,t,n))}return r},e.prototype.sliceEventRange=function(e,t,n){for(var r=this.sliceRange.apply(this,[e.range].concat(n)),i=0,o=r;i<o.length;i++){var a=o[i];a.component=t,a.eventRange=e,a.isStart=e.isStart&&a.isStart,a.isEnd=e.isEnd&&a.isEnd}return r},e}();e.Calendar=Wo,e.Component=oo,e.DateComponent=ao,e.DateEnv=ko,e.DateProfileGenerator=Ho,e.DayHeader=Ko,e.DaySeries=Qo,e.DayTable=$o,e.ElementDragging=Go,e.ElementScrollController=eo,e.EmitterMixin=Ki,e.EventApi=Bi,e.FgEventRenderer=jo,e.FillRenderer=Yo,e.Interaction=Lo,e.Mixin=Ji,e.NamedTimeZoneImpl=qo,e.PositionCache=Qi,e.ScrollComponent=no,e.ScrollController=$i,e.Slicer=ea,e.Splitter=Xi,e.Theme=ro,e.View=Zo,e.WindowScrollController=to,e.addDays=A,e.addDurations=he,e.addMs=V,e.addWeeks=L,e.allowContextMenu=ze,e.allowSelection=xe,e.appendToElement=a,e.applyAll=je,e.applyMutationToEventStore=$t,e.applyStyle=g,e.applyStyleProp=y,e.asRoughMinutes=Se,e.asRoughMs=De,e.asRoughSeconds=be,e.buildGotoAnchorHtml=Yn,e.buildSegCompareObj=ci,e.capitaliseFirstLetter=Be,e.combineEventUis=Mn,e.compareByFieldSpec=Ae,e.compareByFieldSpecs=Le,e.compareNumbers=We,e.compensateScroll=Re,e.computeClippingRect=H,e.computeEdges=C,e.computeFallbackHeaderFormat=vi,e.computeHeightAndMargins=_,e.computeInnerRect=M,e.computeRect=k,e.computeVisibleDayRange=Ke,e.config=Eo,e.constrainPoint=b,e.createDuration=ue,e.createElement=t,e.createEmptyEventStore=vt,e.createEventInstance=Pn,e.createFormatter=Vt,e.createPlugin=$n,e.cssToStr=Tn,e.debounce=qe,e.diffDates=$e,e.diffDayAndTime=Y,e.diffDays=F,e.diffPoints=T,e.diffWeeks=B,e.diffWholeDays=G,e.diffWholeWeeks=q,e.disableCursor=Ce,e.distributeHeight=ke,e.elementClosest=d,e.elementMatches=f,e.enableCursor=Me,e.eventTupleToStore=lt,e.filterEventStoreDefs=yt,e.filterHash=it,e.findChildren=h,e.findElements=p,e.flexibleCompare=Ve,e.forceClassName=v,e.formatDate=di,e.formatIsoTimeString=Ft,e.formatRange=fi,e.freezeRaw=Xe,e.getAllDayHtml=qn,e.getClippingParents=P,e.getDayClasses=Gn,e.getElSeg=Jt,e.getRectCenter=D,e.getRelevantEvents=dt,e.globalDefaults=So,e.greatestDurationDenominator=we,e.hasBgRendering=qt,e.htmlEscape=Dn,e.htmlToElement=n,e.insertAfterElement=u,e.interactionSettingsStore=Ao,e.interactionSettingsToStore=ii,e.intersectRanges=bt,e.intersectRects=E,e.isArraysEqual=Mt,e.isDateSpansEqual=Br,e.isInt=Ze,e.isInteractionValid=dn,e.isMultiDayRange=Qe,e.isObjectsSimilar=Fn,e.isPropsValid=hn,e.isSingleDay=pe,e.isValidDate=ae,e.isValuesSimilar=Vn,e.listenBySelector=N,e.mapHash=ot,e.matchCellWidths=_e,e.memoize=kt,e.memoizeOutput=Ot,e.memoizeRendering=An,e.mergeEventStores=gt,e.multiplyDuration=ge,e.padStart=Fe,e.parseBusinessHours=Un,e.parseDragMeta=hi,e.parseEventDef=_n,e.parseFieldSpecs=Ue,e.parseMarker=gr,e.pointInsideRect=m,e.prependToElement=s,e.preventContextMenu=Ne,e.preventDefault=x,e.preventSelection=He,e.processScopedUiProps=Cn,e.rangeContainsMarker=Rt,e.rangeContainsRange=wt,e.rangesEqual=Dt,e.rangesIntersect=Tt,e.refineProps=Ge,e.removeElement=c,e.removeExact=Ct,e.renderDateCell=gi,e.requestJson=tr,e.sliceEventStore=Yt,e.startOfDay=X,e.subtractInnerElHeight=Pe,e.translateRect=S,e.uncompensateScroll=Ie,e.undistributeHeight=Oe,e.unpromisify=Xn,e.version="4.1.0",e.whenTransitionDone=U,e.wholeDivideDurations=Te,Object.defineProperty(e,"__esModule",{value:!0})});
\ No newline at end of file
--- /dev/null
+{
+ "_from": "@fullcalendar/core",
+ "_id": "@fullcalendar/core@4.1.0",
+ "_inBundle": false,
+ "_integrity": "sha512-pyBRbNnppQH5iPnhENrNIkvOxjPdR46o7HMuSx3M+OlGVZLygbb97sKg5XuJx6Bn3hFP0EJXKmA9/GCfeP9PPQ==",
+ "_location": "/@fullcalendar/core",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "tag",
+ "registry": true,
+ "raw": "@fullcalendar/core",
+ "name": "@fullcalendar/core",
+ "escapedName": "@fullcalendar%2fcore",
+ "scope": "@fullcalendar",
+ "rawSpec": "",
+ "saveSpec": null,
+ "fetchSpec": "latest"
+ },
+ "_requiredBy": [
+ "#USER",
+ "/"
+ ],
+ "_resolved": "https://registry.npmjs.org/@fullcalendar/core/-/core-4.1.0.tgz",
+ "_shasum": "9f09c4c35e308a81a97e4d62c05f64548d0e5666",
+ "_spec": "@fullcalendar/core",
+ "_where": "C:\\Users\\ksaff\\Workspace\\Websites\\fullcalendar",
+ "author": {
+ "name": "Adam Shaw",
+ "email": "arshaw@arshaw.com",
+ "url": "http://arshaw.com/"
+ },
+ "bugs": {
+ "url": "https://fullcalendar.io/reporting-bugs"
+ },
+ "bundleDependencies": false,
+ "copyright": "2019 Adam Shaw",
+ "deprecated": false,
+ "description": "Provides core functionality, including the Calendar class",
+ "docs": "https://fullcalendar.io/docs/initialize-es6",
+ "homepage": "https://fullcalendar.io/",
+ "keywords": [
+ "calendar",
+ "event",
+ "full-sized"
+ ],
+ "license": "MIT",
+ "main": "main.js",
+ "name": "@fullcalendar/core",
+ "releaseDate": "2019-04-24",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/fullcalendar/fullcalendar.git",
+ "homepage": "https://github.com/fullcalendar/fullcalendar"
+ },
+ "title": "FullCalendar Core Package",
+ "types": "main.d.ts",
+ "unpkg": "main.min.js",
+ "version": "4.1.0"
+}
--- /dev/null
+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.
--- /dev/null
+
+# FullCalendar Day Grid Plugin
+
+Display events on Month view or DayGrid view
+
+[View the docs »](https://fullcalendar.io/docs/month-view)
+
+This package was created from the [FullCalendar monorepo »](https://github.com/fullcalendar/fullcalendar)
--- /dev/null
+/*!
+FullCalendar Day Grid Plugin v4.1.0
+Docs & License: https://fullcalendar.io/
+(c) 2019 Adam Shaw
+*/
+/* DayGridView
+--------------------------------------------------------------------------------------------------*/
+/* day row structure */
+.fc-dayGridWeek-view .fc-content-skeleton,
+.fc-dayGridDay-view .fc-content-skeleton {
+ /* there may be week numbers in these views, so no padding-top */
+ padding-bottom: 1em;
+ /* ensure a space at bottom of cell for user selecting/clicking */ }
+
+.fc-dayGrid-view .fc-body .fc-row {
+ min-height: 4em;
+ /* ensure that all rows are at least this tall */ }
+
+/* a "rigid" row will take up a constant amount of height because content-skeleton is absolute */
+.fc-row.fc-rigid {
+ overflow: hidden; }
+
+.fc-row.fc-rigid .fc-content-skeleton {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0; }
+
+/* week and day number styling */
+.fc-day-top.fc-other-month {
+ opacity: 0.3; }
+
+.fc-dayGrid-view .fc-week-number,
+.fc-dayGrid-view .fc-day-number {
+ padding: 2px; }
+
+.fc-dayGrid-view th.fc-week-number,
+.fc-dayGrid-view th.fc-day-number {
+ padding: 0 2px;
+ /* column headers can't have as much v space */ }
+
+.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 0; }
+
+.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: #808080; }
+
+/* when week/day number have own column */
+.fc-dayGrid-view td.fc-week-number {
+ text-align: center; }
+
+.fc-dayGrid-view td.fc-week-number > * {
+ /* work around the way we do column resizing and ensure a minimum width */
+ display: inline-block;
+ min-width: 1.25em; }
--- /dev/null
+declare module "@fullcalendar/daygrid/DayGridDateProfileGenerator" {
+ import { DateProfileGenerator, DateRange } from "@fullcalendar/core";
+ export { DayGridDateProfileGenerator as default, DayGridDateProfileGenerator };
+ class DayGridDateProfileGenerator extends DateProfileGenerator {
+ buildRenderRange(currentRange: any, currentRangeUnit: any, isRangeAllDay: any): DateRange;
+ }
+}
+
+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/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;
+ }
+}
+
+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/DayGridMirrorRenderer" {
+ import { Seg } from "@fullcalendar/core";
+ import DayGridEventRenderer from "@fullcalendar/daygrid/DayGridEventRenderer";
+ export { DayGridMirrorRenderer as default, DayGridMirrorRenderer };
+ class DayGridMirrorRenderer extends DayGridEventRenderer {
+ attachSegs(segs: Seg[], mirrorInfo: any): void;
+ }
+}
+
+declare module "@fullcalendar/daygrid/DayGridFillRenderer" {
+ import { FillRenderer, Seg } from "@fullcalendar/core";
+ import DayGrid, { DayGridSeg } from "@fullcalendar/daygrid/DayGrid";
+ export { DayGridFillRenderer as default, DayGridFillRenderer };
+ class DayGridFillRenderer extends FillRenderer {
+ fillSegTag: string;
+ dayGrid: DayGrid;
+ constructor(dayGrid: DayGrid);
+ renderSegs(type: string, segs: DayGridSeg[]): void;
+ attachSegs(type: any, segs: Seg[]): any[];
+ renderFillRow(type: any, seg: Seg): HTMLElement;
+ }
+}
+
+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<DayTileProps> {
+ segContainerEl: HTMLElement;
+ private renderFrame;
+ private renderFgEvents;
+ private renderEventSelection;
+ private renderEventDrag;
+ private renderEventResize;
+ constructor(context: ComponentContext, el: HTMLElement);
+ render(props: DayTileProps): 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/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/DayGrid" {
+ import { PositionCache, DateMarker, DateComponent, EventSegUiInteractionState, Seg, DateProfile } 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<DayGridProps> {
+ eventRenderer: DayGridEventRenderer;
+ renderProps: RenderProps;
+ rowCnt: number;
+ colCnt: number;
+ bottomCoordPadding: number;
+ rowEls: HTMLElement[];
+ cellEls: HTMLElement[];
+ isCellSizesDirty: boolean;
+ rowPositions: PositionCache;
+ colPositions: PositionCache;
+ segPopover: Popover;
+ segPopoverTile: DayTile;
+ private renderCells;
+ private renderBusinessHours;
+ private renderDateSelection;
+ private renderBgEvents;
+ private renderFgEvents;
+ private renderEventSelection;
+ private renderEventDrag;
+ private renderEventResize;
+ constructor(context: any, el: any, renderProps: RenderProps);
+ render(props: DayGridProps): 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, ComponentContext, ViewSpec, DateProfileGenerator } from "@fullcalendar/core";
+ import DayGrid from "@fullcalendar/daygrid/DayGrid";
+ export { DayGridView as default, DayGridView };
+ abstract class DayGridView extends View {
+ scroller: ScrollComponent;
+ dayGrid: DayGrid;
+ colWeekNumbersVisible: boolean;
+ weekNumberWidth: number;
+ constructor(context: ComponentContext, viewSpec: ViewSpec, dateProfileGenerator: DateProfileGenerator, parentEl: HTMLElement);
+ destroy(): 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(timeMs: number): {
+ 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/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<SimpleDayGridProps> {
+ dayGrid: DayGrid;
+ private slicer;
+ constructor(context: ComponentContext, dayGrid: DayGrid);
+ destroy(): void;
+ render(props: SimpleDayGridProps): void;
+ buildPositionCaches(): void;
+ queryHit(positionLeft: number, positionTop: number): Hit;
+ }
+ export class DayGridSlicer extends Slicer<DayGridSeg, [DayTable]> {
+ sliceRange(dateRange: DateRange, dayTable: DayTable): DayGridSeg[];
+ }
+}
+
+declare module "@fullcalendar/daygrid/DayGridView" {
+ import { DayHeader, ComponentContext, ViewSpec, 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;
+ private buildDayTable;
+ constructor(_context: ComponentContext, viewSpec: ViewSpec, dateProfileGenerator: DateProfileGenerator, parentEl: HTMLElement);
+ destroy(): void;
+ render(props: ViewProps): void;
+ }
+ export function buildDayTable(dateProfile: DateProfile, dateProfileGenerator: DateProfileGenerator): DayTable;
+}
+
+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_6: import("@fullcalendar/core/plugin-system").PluginDef;
+ export default _default_6;
+}
\ No newline at end of file
--- /dev/null
+/*!
+FullCalendar Day Grid Plugin v4.1.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 options = this.context.options;
+ var eventRange = seg.eventRange;
+ var eventDef = eventRange.def;
+ var eventUi = eventRange.ui;
+ var allDay = eventDef.allDay;
+ var isDraggable = eventUi.startEditable;
+ var isResizableFromStart = allDay && seg.isStart && eventUi.durationEditable && options.eventResizableFromStart;
+ var isResizableFromEnd = allDay && seg.isEnd && eventUi.durationEditable;
+ 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 = '<span class="fc-time">' + core.htmlEscape(timeText) + '</span>';
+ }
+ }
+ titleHtml =
+ '<span class="fc-title">' +
+ (core.htmlEscape(eventDef.title || '') || ' ') + // we always want one line of height
+ '</span>';
+ return '<a class="' + classes.join(' ') + '"' +
+ (eventDef.url ?
+ ' href="' + core.htmlEscape(eventDef.url) + '"' :
+ '') +
+ (skinCss ?
+ ' style="' + skinCss + '"' :
+ '') +
+ '>' +
+ '<div class="fc-content">' +
+ (options.dir === 'rtl' ?
+ titleHtml + ' ' + timeHtml : // put a natural space in between
+ timeHtml + ' ' + titleHtml //
+ ) +
+ '</div>' +
+ (isResizableFromStart ?
+ '<div class="fc-resizer fc-start-resizer"></div>' :
+ '') +
+ (isResizableFromEnd ?
+ '<div class="fc-resizer fc-end-resizer"></div>' :
+ '') +
+ '</a>';
+ };
+ // 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, dayGrid.context) || 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 <tbody> 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 <tbody> 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 dayGrid = this.dayGrid;
+ var colCnt = dayGrid.colCnt, isRtl = dayGrid.isRtl;
+ 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 <td> elements of the level+col matrix
+ var loneCellMatrix = []; // lookup for <td> 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 (dayGrid.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 _a = this.dayGrid, isRtl = _a.isRtl, colCnt = _a.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('<div class="fc-mirror-skeleton"><table></table></div>'); // 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 DayGridFillRenderer = /** @class */ (function (_super) {
+ __extends(DayGridFillRenderer, _super);
+ function DayGridFillRenderer(dayGrid) {
+ var _this = _super.call(this, dayGrid.context) || this;
+ _this.fillSegTag = 'td'; // override the default tag name
+ _this.dayGrid = dayGrid;
+ return _this;
+ }
+ DayGridFillRenderer.prototype.renderSegs = function (type, 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, 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 colCnt = dayGrid.colCnt, isRtl = dayGrid.isRtl;
+ 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('<div class="fc-' + className + '-skeleton">' +
+ '<table><tr></tr></table>' +
+ '</div>');
+ trEl = skeletonEl.getElementsByTagName('tr')[0];
+ if (startCol > 0) {
+ core.appendToElement(trEl,
+ // will create (startCol + 1) td's
+ new Array(startCol + 1).join('<td></td>'));
+ }
+ 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('<td></td>'));
+ }
+ var introHtml = dayGrid.renderProps.renderIntroHtml();
+ if (introHtml) {
+ if (dayGrid.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(context, el) {
+ var _this = _super.call(this, context, 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]);
+ context.calendar.registerInteractiveComponent(_this, {
+ el: _this.el,
+ useEventCenter: false
+ });
+ return _this;
+ }
+ DayTile.prototype.render = function (props) {
+ this.renderFrame(props.date);
+ this.renderFgEvents(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.calendar.unregisterInteractiveComponent(this);
+ };
+ DayTile.prototype._renderFrame = function (date) {
+ var _a = this, theme = _a.theme, dateEnv = _a.dateEnv;
+ var title = dateEnv.format(date, core.createFormatter(this.opt('dayPopoverFormat')) // TODO: cache
+ );
+ this.el.innerHTML =
+ '<div class="fc-header ' + theme.getClass('popoverHeader') + '">' +
+ '<span class="fc-title">' +
+ core.htmlEscape(title) +
+ '</span>' +
+ '<span class="fc-close ' + theme.getIconClass('close') + '"></span>' +
+ '</div>' +
+ '<div class="fc-body ' + theme.getClass('popoverContent') + '">' +
+ '<div class="fc-event-container"></div>' +
+ '</div>';
+ 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, dayTile.context) || 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('<td class="fc-day ' + this.context.theme.getClass('widgetContent') + '"></td>');
+ }
+ if (this.context.options.dir === 'rtl') {
+ parts.reverse();
+ }
+ return '<tr>' + parts.join('') + '</tr>';
+ };
+ 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 '<td class="' + classes.join(' ') + '"' +
+ (isDateValid ?
+ ' data-date="' + dateEnv.formatIso(date, { omitTime: true }) + '"' :
+ '') +
+ (otherAttrs ?
+ ' ' + otherAttrs :
+ '') +
+ '></td>';
+ }
+
+ 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(context, el, renderProps) {
+ var _this = _super.call(this, context, el) || this;
+ _this.bottomCoordPadding = 0; // hack for extending the hit area for the last row of the coordinate grid
+ _this.isCellSizesDirty = false;
+ 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]);
+ _this.renderProps = renderProps;
+ return _this;
+ }
+ DayGrid.prototype.render = function (props) {
+ var cells = props.cells;
+ this.rowCnt = cells.length;
+ this.colCnt = cells[0].length;
+ this.renderCells(cells, props.isRigid);
+ this.renderBusinessHours(props.businessHourSegs);
+ this.renderDateSelection(props.dateSelectionSegs);
+ this.renderBgEvents(props.bgEventSegs);
+ this.renderFgEvents(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
+ });
+ };
+ /* Date Rendering
+ ------------------------------------------------------------------------------------------------------------------*/
+ DayGrid.prototype._renderCells = function (cells, isRigid) {
+ var _a = this, view = _a.view, 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 (this.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++) {
+ this.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.theme;
+ var classes = ['fc-row', 'fc-week', theme.getClass('dayRow')];
+ if (isRigid) {
+ classes.push('fc-rigid');
+ }
+ var bgRow = new DayBgRow(this.context);
+ return '' +
+ '<div class="' + classes.join(' ') + '">' +
+ '<div class="fc-bg">' +
+ '<table class="' + theme.getClass('tableGrid') + '">' +
+ bgRow.renderHtml({
+ cells: this.props.cells[row],
+ dateProfile: this.props.dateProfile,
+ renderIntroHtml: this.renderProps.renderBgIntroHtml
+ }) +
+ '</table>' +
+ '</div>' +
+ '<div class="fc-content-skeleton">' +
+ '<table>' +
+ (this.getIsNumbersVisible() ?
+ '<thead>' +
+ this.renderNumberTrHtml(row) +
+ '</thead>' :
+ '') +
+ '</table>' +
+ '</div>' +
+ '</div>';
+ };
+ 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 intro = this.renderProps.renderNumberIntroHtml(row, this);
+ return '' +
+ '<tr>' +
+ (this.isRtl ? '' : intro) +
+ this.renderNumberCellsHtml(row) +
+ (this.isRtl ? intro : '') +
+ '</tr>';
+ };
+ 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.isRtl) {
+ htmls.reverse();
+ }
+ return htmls.join('');
+ };
+ // Generates the HTML for the <td>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, view = _a.view, dateEnv = _a.dateEnv;
+ 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 '<td></td>'; // 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 += '<td class="' + classes.join(' ') + '"' +
+ (isDateValid ?
+ ' data-date="' + dateEnv.formatIso(date, { omitTime: true }) + '"' :
+ '') +
+ '>';
+ if (this.renderProps.cellWeekNumbersVisible && (date.getUTCDay() === weekCalcFirstDow)) {
+ html += core.buildGotoAnchorHtml(view, { date: date, type: 'week' }, { 'class': 'fc-week-number' }, dateEnv.format(date, WEEK_NUM_FORMAT) // inner HTML
+ );
+ }
+ if (isDayNumberVisible) {
+ html += core.buildGotoAnchorHtml(view, date, { 'class': 'fc-day-number' }, dateEnv.format(date, DAY_NUM_FORMAT) // inner HTML
+ );
+ }
+ html += '</td>';
+ return html;
+ };
+ /* Sizing
+ ------------------------------------------------------------------------------------------------------------------*/
+ DayGrid.prototype.updateSize = function (isResize) {
+ var _a = this, fillRenderer = _a.fillRenderer, eventRenderer = _a.eventRenderer, mirrorRenderer = _a.mirrorRenderer;
+ if (isResize ||
+ this.isCellSizesDirty ||
+ this.view.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', state.segs);
+ }
+ };
+ DayGrid.prototype._unrenderEventDrag = function (state) {
+ if (state) {
+ this.eventRenderer.showByHash(state.affectedInstances);
+ this.fillRenderer.unrender('highlight');
+ }
+ };
+ /* Event Resize Visualization
+ ------------------------------------------------------------------------------------------------------------------*/
+ DayGrid.prototype._renderEventResize = function (state) {
+ if (state) {
+ this.eventRenderer.hideByHash(state.affectedInstances);
+ this.fillRenderer.renderSegs('highlight', state.segs);
+ this.mirrorRenderer.renderSegs(state.segs, { isResizing: true, sourceSeg: state.sourceSeg });
+ }
+ };
+ DayGrid.prototype._unrenderEventResize = function (state) {
+ if (state) {
+ this.eventRenderer.showByHash(state.affectedInstances);
+ this.fillRenderer.unrender('highlight');
+ this.mirrorRenderer.unrender(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 <tr> 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 _a = this, colCnt = _a.colCnt, isRtl = _a.isRtl;
+ var rowStruct = this.eventRenderer.rowStructs[row];
+ var moreNodes = []; // array of "more" <a> links and <td> 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 <td> elements in the row
+ var limitedNodes; // array of temporarily hidden level <tr> and segment <td> 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" <td> 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 <tr> 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 <td> 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 <a> 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, view = _a.view, dateEnv = _a.dateEnv;
+ var a = core.createElement('a', { className: 'fc-more' });
+ a.innerText = this.getMoreLinkText(hiddenSegs.length);
+ a.addEventListener('click', function (ev) {
+ var clickOption = _this.opt('eventLimitClick');
+ var _col = _this.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 = _this.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
+ view.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, calendar = _a.calendar, view = _a.view, theme = _a.theme;
+ var _col = this.isRtl ? this.colCnt - col - 1 : col; // HACK: props.cells has different dir system?
+ var moreWrap = moreLink.parentNode; // the <div> wrapper around the <a>
+ 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(_this.context, 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 <td> to avoid border confusion.
+ if (this.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.opt('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 DayGridView = /** @class */ (function (_super) {
+ __extends(DayGridView, _super);
+ function DayGridView(context, viewSpec, dateProfileGenerator, parentEl) {
+ var _this = _super.call(this, context, viewSpec, dateProfileGenerator, parentEl) || this;
+ /* Header Rendering
+ ------------------------------------------------------------------------------------------------------------------*/
+ // Generates the HTML that will go before the day-of week header cells
+ _this.renderHeadIntroHtml = function () {
+ var theme = _this.theme;
+ if (_this.colWeekNumbersVisible) {
+ return '' +
+ '<th class="fc-week-number ' + theme.getClass('widgetHeader') + '" ' + _this.weekNumberStyleAttr() + '>' +
+ '<span>' + // needed for matchCellWidths
+ core.htmlEscape(_this.opt('weekLabel')) +
+ '</span>' +
+ '</th>';
+ }
+ 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 dateEnv = _this.dateEnv;
+ var weekStart = dayGrid.props.cells[row][0].date;
+ if (_this.colWeekNumbersVisible) {
+ return '' +
+ '<td class="fc-week-number" ' + _this.weekNumberStyleAttr() + '>' +
+ core.buildGotoAnchorHtml(// aside from link, important for matchCellWidths
+ _this, { date: weekStart, type: 'week', forceOff: dayGrid.colCnt === 1 }, dateEnv.format(weekStart, WEEK_NUM_FORMAT$1) // inner HTML
+ ) +
+ '</td>';
+ }
+ return '';
+ };
+ // Generates the HTML that goes before the day bg cells for each day-row
+ _this.renderDayGridBgIntroHtml = function () {
+ var theme = _this.theme;
+ if (_this.colWeekNumbersVisible) {
+ return '<td class="fc-week-number ' + theme.getClass('widgetContent') + '" ' + _this.weekNumberStyleAttr() + '></td>';
+ }
+ 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 '<td class="fc-week-number" ' + _this.weekNumberStyleAttr() + '></td>';
+ }
+ return '';
+ };
+ _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);
+ var cellWeekNumbersVisible;
+ if (_this.opt('weekNumbers')) {
+ if (_this.opt('weekNumbersWithinDays')) {
+ cellWeekNumbersVisible = true;
+ _this.colWeekNumbersVisible = false;
+ }
+ else {
+ cellWeekNumbersVisible = false;
+ _this.colWeekNumbersVisible = true;
+ }
+ }
+ else {
+ _this.colWeekNumbersVisible = false;
+ cellWeekNumbersVisible = false;
+ }
+ _this.dayGrid = new DayGrid(_this.context, dayGridEl, {
+ renderNumberIntroHtml: _this.renderDayGridNumberIntroHtml,
+ renderBgIntroHtml: _this.renderDayGridBgIntroHtml,
+ renderIntroHtml: _this.renderDayGridIntroHtml,
+ colWeekNumbersVisible: _this.colWeekNumbersVisible,
+ cellWeekNumbersVisible: cellWeekNumbersVisible
+ });
+ return _this;
+ }
+ DayGridView.prototype.destroy = function () {
+ _super.prototype.destroy.call(this);
+ 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.
+ DayGridView.prototype.renderSkeletonHtml = function () {
+ var theme = this.theme;
+ return '' +
+ '<table class="' + theme.getClass('tableGrid') + '">' +
+ (this.opt('columnHeader') ?
+ '<thead class="fc-head">' +
+ '<tr>' +
+ '<td class="fc-head-container ' + theme.getClass('widgetHeader') + '"> </td>' +
+ '</tr>' +
+ '</thead>' :
+ '') +
+ '<tbody class="fc-body">' +
+ '<tr>' +
+ '<td class="' + theme.getClass('widgetContent') + '"></td>' +
+ '</tr>' +
+ '</tbody>' +
+ '</table>';
+ };
+ // Generates an HTML attribute string for setting the width of the week number column, if it is known
+ DayGridView.prototype.weekNumberStyleAttr = function () {
+ if (this.weekNumberWidth != null) {
+ return 'style="width:' + this.weekNumberWidth + 'px"';
+ }
+ return '';
+ };
+ // Determines whether each row should have a constant height
+ DayGridView.prototype.hasRigidRows = function () {
+ var eventLimit = this.opt('eventLimit');
+ return eventLimit && typeof eventLimit !== 'number';
+ };
+ /* Dimensions
+ ------------------------------------------------------------------------------------------------------------------*/
+ DayGridView.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
+ DayGridView.prototype.updateBaseSize = function (isResize, viewHeight, isAuto) {
+ var dayGrid = this.dayGrid;
+ var eventLimit = this.opt('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
+ DayGridView.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
+ DayGridView.prototype.setGridHeight = function (height, isAuto) {
+ if (this.opt('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
+ ------------------------------------------------------------------------------------------------------------------*/
+ DayGridView.prototype.computeDateScroll = function (timeMs) {
+ return { top: 0 };
+ };
+ DayGridView.prototype.queryDateScroll = function () {
+ return { top: this.scroller.getScrollTop() };
+ };
+ DayGridView.prototype.applyDateScroll = function (scroll) {
+ if (scroll.top !== undefined) {
+ this.scroller.setScrollTop(scroll.top);
+ }
+ };
+ return DayGridView;
+ }(core.View));
+ DayGridView.prototype.dateProfileGeneratorClass = DayGridDateProfileGenerator;
+
+ var SimpleDayGrid = /** @class */ (function (_super) {
+ __extends(SimpleDayGrid, _super);
+ function SimpleDayGrid(context, dayGrid) {
+ var _this = _super.call(this, context, dayGrid.el) || this;
+ _this.slicer = new DayGridSlicer();
+ _this.dayGrid = dayGrid;
+ context.calendar.registerInteractiveComponent(_this, { el: _this.dayGrid.el });
+ return _this;
+ }
+ SimpleDayGrid.prototype.destroy = function () {
+ _super.prototype.destroy.call(this);
+ this.calendar.unregisterInteractiveComponent(this);
+ };
+ SimpleDayGrid.prototype.render = function (props) {
+ var dayGrid = this.dayGrid;
+ var dateProfile = props.dateProfile, dayTable = props.dayTable;
+ dayGrid.receiveProps(__assign({}, this.slicer.sliceProps(props, dateProfile, props.nextDayThreshold, dayGrid, dayTable), { dateProfile: dateProfile, cells: dayTable.cells, isRigid: props.isRigid }));
+ };
+ 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$1 = /** @class */ (function (_super) {
+ __extends(DayGridView, _super);
+ function DayGridView(_context, viewSpec, dateProfileGenerator, parentEl) {
+ var _this = _super.call(this, _context, viewSpec, dateProfileGenerator, parentEl) || this;
+ _this.buildDayTable = core.memoize(buildDayTable);
+ if (_this.opt('columnHeader')) {
+ _this.header = new core.DayHeader(_this.context, _this.el.querySelector('.fc-head-container'));
+ }
+ _this.simpleDayGrid = new SimpleDayGrid(_this.context, _this.dayGrid);
+ return _this;
+ }
+ DayGridView.prototype.destroy = function () {
+ _super.prototype.destroy.call(this);
+ if (this.header) {
+ this.header.destroy();
+ }
+ this.simpleDayGrid.destroy();
+ };
+ DayGridView.prototype.render = function (props) {
+ _super.prototype.render.call(this, props);
+ var dateProfile = this.props.dateProfile;
+ var dayTable = this.dayTable =
+ this.buildDayTable(dateProfile, this.dateProfileGenerator);
+ if (this.header) {
+ this.header.receiveProps({
+ dateProfile: dateProfile,
+ dates: dayTable.headerDates,
+ datesRepDistinctDays: dayTable.rowCnt === 1,
+ renderIntroHtml: this.renderHeadIntroHtml
+ });
+ }
+ 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.nextDayThreshold
+ });
+ };
+ return DayGridView;
+ }(DayGridView));
+ 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$1,
+ dayGridDay: {
+ type: 'dayGrid',
+ duration: { days: 1 }
+ },
+ dayGridWeek: {
+ type: 'dayGrid',
+ duration: { weeks: 1 }
+ },
+ dayGridMonth: {
+ type: 'dayGrid',
+ duration: { months: 1 },
+ monthMode: true,
+ fixedWeekCount: true
+ }
+ }
+ });
+
+ exports.AbstractDayGridView = DayGridView;
+ exports.DayBgRow = DayBgRow;
+ exports.DayGrid = DayGrid;
+ exports.DayGridSlicer = DayGridSlicer;
+ exports.DayGridView = DayGridView$1;
+ exports.SimpleDayGrid = SimpleDayGrid;
+ exports.buildBasicDayTable = buildDayTable;
+ exports.default = main;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+}));
--- /dev/null
+/*!
+FullCalendar Day Grid Plugin v4.1.0
+Docs & License: https://fullcalendar.io/
+(c) 2019 Adam Shaw
+*/.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
--- /dev/null
+/*!
+FullCalendar Day Grid Plugin v4.1.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):(e=e||self,t(e.FullCalendarDayGrid={},e.FullCalendar))}(this,function(e,t){"use strict";function r(e,t){function r(){this.constructor=e}l(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}function n(e,t){var r,n;for(r=0;r<t.length;r++)if(n=t[r],n.firstCol<=e.lastCol&&n.lastCol>=e.firstCol)return!0;return!1}function i(e,t){return e.leftCol-t.leftCol}function o(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")),'<td class="'+a.join(" ")+'"'+(l?' data-date="'+o.formatIso(e,{omitTime:!0})+'"':"")+(i?" "+i:"")+"></td>"}function s(e,r){var n=new t.DaySeries(e.renderRange,r);return new t.DayTable(n,/year|month|week/.test(e.currentRangeUnit))}/*! *****************************************************************************
+ 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 l=function(e,t){return(l=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)},a=function(){return a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++){t=arguments[r];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])}return e},a.apply(this,arguments)},d=function(e){function n(){return null!==e&&e.apply(this,arguments)||this}return r(n,e),n.prototype.buildRenderRange=function(r,n,i){var o,s=this.dateEnv,l=e.prototype.buildRenderRange.call(this,r,n,i),a=l.start,d=l.end;if(/^(year|month)$/.test(n)&&(a=s.startOfWeek(a),o=s.startOfWeek(d),o.valueOf()!==d.valueOf()&&(d=t.addWeeks(o,1))),this.options.monthMode&&this.options.fixedWeekCount){var c=Math.ceil(t.diffWeeks(a,d));d=t.addWeeks(d,6-c)}return{start:a,end:d}},n}(t.DateProfileGenerator),c=function(){function e(e){var t=this;this.isHidden=!0,this.margin=10,this.documentMousedown=function(e){t.el&&!t.el.contains(e.target)&&t.hide()},this.options=e}return e.prototype.show=function(){this.isHidden&&(this.el||this.render(),this.el.style.display="",this.position(),this.isHidden=!1,this.trigger("show"))},e.prototype.hide=function(){this.isHidden||(this.el.style.display="none",this.isHidden=!0,this.trigger("hide"))},e.prototype.render=function(){var e=this,r=this.options,n=this.el=t.createElement("div",{className:"fc-popover "+(r.className||""),style:{top:"0",left:"0"}});"function"==typeof r.content&&r.content(n),r.parentEl.appendChild(n),t.listenBySelector(n,"click",".fc-close",function(t){e.hide()}),r.autoHide&&document.addEventListener("mousedown",this.documentMousedown)},e.prototype.destroy=function(){this.hide(),this.el&&(t.removeElement(this.el),this.el=null),document.removeEventListener("mousedown",this.documentMousedown)},e.prototype.position=function(){var e,r,n=this.options,i=this.el,o=i.getBoundingClientRect(),s=t.computeRect(i.offsetParent),l=t.computeClippingRect(n.parentEl);e=n.top||0,r=void 0!==n.left?n.left:void 0!==n.right?n.right-o.width:0,e=Math.min(e,l.bottom-o.height-this.margin),e=Math.max(e,l.top+this.margin),r=Math.min(r,l.right-o.width-this.margin),r=Math.max(r,l.left+this.margin),t.applyStyle(i,{top:e-s.top,left:r-s.left})},e.prototype.trigger=function(e){this.options[e]&&this.options[e].apply(this,Array.prototype.slice.call(arguments,1))},e}(),h=function(e){function n(){return null!==e&&e.apply(this,arguments)||this}return r(n,e),n.prototype.renderSegHtml=function(e,r){var n,i,o=this.context.options,s=e.eventRange,l=s.def,a=s.ui,d=l.allDay,c=a.startEditable,h=d&&e.isStart&&a.durationEditable&&o.eventResizableFromStart,p=d&&e.isEnd&&a.durationEditable,u=this.getSegClasses(e,c,h||p,r),f=t.cssToStr(this.getSkinCss(a)),g="";return u.unshift("fc-day-grid-event","fc-h-event"),e.isStart&&(n=this.getTimeText(s))&&(g='<span class="fc-time">'+t.htmlEscape(n)+"</span>"),i='<span class="fc-title">'+(t.htmlEscape(l.title||"")||" ")+"</span>",'<a class="'+u.join(" ")+'"'+(l.url?' href="'+t.htmlEscape(l.url)+'"':"")+(f?' style="'+f+'"':"")+'><div class="fc-content">'+("rtl"===o.dir?i+" "+g:g+" "+i)+"</div>"+(h?'<div class="fc-resizer fc-start-resizer"></div>':"")+(p?'<div class="fc-resizer fc-end-resizer"></div>':"")+"</a>"},n.prototype.computeEventTimeFormat=function(){return{hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"narrow"}},n.prototype.computeDisplayEventEnd=function(){return!1},n}(t.FgEventRenderer),p=function(e){function o(t){var r=e.call(this,t.context)||this;return r.dayGrid=t,r}return r(o,e),o.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()},o.prototype.detachSegs=function(){for(var e,r=this.rowStructs||[];e=r.pop();)t.removeElement(e.tbodyEl);this.rowStructs=null},o.prototype.renderSegRows=function(e){var t,r,n=[];for(t=this.groupSegRows(e),r=0;r<t.length;r++)n.push(this.renderSegRow(r,t[r]));return n},o.prototype.renderSegRow=function(e,r){function n(e){for(;s<e;)c=(b[i-1]||[])[s],c?c.rowSpan=(c.rowSpan||1)+1:(c=document.createElement("td"),l.appendChild(c)),v[i][s]=c,b[i][s]=c,s++}var i,o,s,l,a,d,c,h=this.dayGrid,p=h.colCnt,u=h.isRtl,f=this.buildSegLevels(r),g=Math.max(1,f.length),m=document.createElement("tbody"),y=[],v=[],b=[];for(i=0;i<g;i++){if(o=f[i],s=0,l=document.createElement("tr"),y.push([]),v.push([]),b.push([]),o)for(a=0;a<o.length;a++){d=o[a];var w=u?p-1-d.lastCol:d.firstCol,S=u?p-1-d.firstCol:d.lastCol;for(n(w),c=t.createElement("td",{className:"fc-event-container"},d.el),w!==S?c.colSpan=S-w+1:b[i][s]=c;s<=S;)v[i][s]=c,y[i][s]=d,s++;l.appendChild(c)}n(p);var C=h.renderProps.renderIntroHtml();C&&(h.isRtl?t.appendToElement(l,C):t.prependToElement(l,C)),m.appendChild(l)}return{row:e,tbodyEl:m,cellMatrix:v,segMatrix:y,segLevels:f,segs:r}},o.prototype.buildSegLevels=function(e){var t,r,o,s=this.dayGrid,l=s.isRtl,a=s.colCnt,d=[];for(e=this.sortEventSegs(e),t=0;t<e.length;t++){for(r=e[t],o=0;o<d.length&&n(r,d[o]);o++);r.level=o,r.leftCol=l?a-1-r.lastCol:r.firstCol,r.rightCol=l?a-1-r.firstCol:r.lastCol,(d[o]||(d[o]=[])).push(r)}for(o=0;o<d.length;o++)d[o].sort(i);return d},o.prototype.groupSegRows=function(e){var t,r=[];for(t=0;t<this.dayGrid.rowCnt;t++)r.push([]);for(t=0;t<e.length;t++)r[e[t].row].push(e[t]);return r},o.prototype.computeDisplayEventEnd=function(){return 1===this.dayGrid.colCnt},o}(h),u=function(e){function n(){return null!==e&&e.apply(this,arguments)||this}return r(n,e),n.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('<div class="fc-mirror-skeleton"><table></table></div>');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)})},n}(p),f=function(e){function n(t){var r=e.call(this,t.context)||this;return r.fillSegTag="td",r.dayGrid=t,r}return r(n,e),n.prototype.renderSegs=function(t,r){"bgEvent"===t&&(r=r.filter(function(e){return e.eventRange.def.allDay})),e.prototype.renderSegs.call(this,t,r)},n.prototype.attachSegs=function(e,t){var r,n,i,o=[];for(r=0;r<t.length;r++)n=t[r],i=this.renderFillRow(e,n),this.dayGrid.rowEls[n.row].appendChild(i),o.push(i);return o},n.prototype.renderFillRow=function(e,r){var n,i,o,s=this.dayGrid,l=s.colCnt,a=s.isRtl,d=a?l-1-r.lastCol:r.firstCol,c=a?l-1-r.firstCol:r.lastCol,h=d,p=c+1;n="businessHours"===e?"bgevent":e.toLowerCase(),i=t.htmlToElement('<div class="fc-'+n+'-skeleton"><table><tr></tr></table></div>'),o=i.getElementsByTagName("tr")[0],h>0&&t.appendToElement(o,new Array(h+1).join("<td></td>")),r.el.colSpan=p-h,o.appendChild(r.el),p<l&&t.appendToElement(o,new Array(l-p+1).join("<td></td>"));var u=s.renderProps.renderIntroHtml();return u&&(s.isRtl?t.appendToElement(o,u):t.prependToElement(o,u)),i},n}(t.FillRenderer),g=function(e){function n(r,n){var i=e.call(this,r,n)||this,o=i.eventRenderer=new m(i),s=i.renderFrame=t.memoizeRendering(i._renderFrame);return i.renderFgEvents=t.memoizeRendering(o.renderSegs.bind(o),o.unrender.bind(o),[s]),i.renderEventSelection=t.memoizeRendering(o.selectByInstanceId.bind(o),o.unselectByInstanceId.bind(o),[i.renderFgEvents]),i.renderEventDrag=t.memoizeRendering(o.hideByHash.bind(o),o.showByHash.bind(o),[s]),i.renderEventResize=t.memoizeRendering(o.hideByHash.bind(o),o.showByHash.bind(o),[s]),r.calendar.registerInteractiveComponent(i,{el:i.el,useEventCenter:!1}),i}return r(n,e),n.prototype.render=function(e){this.renderFrame(e.date),this.renderFgEvents(e.fgSegs),this.renderEventSelection(e.eventSelection),this.renderEventDrag(e.eventDragInstances),this.renderEventResize(e.eventResizeInstances)},n.prototype.destroy=function(){e.prototype.destroy.call(this),this.renderFrame.unrender(),this.calendar.unregisterInteractiveComponent(this)},n.prototype._renderFrame=function(e){var r=this,n=r.theme,i=r.dateEnv,o=i.format(e,t.createFormatter(this.opt("dayPopoverFormat")));this.el.innerHTML='<div class="fc-header '+n.getClass("popoverHeader")+'"><span class="fc-title">'+t.htmlEscape(o)+'</span><span class="fc-close '+n.getIconClass("close")+'"></span></div><div class="fc-body '+n.getClass("popoverContent")+'"><div class="fc-event-container"></div></div>',this.segContainerEl=this.el.querySelector(".fc-event-container")},n.prototype.queryHit=function(e,r,n,i){var o=this.props.date;if(e<n&&r<i)return{component:this,dateSpan:{allDay:!0,range:{start:o,end:t.addDays(o,1)}},dayEl:this.el,rect:{left:0,top:0,right:n,bottom:i},layer:1}},n}(t.DateComponent),m=function(e){function n(t){var r=e.call(this,t.context)||this;return r.dayTile=t,r}return r(n,e),n.prototype.attachSegs=function(e){for(var t=0,r=e;t<r.length;t++){var n=r[t];this.dayTile.segContainerEl.appendChild(n.el)}},n.prototype.detachSegs=function(e){for(var r=0,n=e;r<n.length;r++){var i=n[r];t.removeElement(i.el)}},n}(h),y=function(){function e(e){this.context=e}return e.prototype.renderHtml=function(e){var t=[];e.renderIntroHtml&&t.push(e.renderIntroHtml());for(var r=0,n=e.cells;r<n.length;r++){var i=n[r];t.push(o(i.date,e.dateProfile,this.context,i.htmlAttrs))}return e.cells.length||t.push('<td class="fc-day '+this.context.theme.getClass("widgetContent")+'"></td>'),"rtl"===this.context.options.dir&&t.reverse(),"<tr>"+t.join("")+"</tr>"},e}(),v=t.createFormatter({day:"numeric"}),b=t.createFormatter({week:"numeric"}),w=function(e){function n(r,n,i){var o=e.call(this,r,n)||this;o.bottomCoordPadding=0,o.isCellSizesDirty=!1;var s=o.eventRenderer=new p(o),l=o.fillRenderer=new f(o);o.mirrorRenderer=new u(o);var a=o.renderCells=t.memoizeRendering(o._renderCells,o._unrenderCells);return o.renderBusinessHours=t.memoizeRendering(l.renderSegs.bind(l,"businessHours"),l.unrender.bind(l,"businessHours"),[a]),o.renderDateSelection=t.memoizeRendering(l.renderSegs.bind(l,"highlight"),l.unrender.bind(l,"highlight"),[a]),o.renderBgEvents=t.memoizeRendering(l.renderSegs.bind(l,"bgEvent"),l.unrender.bind(l,"bgEvent"),[a]),o.renderFgEvents=t.memoizeRendering(s.renderSegs.bind(s),s.unrender.bind(s),[a]),o.renderEventSelection=t.memoizeRendering(s.selectByInstanceId.bind(s),s.unselectByInstanceId.bind(s),[o.renderFgEvents]),o.renderEventDrag=t.memoizeRendering(o._renderEventDrag,o._unrenderEventDrag,[a]),o.renderEventResize=t.memoizeRendering(o._renderEventResize,o._unrenderEventResize,[a]),o.renderProps=i,o}return r(n,e),n.prototype.render=function(e){var t=e.cells;this.rowCnt=t.length,this.colCnt=t[0].length,this.renderCells(t,e.isRigid),this.renderBusinessHours(e.businessHourSegs),this.renderDateSelection(e.dateSelectionSegs),this.renderBgEvents(e.bgEventSegs),this.renderFgEvents(e.fgEventSegs),this.renderEventSelection(e.eventSelection),this.renderEventDrag(e.eventDrag),this.renderEventResize(e.eventResize),this.segPopoverTile&&this.updateSegPopoverTile()},n.prototype.destroy=function(){e.prototype.destroy.call(this),this.renderCells.unrender()},n.prototype.getCellRange=function(e,r){var n=this.props.cells[e][r].date;return{start:n,end:t.addDays(n,1)}},n.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})},n.prototype._renderCells=function(e,r){var n,i,o=this,s=o.view,l=o.dateEnv,a=this,d=a.rowCnt,c=a.colCnt,h="";for(n=0;n<d;n++)h+=this.renderDayRowHtml(n,r);for(this.el.innerHTML=h,this.rowEls=t.findElements(this.el,".fc-row"),this.cellEls=t.findElements(this.el,".fc-day, .fc-disabled-day"),this.isRtl&&this.cellEls.reverse(),this.rowPositions=new t.PositionCache(this.el,this.rowEls,!1,!0),this.colPositions=new t.PositionCache(this.el,this.cellEls.slice(0,c),!0,!1),n=0;n<d;n++)for(i=0;i<c;i++)this.publiclyTrigger("dayRender",[{date:l.toDate(e[n][i].date),el:this.getCellEl(n,i),view:s}]);this.isCellSizesDirty=!0},n.prototype._unrenderCells=function(){this.removeSegPopover()},n.prototype.renderDayRowHtml=function(e,t){var r=this.theme,n=["fc-row","fc-week",r.getClass("dayRow")];t&&n.push("fc-rigid");var i=new y(this.context);return'<div class="'+n.join(" ")+'"><div class="fc-bg"><table class="'+r.getClass("tableGrid")+'">'+i.renderHtml({cells:this.props.cells[e],dateProfile:this.props.dateProfile,renderIntroHtml:this.renderProps.renderBgIntroHtml})+'</table></div><div class="fc-content-skeleton"><table>'+(this.getIsNumbersVisible()?"<thead>"+this.renderNumberTrHtml(e)+"</thead>":"")+"</table></div></div>"},n.prototype.getIsNumbersVisible=function(){return this.getIsDayNumbersVisible()||this.renderProps.cellWeekNumbersVisible||this.renderProps.colWeekNumbersVisible},n.prototype.getIsDayNumbersVisible=function(){return this.rowCnt>1},n.prototype.renderNumberTrHtml=function(e){var t=this.renderProps.renderNumberIntroHtml(e,this);return"<tr>"+(this.isRtl?"":t)+this.renderNumberCellsHtml(e)+(this.isRtl?t:"")+"</tr>"},n.prototype.renderNumberCellsHtml=function(e){var t,r,n=[];for(t=0;t<this.colCnt;t++)r=this.props.cells[e][t].date,n.push(this.renderNumberCellHtml(r));return this.isRtl&&n.reverse(),n.join("")},n.prototype.renderNumberCellHtml=function(e){var r,n,i=this,o=i.view,s=i.dateEnv,l="",a=t.rangeContainsMarker(this.props.dateProfile.activeRange,e),d=this.getIsDayNumbersVisible()&&a;return d||this.renderProps.cellWeekNumbersVisible?(r=t.getDayClasses(e,this.props.dateProfile,this.context),r.unshift("fc-day-top"),this.renderProps.cellWeekNumbersVisible&&(n=s.weekDow),l+='<td class="'+r.join(" ")+'"'+(a?' data-date="'+s.formatIso(e,{omitTime:!0})+'"':"")+">",this.renderProps.cellWeekNumbersVisible&&e.getUTCDay()===n&&(l+=t.buildGotoAnchorHtml(o,{date:e,type:"week"},{class:"fc-week-number"},s.format(e,b))),d&&(l+=t.buildGotoAnchorHtml(o,e,{class:"fc-day-number"},s.format(e,v))),l+="</td>"):"<td></td>"},n.prototype.updateSize=function(e){var t=this,r=t.fillRenderer,n=t.eventRenderer,i=t.mirrorRenderer;(e||this.isCellSizesDirty||this.view.calendar.isEventsUpdated)&&(this.buildPositionCaches(),this.isCellSizesDirty=!1),r.computeSizes(e),n.computeSizes(e),i.computeSizes(e),r.assignSizes(e),n.assignSizes(e),i.assignSizes(e)},n.prototype.buildPositionCaches=function(){this.buildColPositions(),this.buildRowPositions()},n.prototype.buildColPositions=function(){this.colPositions.build()},n.prototype.buildRowPositions=function(){this.rowPositions.build(),this.rowPositions.bottoms[this.rowCnt-1]+=this.bottomCoordPadding},n.prototype.positionToHit=function(e,t){var r=this,n=r.colPositions,i=r.rowPositions,o=n.leftToIndex(e),s=i.topToIndex(t);if(null!=s&&null!=o)return{row:s,col:o,dateSpan:{range:this.getCellRange(s,o),allDay:!0},dayEl:this.getCellEl(s,o),relativeRect:{left:n.lefts[o],right:n.rights[o],top:i.tops[s],bottom:i.bottoms[s]}}},n.prototype.getCellEl=function(e,t){return this.cellEls[e*this.colCnt+t]},n.prototype._renderEventDrag=function(e){e&&(this.eventRenderer.hideByHash(e.affectedInstances),this.fillRenderer.renderSegs("highlight",e.segs))},n.prototype._unrenderEventDrag=function(e){e&&(this.eventRenderer.showByHash(e.affectedInstances),this.fillRenderer.unrender("highlight"))},n.prototype._renderEventResize=function(e){e&&(this.eventRenderer.hideByHash(e.affectedInstances),this.fillRenderer.renderSegs("highlight",e.segs),this.mirrorRenderer.renderSegs(e.segs,{isResizing:!0,sourceSeg:e.sourceSeg}))},n.prototype._unrenderEventResize=function(e){e&&(this.eventRenderer.showByHash(e.affectedInstances),this.fillRenderer.unrender("highlight"),this.mirrorRenderer.unrender(e.segs,{isResizing:!0,sourceSeg:e.sourceSeg}))},n.prototype.removeSegPopover=function(){this.segPopover&&this.segPopover.hide()},n.prototype.limitRows=function(e){var t,r,n=this.eventRenderer.rowStructs||[];for(t=0;t<n.length;t++)this.unlimitRow(t),!1!==(r=!!e&&("number"==typeof e?e:this.computeRowLevelLimit(t)))&&this.limitRow(t,r)},n.prototype.computeRowLevelLimit=function(e){var r,n,i=this.rowEls[e],o=i.getBoundingClientRect().bottom,s=t.findChildren(this.eventRenderer.rowStructs[e].tbodyEl);for(r=0;r<s.length;r++)if(n=s[r],n.classList.remove("fc-limited"),n.getBoundingClientRect().bottom>o)return r;return!1},n.prototype.limitRow=function(e,r){var n,i,o,s,l,a,d,c,h,p,u,f,g,m,y,v=this,b=this,w=b.colCnt,S=b.isRtl,C=this.eventRenderer.rowStructs[e],E=[],R=0,H=function(n){for(;R<n;)a=v.getCellSegs(e,R,r),a.length&&(h=i[r-1][R],y=v.renderMoreLink(e,R,a),m=t.createElement("div",null,y),h.appendChild(m),E.push(m)),R++};if(r&&r<C.segLevels.length){for(n=C.segLevels[r-1],i=C.cellMatrix,o=t.findChildren(C.tbodyEl).slice(r),o.forEach(function(e){e.classList.add("fc-limited")}),s=0;s<n.length;s++){l=n[s];var D=S?w-1-l.lastCol:l.firstCol,P=S?w-1-l.firstCol:l.lastCol;for(H(D),c=[],d=0;R<=P;)a=this.getCellSegs(e,R,r),c.push(a),d+=a.length,R++;if(d){for(h=i[r-1][D],p=h.rowSpan||1,u=[],f=0;f<c.length;f++)g=t.createElement("td",{className:"fc-more-cell",rowSpan:p}),a=c[f],y=this.renderMoreLink(e,D+f,[l].concat(a)),m=t.createElement("div",null,y),g.appendChild(m),u.push(g),E.push(g);h.classList.add("fc-limited"),t.insertAfterElement(h,u),o.push(h)}}H(this.colCnt),C.moreEls=E,C.limitedEls=o}},n.prototype.unlimitRow=function(e){var r=this.eventRenderer.rowStructs[e];r.moreEls&&(r.moreEls.forEach(t.removeElement),r.moreEls=null),r.limitedEls&&(r.limitedEls.forEach(function(e){e.classList.remove("fc-limited")}),r.limitedEls=null)},n.prototype.renderMoreLink=function(e,r,n){var i=this,o=this,s=o.view,l=o.dateEnv,a=t.createElement("a",{className:"fc-more"});return a.innerText=this.getMoreLinkText(n.length),a.addEventListener("click",function(t){var o=i.opt("eventLimitClick"),a=i.isRtl?i.colCnt-r-1:r,d=i.props.cells[e][a].date,c=t.currentTarget,h=i.getCellEl(e,r),p=i.getCellSegs(e,r),u=i.resliceDaySegs(p,d),f=i.resliceDaySegs(n,d);"function"==typeof o&&(o=i.publiclyTrigger("eventLimitClick",[{date:l.toDate(d),allDay:!0,dayEl:h,moreEl:c,segs:u,hiddenSegs:f,jsEvent:t,view:s}])),"popover"===o?i.showSegPopover(e,r,c,u):"string"==typeof o&&s.calendar.zoomTo(d,o)}),a},n.prototype.showSegPopover=function(e,r,n,i){var o,s,l=this,a=this,d=a.calendar,h=a.view,p=a.theme,u=this.isRtl?this.colCnt-r-1:r,f=n.parentNode;o=1===this.rowCnt?h.el:this.rowEls[e],s={className:"fc-more-popover "+p.getClass("popover"),parentEl:h.el,top:t.computeRect(o).top,autoHide:!0,content:function(t){l.segPopoverTile=new g(l.context,t),l.updateSegPopoverTile(l.props.cells[e][u].date,i)},hide:function(){l.segPopoverTile.destroy(),l.segPopoverTile=null,l.segPopover.destroy(),l.segPopover=null}},this.isRtl?s.right=t.computeRect(f).right+1:s.left=t.computeRect(f).left-1,this.segPopover=new c(s),this.segPopover.show(),d.releaseAfterSizingTriggers()},n.prototype.resliceDaySegs=function(e,r){for(var n=r,i=t.addDays(n,1),o={start:n,end:i},s=[],l=0,d=e;l<d.length;l++){var c=d[l],h=c.eventRange,p=h.range,u=t.intersectRanges(p,o);u&&s.push(a({},c,{eventRange:{def:h.def,ui:a({},h.ui,{durationEditable:!1}),instance:h.instance,range:u},isStart:c.isStart&&u.start.valueOf()===p.start.valueOf(),isEnd:c.isEnd&&u.end.valueOf()===p.end.valueOf()}))}return s},n.prototype.getMoreLinkText=function(e){var t=this.opt("eventLimitText");return"function"==typeof t?t(e):"+"+e+" "+t},n.prototype.getCellSegs=function(e,t,r){for(var n,i=this.eventRenderer.rowStructs[e].segMatrix,o=r||0,s=[];o<i.length;)n=i[o][t],n&&s.push(n),o++;return s},n}(t.DateComponent),S=t.createFormatter({week:"numeric"}),C=function(e){function n(r,n,i,o){var s=e.call(this,r,n,i,o)||this;s.renderHeadIntroHtml=function(){var e=s.theme;return s.colWeekNumbersVisible?'<th class="fc-week-number '+e.getClass("widgetHeader")+'" '+s.weekNumberStyleAttr()+"><span>"+t.htmlEscape(s.opt("weekLabel"))+"</span></th>":""},s.renderDayGridNumberIntroHtml=function(e,r){var n=s.dateEnv,i=r.props.cells[e][0].date;return s.colWeekNumbersVisible?'<td class="fc-week-number" '+s.weekNumberStyleAttr()+">"+t.buildGotoAnchorHtml(s,{date:i,type:"week",forceOff:1===r.colCnt},n.format(i,S))+"</td>":""},s.renderDayGridBgIntroHtml=function(){var e=s.theme;return s.colWeekNumbersVisible?'<td class="fc-week-number '+e.getClass("widgetContent")+'" '+s.weekNumberStyleAttr()+"></td>":""},s.renderDayGridIntroHtml=function(){return s.colWeekNumbersVisible?'<td class="fc-week-number" '+s.weekNumberStyleAttr()+"></td>":""},s.el.classList.add("fc-dayGrid-view"),s.el.innerHTML=s.renderSkeletonHtml(),s.scroller=new t.ScrollComponent("hidden","auto");var l=s.scroller.el;s.el.querySelector(".fc-body > tr > td").appendChild(l),l.classList.add("fc-day-grid-container");var a=t.createElement("div",{className:"fc-day-grid"});l.appendChild(a);var d;return s.opt("weekNumbers")?s.opt("weekNumbersWithinDays")?(d=!0,s.colWeekNumbersVisible=!1):(d=!1,s.colWeekNumbersVisible=!0):(s.colWeekNumbersVisible=!1,d=!1),s.dayGrid=new w(s.context,a,{renderNumberIntroHtml:s.renderDayGridNumberIntroHtml,renderBgIntroHtml:s.renderDayGridBgIntroHtml,renderIntroHtml:s.renderDayGridIntroHtml,colWeekNumbersVisible:s.colWeekNumbersVisible,cellWeekNumbersVisible:d}),s}return r(n,e),n.prototype.destroy=function(){e.prototype.destroy.call(this),this.dayGrid.destroy(),this.scroller.destroy()},n.prototype.renderSkeletonHtml=function(){var e=this.theme;return'<table class="'+e.getClass("tableGrid")+'">'+(this.opt("columnHeader")?'<thead class="fc-head"><tr><td class="fc-head-container '+e.getClass("widgetHeader")+'"> </td></tr></thead>':"")+'<tbody class="fc-body"><tr><td class="'+e.getClass("widgetContent")+'"></td></tr></tbody></table>'},n.prototype.weekNumberStyleAttr=function(){return null!=this.weekNumberWidth?'style="width:'+this.weekNumberWidth+'px"':""},n.prototype.hasRigidRows=function(){var e=this.opt("eventLimit");return e&&"number"!=typeof e},n.prototype.updateSize=function(t,r,n){e.prototype.updateSize.call(this,t,r,n),this.dayGrid.updateSize(t)},n.prototype.updateBaseSize=function(e,r,n){var i,o,s=this.dayGrid,l=this.opt("eventLimit"),a=this.header?this.header.el:null;if(!s.rowEls)return void(n||(i=this.computeScrollerHeight(r),this.scroller.setHeight(i)));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(),(o.left||o.right)&&(a&&t.compensateScroll(a,o),i=this.computeScrollerHeight(r),this.scroller.setHeight(i)),this.scroller.lockOverflow(o))},n.prototype.computeScrollerHeight=function(e){return e-t.subtractInnerElHeight(this.el,this.scroller.el)},n.prototype.setGridHeight=function(e,r){this.opt("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)},n.prototype.computeDateScroll=function(e){return{top:0}},n.prototype.queryDateScroll=function(){return{top:this.scroller.getScrollTop()}},n.prototype.applyDateScroll=function(e){void 0!==e.top&&this.scroller.setScrollTop(e.top)},n}(t.View);C.prototype.dateProfileGeneratorClass=d;var E=function(e){function t(t,r){var n=e.call(this,t,r.el)||this;return n.slicer=new R,n.dayGrid=r,t.calendar.registerInteractiveComponent(n,{el:n.dayGrid.el}),n}return r(t,e),t.prototype.destroy=function(){e.prototype.destroy.call(this),this.calendar.unregisterInteractiveComponent(this)},t.prototype.render=function(e){var t=this.dayGrid,r=e.dateProfile,n=e.dayTable;t.receiveProps(a({},this.slicer.sliceProps(e,r,e.nextDayThreshold,t,n),{dateProfile:r,cells:n.cells,isRigid:e.isRigid}))},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),R=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return r(t,e),t.prototype.sliceRange=function(e,t){return t.sliceRange(e)},t}(t.Slicer),H=function(e){function n(r,n,i,o){var l=e.call(this,r,n,i,o)||this;return l.buildDayTable=t.memoize(s),l.opt("columnHeader")&&(l.header=new t.DayHeader(l.context,l.el.querySelector(".fc-head-container"))),l.simpleDayGrid=new E(l.context,l.dayGrid),l}return r(n,e),n.prototype.destroy=function(){e.prototype.destroy.call(this),this.header&&this.header.destroy(),this.simpleDayGrid.destroy()},n.prototype.render=function(t){e.prototype.render.call(this,t);var r=this.props.dateProfile,n=this.dayTable=this.buildDayTable(r,this.dateProfileGenerator);this.header&&this.header.receiveProps({dateProfile:r,dates:n.headerDates,datesRepDistinctDays:1===n.rowCnt,renderIntroHtml:this.renderHeadIntroHtml}),this.simpleDayGrid.receiveProps({dateProfile:r,dayTable:n,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.nextDayThreshold})},n}(C),D=t.createPlugin({defaultView:"dayGridMonth",views:{dayGrid:H,dayGridDay:{type:"dayGrid",duration:{days:1}},dayGridWeek:{type:"dayGrid",duration:{weeks:1}},dayGridMonth:{type:"dayGrid",duration:{months:1},monthMode:!0,fixedWeekCount:!0}}});e.AbstractDayGridView=C,e.DayBgRow=y,e.DayGrid=w,e.DayGridSlicer=R,e.DayGridView=H,e.SimpleDayGrid=E,e.buildBasicDayTable=s,e.default=D,Object.defineProperty(e,"__esModule",{value:!0})});
\ No newline at end of file
--- /dev/null
+{
+ "_from": "@fullcalendar/daygrid",
+ "_id": "@fullcalendar/daygrid@4.1.0",
+ "_inBundle": false,
+ "_integrity": "sha512-y2w+js+cr0SFC3f88QIS91V8LeZ5TEG/W6hX+CcokP+KTZdepW0uCjPzf9QwVE0LM904tZ2kjCe209hZGfSNGg==",
+ "_location": "/@fullcalendar/daygrid",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "tag",
+ "registry": true,
+ "raw": "@fullcalendar/daygrid",
+ "name": "@fullcalendar/daygrid",
+ "escapedName": "@fullcalendar%2fdaygrid",
+ "scope": "@fullcalendar",
+ "rawSpec": "",
+ "saveSpec": null,
+ "fetchSpec": "latest"
+ },
+ "_requiredBy": [
+ "#USER",
+ "/"
+ ],
+ "_resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-4.1.0.tgz",
+ "_shasum": "058b02585d17a63f448e2ab42f65db7bacca2296",
+ "_spec": "@fullcalendar/daygrid",
+ "_where": "C:\\Users\\ksaff\\Workspace\\Websites\\fullcalendar",
+ "author": {
+ "name": "Adam Shaw",
+ "email": "arshaw@arshaw.com",
+ "url": "http://arshaw.com/"
+ },
+ "bugs": {
+ "url": "https://fullcalendar.io/reporting-bugs"
+ },
+ "bundleDependencies": false,
+ "copyright": "2019 Adam Shaw",
+ "deprecated": false,
+ "description": "Display events on Month view or DayGrid view",
+ "docs": "https://fullcalendar.io/docs/month-view",
+ "homepage": "https://fullcalendar.io/",
+ "keywords": [
+ "calendar",
+ "event",
+ "full-sized"
+ ],
+ "license": "MIT",
+ "main": "main.js",
+ "name": "@fullcalendar/daygrid",
+ "peerDependencies": {
+ "@fullcalendar/core": "~4.1.0"
+ },
+ "releaseDate": "2019-04-24",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/fullcalendar/fullcalendar.git",
+ "homepage": "https://github.com/fullcalendar/fullcalendar"
+ },
+ "title": "FullCalendar Day Grid Plugin",
+ "types": "main.d.ts",
+ "unpkg": "main.min.js",
+ "version": "4.1.0"
+}
+++ /dev/null
-/*!
- * FullCalendar v3.9.0
- * Docs & License: https://fullcalendar.io/
- * (c) 2018 Adam Shaw
- */
-.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: .3; }
-
-.fc-bgevent {
- /* default look for background events */
- background: #8fdf82;
- opacity: .3; }
-
-.fc-nonbusiness {
- /* default look for non-business-hours areas */
- /* will inherit .fc-bgevent's styles */
- background: #d7d7d7; }
-
-/* Buttons (styled <button> tags, normalized to work cross-browser)
---------------------------------------------------------------------------------------------------*/
-.fc button {
- /* force height to include the border and padding */
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
- /* dimensions */
- margin: 0;
- height: 2.1em;
- padding: 0 .6em;
- /* text & cursor */
- font-size: 1em;
- /* normalize */
- white-space: nowrap;
- cursor: pointer; }
-
-/* Firefox has an annoying inner border */
-.fc button::-moz-focus-inner {
- margin: 0;
- padding: 0; }
-
-.fc-state-default {
- /* non-theme */
- border: 1px solid; }
-
-.fc-state-default.fc-corner-left {
- /* non-theme */
- border-top-left-radius: 4px;
- border-bottom-left-radius: 4px; }
-
-.fc-state-default.fc-corner-right {
- /* non-theme */
- border-top-right-radius: 4px;
- border-bottom-right-radius: 4px; }
-
-/* icons in buttons */
-.fc button .fc-icon {
- /* non-theme */
- position: relative;
- top: -0.05em;
- /* seems to be a good adjustment across browsers */
- margin: 0 .2em;
- vertical-align: middle; }
-
-/*
- button states
- borrowed from twitter bootstrap (http://twitter.github.com/bootstrap/)
-*/
-.fc-state-default {
- background-color: #f5f5f5;
- background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
- background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
- background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
- background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);
- background-repeat: repeat-x;
- border-color: #e6e6e6 #e6e6e6 #bfbfbf;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- color: #333;
- text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); }
-
-.fc-state-hover,
-.fc-state-down,
-.fc-state-active,
-.fc-state-disabled {
- color: #333333;
- background-color: #e6e6e6; }
-
-.fc-state-hover {
- color: #333333;
- text-decoration: none;
- background-position: 0 -15px;
- -webkit-transition: background-position 0.1s linear;
- -moz-transition: background-position 0.1s linear;
- -o-transition: background-position 0.1s linear;
- transition: background-position 0.1s linear; }
-
-.fc-state-down,
-.fc-state-active {
- background-color: #cccccc;
- background-image: none;
- box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); }
-
-.fc-state-disabled {
- cursor: default;
- background-image: none;
- opacity: 0.65;
- box-shadow: none; }
-
-/* Buttons Groups
---------------------------------------------------------------------------------------------------*/
-.fc-button-group {
- display: inline-block; }
-
-/*
-every button that is not first in a button group should scootch over one pixel and cover the
-previous button's border...
-*/
-.fc .fc-button-group > * {
- /* extra precedence b/c buttons have margin set to zero */
- float: left;
- margin: 0 0 0 -1px; }
-
-.fc .fc-button-group > :first-child {
- /* same */
- margin-left: 0; }
-
-/* 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 */
- padding: 2px 4px; }
-
-.fc-popover .fc-header .fc-title {
- margin: 0 2px; }
-
-.fc-popover .fc-header .fc-close {
- cursor: pointer; }
-
-.fc-ltr .fc-popover .fc-header .fc-title,
-.fc-rtl .fc-popover .fc-header .fc-close {
- float: left; }
-
-.fc-rtl .fc-popover .fc-header .fc-title,
-.fc-ltr .fc-popover .fc-header .fc-close {
- float: right; }
-
-/* 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-clear {
- clear: both; }
-
-.fc-bg,
-.fc-bgevent-skeleton,
-.fc-highlight-skeleton,
-.fc-helper-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 w/ .ui-widget-content 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 "helper" (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-helper-skeleton {
- z-index: 5; }
-
-.fc .fc-row .fc-content-skeleton table,
-.fc .fc-row .fc-content-skeleton td,
-.fc .fc-row .fc-helper-skeleton td {
- /* see-through to the background below */
- /* extra precedence to prevent theme-provided backgrounds */
- background: none;
- /* in case <td>s are globally styled */
- border-color: transparent; }
-
-.fc-row .fc-content-skeleton td,
-.fc-row .fc-helper-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-helper-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 agenda/basic */
-.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 <a> tag block */
- font-size: .85em;
- line-height: 1.3;
- border-radius: 3px;
- border: 1px solid #3a87ad;
- /* default BORDER color */ }
-
-.fc-event,
-.fc-event-dot {
- background-color: #3a87ad;
- /* default BACKGROUND color */ }
-
-.fc-event,
-.fc-event:hover {
- color: #fff;
- /* default TEXT color */
- text-decoration: none;
- /* if <a> 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-bg {
- /* the generic .fc-bg already does position */
- z-index: 1;
- background: #fff;
- opacity: .25; }
-
-.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.fc-dragging {
- box-shadow: 0 2px 7px rgba(0, 0, 0, 0.3); }
-
-/* 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-day-grid-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: .25; }
-
-.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: .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: transparent; }
-
-/*
-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 .fc-popover .fc-header .fc-close {
- color: #666; }
-
-.fc-unthemed td.fc-today {
- background: #fcf8e3; }
-
-.fc-unthemed .fc-disabled-day {
- background: #d7d7d7;
- opacity: .3; }
-
-/* Icons (inline elements with styled text that mock arrow icons)
---------------------------------------------------------------------------------------------------*/
-.fc-icon {
- display: inline-block;
- height: 1em;
- line-height: 1em;
- font-size: 1em;
- text-align: center;
- overflow: hidden;
- font-family: "Courier New", Courier, monospace;
- /* don't allow browser text-selection */
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none; }
-
-/*
-Acceptable font-family overrides for individual icons:
- "Arial", sans-serif
- "Times New Roman", serif
-
-NOTE: use percentage font sizes or else old IE chokes
-*/
-.fc-icon:after {
- position: relative; }
-
-.fc-icon-left-single-arrow:after {
- content: "\2039";
- font-weight: bold;
- font-size: 200%;
- top: -7%; }
-
-.fc-icon-right-single-arrow:after {
- content: "\203A";
- font-weight: bold;
- font-size: 200%;
- top: -7%; }
-
-.fc-icon-left-double-arrow:after {
- content: "\AB";
- font-size: 160%;
- top: -7%; }
-
-.fc-icon-right-double-arrow:after {
- content: "\BB";
- font-size: 160%;
- top: -7%; }
-
-.fc-icon-left-triangle:after {
- content: "\25C4";
- font-size: 125%;
- top: 3%; }
-
-.fc-icon-right-triangle:after {
- content: "\25BA";
- font-size: 125%;
- top: 3%; }
-
-.fc-icon-down-triangle:after {
- content: "\25BC";
- font-size: 125%;
- top: 2%; }
-
-.fc-icon-x:after {
- content: "\D7";
- font-size: 200%;
- top: 6%; }
-
-/* Popover
---------------------------------------------------------------------------------------------------*/
-.fc-unthemed .fc-popover {
- border-width: 1px;
- border-style: solid; }
-
-.fc-unthemed .fc-popover .fc-header .fc-close {
- font-size: .9em;
- margin-top: 2px; }
-
-/* List View
---------------------------------------------------------------------------------------------------*/
-.fc-unthemed .fc-list-item:hover td {
- background-color: #f5f5f5; }
-
-/* Colors
---------------------------------------------------------------------------------------------------*/
-.ui-widget .fc-disabled-day {
- background-image: none; }
-
-/* Popover
---------------------------------------------------------------------------------------------------*/
-.fc-popover > .ui-widget-header + .ui-widget-content {
- border-top: 0;
- /* where they meet, let the header have the border */ }
-
-/* Global Event Styles
---------------------------------------------------------------------------------------------------*/
-.ui-widget .fc-event {
- /* overpower jqui's styles on <a> tags. TODO: more DRY */
- color: #fff;
- /* default TEXT color */
- text-decoration: none;
- /* if <a> has an href */
- /* undo ui-widget-header bold */
- font-weight: normal; }
-
-/* TimeGrid axis running down the side (for both the all-day area and the slot area)
---------------------------------------------------------------------------------------------------*/
-.ui-widget td.fc-axis {
- font-weight: normal;
- /* overcome bold */ }
-
-/* TimeGrid Slats (lines that run horizontally)
---------------------------------------------------------------------------------------------------*/
-.fc-time-grid .fc-slats .ui-widget-content {
- background: none;
- /* see through to fc-bg */ }
-
-.fc.fc-bootstrap3 a {
- text-decoration: none; }
-
-.fc.fc-bootstrap3 a[data-goto]:hover {
- text-decoration: underline; }
-
-.fc-bootstrap3 hr.fc-divider {
- border-color: inherit; }
-
-.fc-bootstrap3 .fc-today.alert {
- border-radius: 0; }
-
-/* Popover
---------------------------------------------------------------------------------------------------*/
-.fc-bootstrap3 .fc-popover .panel-body {
- padding: 0; }
-
-/* TimeGrid Slats (lines that run horizontally)
---------------------------------------------------------------------------------------------------*/
-.fc-bootstrap3 .fc-time-grid .fc-slats table {
- /* some themes have background color. see through to slats */
- background: none; }
-
-.fc.fc-bootstrap4 a {
- text-decoration: none; }
-
-.fc.fc-bootstrap4 a[data-goto]:hover {
- text-decoration: underline; }
-
-.fc-bootstrap4 hr.fc-divider {
- border-color: inherit; }
-
-.fc-bootstrap4 .fc-today.alert {
- border-radius: 0; }
-
-.fc-bootstrap4 a.fc-event:not([href]):not([tabindex]) {
- color: #fff; }
-
-.fc-bootstrap4 .fc-popover.card {
- position: absolute; }
-
-/* Popover
---------------------------------------------------------------------------------------------------*/
-.fc-bootstrap4 .fc-popover .card-body {
- padding: 0; }
-
-/* TimeGrid Slats (lines that run horizontally)
---------------------------------------------------------------------------------------------------*/
-.fc-bootstrap4 .fc-time-grid .fc-slats table {
- /* some themes have background color. see through to slats */
- background: none; }
-
-/* Toolbar
---------------------------------------------------------------------------------------------------*/
-.fc-toolbar {
- text-align: center; }
-
-.fc-toolbar.fc-header-toolbar {
- margin-bottom: 1em; }
-
-.fc-toolbar.fc-footer-toolbar {
- margin-top: 1em; }
-
-.fc-toolbar .fc-left {
- float: left; }
-
-.fc-toolbar .fc-right {
- float: right; }
-
-.fc-toolbar .fc-center {
- display: inline-block; }
-
-/* the things within each left/right/center section */
-.fc .fc-toolbar > * > * {
- /* extra precedence to override button border margins */
- float: left;
- margin-left: .75em; }
-
-/* the first thing within each left/center/right section */
-.fc .fc-toolbar > * > :first-child {
- /* extra precedence to override button border margins */
- margin-left: 0; }
-
-/* title text */
-.fc-toolbar h2 {
- margin: 0; }
-
-/* button layering (for border precedence) */
-.fc-toolbar button {
- position: relative; }
-
-.fc-toolbar .fc-state-hover,
-.fc-toolbar .ui-state-hover {
- z-index: 2; }
-
-.fc-toolbar .fc-state-down {
- z-index: 3; }
-
-.fc-toolbar .fc-state-active,
-.fc-toolbar .ui-state-active {
- z-index: 4; }
-
-.fc-toolbar button:focus {
- z-index: 5; }
-
-/* View Structure
---------------------------------------------------------------------------------------------------*/
-/* 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; }
-
-/* BasicView
---------------------------------------------------------------------------------------------------*/
-/* day row structure */
-.fc-basicWeek-view .fc-content-skeleton,
-.fc-basicDay-view .fc-content-skeleton {
- /* there may be week numbers in these views, so no padding-top */
- padding-bottom: 1em;
- /* ensure a space at bottom of cell for user selecting/clicking */ }
-
-.fc-basic-view .fc-body .fc-row {
- min-height: 4em;
- /* ensure that all rows are at least this tall */ }
-
-/* a "rigid" row will take up a constant amount of height because content-skeleton is absolute */
-.fc-row.fc-rigid {
- overflow: hidden; }
-
-.fc-row.fc-rigid .fc-content-skeleton {
- position: absolute;
- top: 0;
- left: 0;
- right: 0; }
-
-/* week and day number styling */
-.fc-day-top.fc-other-month {
- opacity: 0.3; }
-
-.fc-basic-view .fc-week-number,
-.fc-basic-view .fc-day-number {
- padding: 2px; }
-
-.fc-basic-view th.fc-week-number,
-.fc-basic-view th.fc-day-number {
- padding: 0 2px;
- /* column headers can't have as much v space */ }
-
-.fc-ltr .fc-basic-view .fc-day-top .fc-day-number {
- float: right; }
-
-.fc-rtl .fc-basic-view .fc-day-top .fc-day-number {
- float: left; }
-
-.fc-ltr .fc-basic-view .fc-day-top .fc-week-number {
- float: left;
- border-radius: 0 0 3px 0; }
-
-.fc-rtl .fc-basic-view .fc-day-top .fc-week-number {
- float: right;
- border-radius: 0 0 0 3px; }
-
-.fc-basic-view .fc-day-top .fc-week-number {
- min-width: 1.5em;
- text-align: center;
- background-color: #f2f2f2;
- color: #808080; }
-
-/* when week/day number have own column */
-.fc-basic-view td.fc-week-number {
- text-align: center; }
-
-.fc-basic-view td.fc-week-number > * {
- /* work around the way we do column resizing and ensure a minimum width */
- display: inline-block;
- min-width: 1.25em; }
-
-/* AgendaView all-day area
---------------------------------------------------------------------------------------------------*/
-.fc-agenda-view .fc-day-grid {
- position: relative;
- z-index: 2;
- /* so the "more.." popover will be over the time grid */ }
-
-.fc-agenda-view .fc-day-grid .fc-row {
- min-height: 3em;
- /* all-day section will never get shorter than this */ }
-
-.fc-agenda-view .fc-day-grid .fc-row .fc-content-skeleton {
- padding-bottom: 1em;
- /* give space underneath events for clicking/selecting days */ }
-
-/* TimeGrid axis running down the side (for both the all-day area and the slot area)
---------------------------------------------------------------------------------------------------*/
-.fc .fc-axis {
- /* .fc to overcome default cell styles */
- vertical-align: middle;
- padding: 0 4px;
- white-space: nowrap; }
-
-.fc-ltr .fc-axis {
- text-align: right; }
-
-.fc-rtl .fc-axis {
- text-align: left; }
-
-/* TimeGrid Structure
---------------------------------------------------------------------------------------------------*/
-.fc-time-grid-container,
-.fc-time-grid {
- /* so slats/bg/content/etc positions get scoped within here */
- position: relative;
- z-index: 1; }
-
-.fc-time-grid {
- min-height: 100%;
- /* so if height setting is 'auto', .fc-bg stretches to fill height */ }
-
-.fc-time-grid table {
- /* don't put outer borders on slats/bg/content/etc */
- border: 0 hidden transparent; }
-
-.fc-time-grid > .fc-bg {
- z-index: 1; }
-
-.fc-time-grid .fc-slats,
-.fc-time-grid > hr {
- /* the <hr> AgendaView injects when grid is shorter than scroller */
- position: relative;
- z-index: 2; }
-
-.fc-time-grid .fc-content-col {
- position: relative;
- /* because now-indicator lives directly inside */ }
-
-.fc-time-grid .fc-content-skeleton {
- position: absolute;
- z-index: 3;
- top: 0;
- left: 0;
- right: 0; }
-
-/* divs within a cell within the fc-content-skeleton */
-.fc-time-grid .fc-business-container {
- position: relative;
- z-index: 1; }
-
-.fc-time-grid .fc-bgevent-container {
- position: relative;
- z-index: 2; }
-
-.fc-time-grid .fc-highlight-container {
- position: relative;
- z-index: 3; }
-
-.fc-time-grid .fc-event-container {
- position: relative;
- z-index: 4; }
-
-.fc-time-grid .fc-now-indicator-line {
- z-index: 5; }
-
-.fc-time-grid .fc-helper-container {
- /* also is fc-event-container */
- position: relative;
- z-index: 6; }
-
-/* TimeGrid Slats (lines that run horizontally)
---------------------------------------------------------------------------------------------------*/
-.fc-time-grid .fc-slats td {
- height: 1.5em;
- border-bottom: 0;
- /* each cell is responsible for its top border */ }
-
-.fc-time-grid .fc-slats .fc-minor td {
- border-top-style: dotted; }
-
-/* TimeGrid Highlighting Slots
---------------------------------------------------------------------------------------------------*/
-.fc-time-grid .fc-highlight-container {
- /* a div within a cell within the fc-highlight-skeleton */
- position: relative;
- /* scopes the left/right of the fc-highlight to be in the column */ }
-
-.fc-time-grid .fc-highlight {
- position: absolute;
- left: 0;
- right: 0;
- /* top and bottom will be in by JS */ }
-
-/* TimeGrid Event Containment
---------------------------------------------------------------------------------------------------*/
-.fc-ltr .fc-time-grid .fc-event-container {
- /* space on the sides of events for LTR (default) */
- margin: 0 2.5% 0 2px; }
-
-.fc-rtl .fc-time-grid .fc-event-container {
- /* space on the sides of events for RTL */
- margin: 0 2px 0 2.5%; }
-
-.fc-time-grid .fc-event,
-.fc-time-grid .fc-bgevent {
- position: absolute;
- z-index: 1;
- /* scope inner z-index's */ }
-
-.fc-time-grid .fc-bgevent {
- /* background events always span full width */
- left: 0;
- right: 0; }
-
-/* Generic Vertical Event
---------------------------------------------------------------------------------------------------*/
-.fc-v-event.fc-not-start {
- /* events that are continuing from another day */
- /* replace space made by the top border with padding */
- border-top-width: 0;
- padding-top: 1px;
- /* remove top rounded corners */
- border-top-left-radius: 0;
- border-top-right-radius: 0; }
-
-.fc-v-event.fc-not-end {
- /* replace space made by the top border with padding */
- border-bottom-width: 0;
- padding-bottom: 1px;
- /* remove bottom rounded corners */
- border-bottom-left-radius: 0;
- border-bottom-right-radius: 0; }
-
-/* TimeGrid Event Styling
-----------------------------------------------------------------------------------------------------
-We use the full "fc-time-grid-event" class instead of using descendants because the event won't
-be a descendant of the grid when it is being dragged.
-*/
-.fc-time-grid-event {
- overflow: hidden;
- /* don't let the bg flow over rounded corners */ }
-
-.fc-time-grid-event.fc-selected {
- /* need to allow touch resizers to extend outside event's bounding box */
- /* common fc-selected styles hide the fc-bg, so don't need this anyway */
- overflow: visible; }
-
-.fc-time-grid-event.fc-selected .fc-bg {
- display: none;
- /* hide semi-white background, to appear darker */ }
-
-.fc-time-grid-event .fc-content {
- overflow: hidden;
- /* for when .fc-selected */ }
-
-.fc-time-grid-event .fc-time,
-.fc-time-grid-event .fc-title {
- padding: 0 1px; }
-
-.fc-time-grid-event .fc-time {
- font-size: .85em;
- white-space: nowrap; }
-
-/* short mode, where time and title are on the same line */
-.fc-time-grid-event.fc-short .fc-content {
- /* don't wrap to second line (now that contents will be inline) */
- white-space: nowrap; }
-
-.fc-time-grid-event.fc-short .fc-time,
-.fc-time-grid-event.fc-short .fc-title {
- /* put the time and title on the same line */
- display: inline-block;
- vertical-align: top; }
-
-.fc-time-grid-event.fc-short .fc-time span {
- display: none;
- /* don't display the full time text... */ }
-
-.fc-time-grid-event.fc-short .fc-time:before {
- content: attr(data-start);
- /* ...instead, display only the start time */ }
-
-.fc-time-grid-event.fc-short .fc-time:after {
- content: "\A0-\A0";
- /* seperate with a dash, wrapped in nbsp's */ }
-
-.fc-time-grid-event.fc-short .fc-title {
- font-size: .85em;
- /* make the title text the same size as the time */
- padding: 0;
- /* undo padding from above */ }
-
-/* resizer (cursor device) */
-.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer {
- left: 0;
- right: 0;
- bottom: 0;
- height: 8px;
- overflow: hidden;
- line-height: 8px;
- font-size: 11px;
- font-family: monospace;
- text-align: center;
- cursor: s-resize; }
-
-.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after {
- content: "="; }
-
-/* resizer (touch device) */
-.fc-time-grid-event.fc-selected .fc-resizer {
- /* 10x10 dot */
- border-radius: 5px;
- border-width: 1px;
- width: 8px;
- height: 8px;
- border-style: solid;
- border-color: inherit;
- background: #fff;
- /* horizontally center */
- left: 50%;
- margin-left: -5px;
- /* center on the bottom edge */
- bottom: -5px; }
-
-/* Now Indicator
---------------------------------------------------------------------------------------------------*/
-.fc-time-grid .fc-now-indicator-line {
- border-top-width: 1px;
- left: 0;
- right: 0; }
-
-/* arrow on axis */
-.fc-time-grid .fc-now-indicator-arrow {
- margin-top: -5px;
- /* vertically center on top coordinate */ }
-
-.fc-ltr .fc-time-grid .fc-now-indicator-arrow {
- left: 0;
- /* triangle pointing right... */
- border-width: 5px 0 5px 6px;
- border-top-color: transparent;
- border-bottom-color: transparent; }
-
-.fc-rtl .fc-time-grid .fc-now-indicator-arrow {
- right: 0;
- /* triangle pointing left... */
- border-width: 5px 6px 5px 0;
- border-top-color: transparent;
- border-bottom-color: transparent; }
-
-/* List View
---------------------------------------------------------------------------------------------------*/
-/* possibly reusable */
-.fc-event-dot {
- display: inline-block;
- width: 10px;
- height: 10px;
- border-radius: 5px; }
-
-/* view wrapper */
-.fc-rtl .fc-list-view {
- direction: rtl;
- /* unlike core views, leverage browser RTL */ }
-
-.fc-list-view {
- border-width: 1px;
- border-style: solid; }
-
-/* table resets */
-.fc .fc-list-table {
- table-layout: auto;
- /* for shrinkwrapping cell content */ }
-
-.fc-list-table td {
- border-width: 1px 0 0;
- padding: 8px 14px; }
-
-.fc-list-table tr:first-child td {
- border-top-width: 0; }
-
-/* day headings with the list */
-.fc-list-heading {
- border-bottom-width: 1px; }
-
-.fc-list-heading td {
- font-weight: bold; }
-
-.fc-ltr .fc-list-heading-main {
- float: left; }
-
-.fc-ltr .fc-list-heading-alt {
- float: right; }
-
-.fc-rtl .fc-list-heading-main {
- float: right; }
-
-.fc-rtl .fc-list-heading-alt {
- float: left; }
-
-/* event list items */
-.fc-list-item.fc-has-url {
- cursor: pointer;
- /* whole row will be clickable */ }
-
-.fc-list-item-marker,
-.fc-list-item-time {
- white-space: nowrap;
- width: 1px; }
-
-/* make the dot closer to the event title */
-.fc-ltr .fc-list-item-marker {
- padding-right: 0; }
-
-.fc-rtl .fc-list-item-marker {
- padding-left: 0; }
-
-.fc-list-item-title a {
- /* every event title cell has an <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; }
+++ /dev/null
-declare module 'fullcalendar/src/util' {
- import * as moment from 'moment';
- export function compensateScroll(rowEls: any, scrollbarWidths: any): void;
- export function uncompensateScroll(rowEls: any): void;
- export function disableCursor(): void;
- export function enableCursor(): void;
- export function distributeHeight(els: any, availableHeight: any, shouldRedistribute: any): void;
- export function undistributeHeight(els: any): void;
- export function matchCellWidths(els: any): number;
- export function subtractInnerElHeight(outerEl: any, innerEl: any): any;
- export function getScrollParent(el: any): any;
- export function getOuterRect(el: any, origin?: any): {
- left: number;
- right: any;
- top: number;
- bottom: any;
- };
- export function getClientRect(el: any, origin?: any): {
- left: number;
- right: any;
- top: number;
- bottom: any;
- };
- export function getContentRect(el: any, origin: any): {
- left: number;
- right: any;
- top: number;
- bottom: any;
- };
- export function getScrollbarWidths(el: any): any;
- export function isPrimaryMouseButton(ev: any): boolean;
- export function getEvX(ev: any): any;
- export function getEvY(ev: any): any;
- export function getEvIsTouch(ev: any): boolean;
- export function preventSelection(el: any): void;
- export function allowSelection(el: any): void;
- export function preventDefault(ev: any): void;
- export function intersectRects(rect1: any, rect2: any): false | {
- left: number;
- right: number;
- top: number;
- bottom: number;
- };
- export function constrainPoint(point: any, rect: any): {
- left: number;
- top: number;
- };
- export function getRectCenter(rect: any): {
- left: number;
- top: number;
- };
- export function diffPoints(point1: any, point2: any): {
- left: number;
- top: number;
- };
- export function parseFieldSpecs(input: any): any[];
- export function compareByFieldSpecs(obj1: any, obj2: any, fieldSpecs: any, obj1fallback?: any, obj2fallback?: any): any;
- export function compareByFieldSpec(obj1: any, obj2: any, fieldSpec: any, obj1fallback: any, obj2fallback: any): any;
- export function flexibleCompare(a: any, b: any): number;
- export const dayIDs: string[];
- export const unitsDesc: string[];
- export function diffDayTime(a: any, b: any): moment.Duration;
- export function diffDay(a: any, b: any): moment.Duration;
- export function diffByUnit(a: any, b: any, unit: any): moment.Duration;
- export function computeGreatestUnit(start: any, end?: any): any;
- export function computeDurationGreatestUnit(duration: any, durationInput: any): any;
- export function divideRangeByDuration(start: any, end: any, dur: any): number;
- export function divideDurationByDuration(dur1: any, dur2: any): number;
- export function multiplyDuration(dur: any, n: any): moment.Duration;
- export function durationHasTime(dur: any): boolean;
- export function isNativeDate(input: any): boolean;
- export function isTimeString(str: any): boolean;
- export function log(...args: any[]): any;
- export function warn(...args: any[]): any;
- export function mergeProps(propObjs: any, complexProps?: any): {};
- export function copyOwnProps(src: any, dest: any): void;
- export function hasOwnProp(obj: any, name: any): any;
- export function applyAll(functions: any, thisObj: any, args: any): any;
- export function removeMatching(array: any, testFunc: any): number;
- export function removeExact(array: any, exactVal: any): number;
- export function isArraysEqual(a0: any, a1: any): boolean;
- export function firstDefined(...args: any[]): any;
- export function htmlEscape(s: any): string;
- export function stripHtmlEntities(text: any): any;
- export function cssToStr(cssProps: any): string;
- export function attrsToStr(attrs: any): string;
- export function capitaliseFirstLetter(str: any): any;
- export function compareNumbers(a: any, b: any): number;
- export function isInt(n: any): boolean;
- export function proxy(obj: any, methodName: any): () => any;
- export function debounce(func: any, wait: any, immediate?: boolean): () => any;
-}
-declare module 'fullcalendar/Mixin' {
- export class Default {
- static mixInto(destClass: any): void;
- static mixOver(destClass: any): void;
- }
- export default Default;
-}
-declare module 'fullcalendar/EmitterMixin' {
- import Mixin from 'fullcalendar/Mixin';
- export interface EmitterInterface {
- on(types: any, handler: any): any;
- one(types: any, handler: any): any;
- off(types: any, handler: any): any;
- trigger(types: any, ...args: any[]): any;
- triggerWith(types: any, context: any, args: any): any;
- hasHandlers(type: any): any;
- }
- export class Default extends Mixin implements EmitterInterface {
- on(types: any, handler: any): this;
- one(types: any, handler: any): this;
- _prepareIntercept(handler: any): (ev: any, extra: any) => any;
- off(types: any, handler: any): this;
- trigger(types: any, ...args: any[]): this;
- triggerWith(types: any, context: any, args: any): this;
- hasHandlers(type: any): boolean;
- }
- export default Default;
-}
-declare module 'fullcalendar/TaskQueue' {
- import { EmitterInterface } from 'fullcalendar/EmitterMixin';
- export class Default {
- on: EmitterInterface['on'];
- one: EmitterInterface['one'];
- off: EmitterInterface['off'];
- trigger: EmitterInterface['trigger'];
- triggerWith: EmitterInterface['triggerWith'];
- hasHandlers: EmitterInterface['hasHandlers'];
- q: any;
- isPaused: boolean;
- isRunning: boolean;
- queue(...args: any[]): void;
- pause(): void;
- resume(): void;
- getIsIdle(): boolean;
- tryStart(): void;
- canRunNext(): any;
- runRemaining(): void;
- runTask(task: any): any;
- }
- export default Default;
-}
-declare module 'fullcalendar/RenderQueue' {
- import TaskQueue from 'fullcalendar/TaskQueue';
- export class Default extends TaskQueue {
- waitsByNamespace: any;
- waitNamespace: any;
- waitId: any;
- constructor(waitsByNamespace: any);
- queue(taskFunc: any, namespace: any, type: any): void;
- startWait(namespace: any, waitMs: any): void;
- delayWait(waitMs: any): void;
- spawnWait(waitMs: any): void;
- clearWait(): void;
- canRunNext(): boolean;
- runTask(task: any): void;
- compoundTask(newTask: any): boolean;
- }
- export default Default;
-}
-declare module 'fullcalendar/src/options' {
- export const globalDefaults: {
- titleRangeSeparator: string;
- monthYearFormat: string;
- defaultTimedEventDuration: string;
- defaultAllDayEventDuration: {
- days: number;
- };
- forceEventDuration: boolean;
- nextDayThreshold: string;
- columnHeader: boolean;
- defaultView: string;
- aspectRatio: number;
- header: {
- left: string;
- center: string;
- right: string;
- };
- weekends: boolean;
- weekNumbers: boolean;
- weekNumberTitle: string;
- weekNumberCalculation: string;
- scrollTime: string;
- minTime: string;
- maxTime: string;
- showNonCurrentDates: boolean;
- lazyFetching: boolean;
- startParam: string;
- endParam: string;
- timezoneParam: string;
- timezone: boolean;
- locale: any;
- isRTL: boolean;
- buttonText: {
- prev: string;
- next: string;
- prevYear: string;
- nextYear: string;
- year: string;
- today: string;
- month: string;
- week: string;
- day: string;
- };
- allDayText: string;
- agendaEventMinHeight: number;
- theme: boolean;
- dragOpacity: number;
- dragRevertDuration: number;
- dragScroll: boolean;
- unselectAuto: boolean;
- dropAccept: string;
- eventOrder: string;
- eventLimit: boolean;
- eventLimitText: string;
- eventLimitClick: string;
- dayPopoverFormat: string;
- handleWindowResize: boolean;
- windowResizeDelay: number;
- longPressDelay: number;
- };
- export const englishDefaults: {
- dayPopoverFormat: string;
- };
- export const rtlDefaults: {
- header: {
- left: string;
- center: string;
- right: string;
- };
- buttonIcons: {
- prev: string;
- next: string;
- prevYear: string;
- nextYear: string;
- };
- themeButtonIcons: {
- prev: string;
- next: string;
- nextYear: string;
- prevYear: string;
- };
- };
- export function mergeOptions(optionObjs: any): {};
-}
-declare module 'fullcalendar/Iterator' {
- export class Default {
- items: any;
- constructor(items: any);
- proxyCall(methodName: any, ...args: any[]): any[];
- }
- export default Default;
-}
-declare module 'fullcalendar/ListenerMixin' {
- import Mixin from 'fullcalendar/Mixin';
- export interface ListenerInterface {
- listenTo(other: any, arg: any, callback?: any): any;
- stopListeningTo(other: any, eventName?: any): any;
- }
- export class Default extends Mixin implements ListenerInterface {
- listenerId: any;
- listenTo(other: any, arg: any, callback?: any): void;
- stopListeningTo(other: any, eventName?: any): void;
- getListenerNamespace(): string;
- }
- export default Default;
-}
-declare module 'fullcalendar/GlobalEmitter' {
- import { EmitterInterface } from 'fullcalendar/EmitterMixin';
- import { ListenerInterface } from 'fullcalendar/ListenerMixin';
- export class Default {
- on: EmitterInterface['on'];
- one: EmitterInterface['one'];
- off: EmitterInterface['off'];
- trigger: EmitterInterface['trigger'];
- triggerWith: EmitterInterface['triggerWith'];
- hasHandlers: EmitterInterface['hasHandlers'];
- listenTo: ListenerInterface['listenTo'];
- stopListeningTo: ListenerInterface['stopListeningTo'];
- isTouching: boolean;
- mouseIgnoreDepth: number;
- handleScrollProxy: (ev: Event) => void;
- handleTouchMoveProxy: (ev: Event) => void;
- static get(): any;
- static needed(): void;
- static unneeded(): void;
- bind(): void;
- unbind(): void;
- handleTouchStart(ev: any): void;
- handleTouchMove(ev: any): void;
- handleTouchCancel(ev: any): void;
- handleTouchEnd(ev: any): void;
- handleMouseDown(ev: any): void;
- handleMouseMove(ev: any): void;
- handleMouseUp(ev: any): void;
- handleClick(ev: any): void;
- handleSelectStart(ev: any): void;
- handleContextMenu(ev: any): void;
- handleScroll(ev: any): void;
- stopTouch(ev: any, skipMouseIgnore?: boolean): void;
- startTouchMouseIgnore(): void;
- shouldIgnoreMouse(): boolean;
- }
- export default Default;
-}
-declare module 'fullcalendar/Toolbar' {
- export class Default {
- calendar: any;
- toolbarOptions: any;
- el: any;
- viewsWithButtons: any;
- constructor(calendar: any, toolbarOptions: any);
- setToolbarOptions(newToolbarOptions: any): void;
- render(): void;
- removeElement(): void;
- renderSection(position: any): JQuery;
- updateTitle(text: any): void;
- activateButton(buttonName: any): void;
- deactivateButton(buttonName: any): void;
- disableButton(buttonName: any): void;
- enableButton(buttonName: any): void;
- getViewsWithButtons(): any;
- }
- export default Default;
-}
-declare module 'fullcalendar/src/locale' {
- import * as moment from 'moment';
- export const localeOptionHash: {};
- export function populateInstanceComputableOptions(options: any): void;
- export function datepickerLocale(localeCode: any, dpLocaleCode: any, dpOptions: any): void;
- export function locale(localeCode: any, newFcOptions: any): void;
- export function getMomentLocaleData(localeCode: any): moment.Locale;
-}
-declare module 'fullcalendar/Class' {
- export class Default {
- static extend(members: any): any;
- static mixin(members: any): void;
- }
- export default Default;
-}
-declare module 'fullcalendar/Model' {
- import Class from 'fullcalendar/Class';
- import { EmitterInterface } from 'fullcalendar/EmitterMixin';
- import { ListenerInterface } from 'fullcalendar/ListenerMixin';
- export class Default extends Class {
- on: EmitterInterface['on'];
- one: EmitterInterface['one'];
- off: EmitterInterface['off'];
- trigger: EmitterInterface['trigger'];
- triggerWith: EmitterInterface['triggerWith'];
- hasHandlers: EmitterInterface['hasHandlers'];
- listenTo: ListenerInterface['listenTo'];
- stopListeningTo: ListenerInterface['stopListeningTo'];
- _props: any;
- _watchers: any;
- _globalWatchArgs: any;
- constructor();
- static watch(name: any, ...args: any[]): void;
- constructed(): void;
- applyGlobalWatchers(): void;
- has(name: any): boolean;
- get(name: any): any;
- set(name: any, val: any): void;
- reset(newProps: any): void;
- unset(name: any): void;
- setProps(newProps: any): void;
- watch(name: any, depList: any, startFunc: any, stopFunc?: any): void;
- unwatch(name: any): void;
- _watchDeps(depList: any, startFunc: any, stopFunc: any): {
- teardown: () => void;
- flash: () => void;
- };
- flash(name: any): void;
- }
- export default Default;
-}
-declare module 'fullcalendar/OptionsManager' {
- import Model from 'fullcalendar/Model';
- export class Default extends Model {
- _calendar: any;
- dirDefaults: any;
- localeDefaults: any;
- overrides: any;
- dynamicOverrides: any;
- constructor(_calendar: any, overrides: any);
- add(newOptionHash: any): void;
- compute(): void;
- recordOverrides(newOptionHash: any): void;
- }
- export default Default;
-}
-declare module 'fullcalendar/ViewRegistry' {
- export const viewHash: {};
- export function defineView(viewName: any, viewConfig: any): void;
- export function getViewConfig(viewName: any): any;
-}
-declare module 'fullcalendar/ViewSpecManager' {
- export class Default {
- _calendar: any;
- optionsManager: any;
- viewSpecCache: any;
- constructor(optionsManager: any, _calendar: any);
- clearCache(): void;
- getViewSpec(viewType: any): any;
- getUnitViewSpec(unit: any): any;
- buildViewSpec(requestedViewType: any): any;
- buildViewSpecOptions(spec: any): void;
- buildViewSpecButtonText(spec: any, requestedViewType: any): void;
- }
- export default Default;
-}
-declare module 'fullcalendar/Theme' {
- export class Default {
- optionsManager: any;
- classes: any;
- iconClasses: any;
- baseIconClass: string;
- iconOverrideOption: any;
- iconOverrideCustomButtonOption: any;
- iconOverridePrefix: string;
- constructor(optionsManager: any);
- processIconOverride(): void;
- setIconOverride(iconOverrideHash: any): void;
- applyIconOverridePrefix(className: any): any;
- getClass(key: any): any;
- getIconClass(buttonName: any): string;
- getCustomButtonIconClass(customButtonProps: any): string;
- }
- export default Default;
-}
-declare module 'fullcalendar/src/moment-ext' {
- import * as moment from 'moment'; module 'moment' {
- interface Moment {
- hasTime(): boolean;
- time(): moment.Duration;
- stripZone(): any;
- stripTime(): any;
- }
- } let newMomentProto: any; let oldMomentProto: any; function oldMomentFormat(mom: any, formatStr?: any): any;
- export { newMomentProto, oldMomentProto, oldMomentFormat }; const momentExt: any;
- export default momentExt;
-}
-declare module 'fullcalendar/UnzonedRange' {
- export class Default {
- startMs: number;
- endMs: number;
- isStart: boolean;
- isEnd: boolean;
- constructor(startInput?: any, endInput?: any);
- static invertRanges(ranges: any, constraintRange: any): any[];
- intersect(otherRange: any): any;
- intersectsWith(otherRange: any): boolean;
- containsRange(innerRange: any): boolean;
- containsDate(date: any): boolean;
- constrainDate(date: any): any;
- equals(otherRange: any): boolean;
- clone(): Default;
- getStart(): any;
- getEnd(): any;
- as(unit: any): number;
- }
- export default Default;
-}
-declare module 'fullcalendar/ComponentFootprint' {
- export class Default {
- unzonedRange: any;
- isAllDay: boolean;
- constructor(unzonedRange: any, isAllDay: any);
- toLegacy(calendar: any): {
- start: any;
- end: any;
- };
- }
- export default Default;
-}
-declare module 'fullcalendar/EventFootprint' {
- export class Default {
- componentFootprint: any;
- eventDef: any;
- eventInstance: any;
- constructor(componentFootprint: any, eventDef: any, eventInstance: any);
- getEventLegacy(): any;
- }
- export default Default;
-}
-declare module 'fullcalendar/ParsableModelMixin' {
- import Mixin from 'fullcalendar/Mixin';
- export interface ParsableModelInterface {
- applyProps(rawProps: any): any;
- applyManualStandardProps(rawProps: any): any;
- applyMiscProps(rawProps: any): any;
- isStandardProp(propName: any): any;
- }
- export class Default extends Mixin implements ParsableModelInterface {
- standardPropMap: any;
- static defineStandardProps(propDefs: any): void;
- static copyVerbatimStandardProps(src: any, dest: any): void;
- applyProps(rawProps: any): boolean;
- applyManualStandardProps(rawProps: any): boolean;
- applyMiscProps(rawProps: any): void;
- isStandardProp(propName: any): boolean;
- }
- export default Default;
-}
-declare module 'fullcalendar/EventDef' {
- import { default as ParsableModelMixin, ParsableModelInterface } from 'fullcalendar/ParsableModelMixin';
- export abstract class Default {
- static uuid: number;
- static defineStandardProps: typeof ParsableModelMixin.defineStandardProps;
- static copyVerbatimStandardProps: typeof ParsableModelMixin.copyVerbatimStandardProps;
- applyProps: ParsableModelInterface['applyProps'];
- isStandardProp: ParsableModelInterface['isStandardProp'];
- source: any;
- id: any;
- rawId: any;
- uid: any;
- title: any;
- url: any;
- rendering: any;
- constraint: any;
- overlap: any;
- editable: any;
- startEditable: any;
- durationEditable: any;
- color: any;
- backgroundColor: any;
- borderColor: any;
- textColor: any;
- className: any;
- miscProps: any;
- constructor(source: any);
- static parse(rawInput: any, source: any): any;
- static normalizeId(id: any): string;
- static generateId(): string;
- abstract isAllDay(): any;
- abstract buildInstances(unzonedRange: any): any;
- clone(): any;
- hasInverseRendering(): boolean;
- hasBgRendering(): boolean;
- getRendering(): any;
- getConstraint(): any;
- getOverlap(): any;
- isStartExplicitlyEditable(): any;
- isDurationExplicitlyEditable(): any;
- isExplicitlyEditable(): any;
- toLegacy(): any;
- applyManualStandardProps(rawProps: any): boolean;
- applyMiscProps(rawProps: any): void;
- }
- export default Default;
-}
-declare module 'fullcalendar/EventInstance' {
- export class Default {
- def: any;
- dateProfile: any;
- constructor(def: any, dateProfile: any);
- toLegacy(): any;
- }
- export default Default;
-}
-declare module 'fullcalendar/EventDateProfile' {
- import UnzonedRange from 'fullcalendar/UnzonedRange';
- export class Default {
- start: any;
- end: any;
- unzonedRange: any;
- constructor(start: any, end: any, calendar: any);
- static parse(rawProps: any, source: any): false | Default;
- static isStandardProp(propName: any): boolean;
- isAllDay(): boolean;
- buildUnzonedRange(calendar: any): UnzonedRange;
- getEnd(calendar: any): any;
- }
- export default Default;
-}
-declare module 'fullcalendar/SingleEventDef' {
- import EventDef from 'fullcalendar/EventDef';
- import EventInstance from 'fullcalendar/EventInstance';
- export class Default extends EventDef {
- dateProfile: any;
- buildInstances(): EventInstance[];
- buildInstance(): EventInstance;
- isAllDay(): any;
- clone(): any;
- rezone(): void;
- applyManualStandardProps(rawProps: any): boolean;
- }
- export default Default;
-}
-declare module 'fullcalendar/RecurringEventDef' {
- import EventDef from 'fullcalendar/EventDef';
- export class Default extends EventDef {
- startTime: any;
- endTime: any;
- dowHash: any;
- isAllDay(): boolean;
- buildInstances(unzonedRange: any): any[];
- setDow(dowNumbers: any): void;
- clone(): any;
- }
- export default Default;
-}
-declare module 'fullcalendar/EventDefParser' {
- const _default: {
- parse: (eventInput: any, source: any) => any;
- };
- export default _default;
-}
-declare module 'fullcalendar/EventSource' {
- import { default as ParsableModelMixin, ParsableModelInterface } from 'fullcalendar/ParsableModelMixin';
- import Class from 'fullcalendar/Class';
- import Calendar from 'fullcalendar/Calendar';
- export class Default extends Class {
- static uuid: number;
- static defineStandardProps: typeof ParsableModelMixin.defineStandardProps;
- static copyVerbatimStandardProps: typeof ParsableModelMixin.copyVerbatimStandardProps;
- applyProps: ParsableModelInterface['applyProps'];
- isStandardProp: ParsableModelInterface['isStandardProp'];
- calendar: Calendar;
- id: string;
- uid: string;
- color: string;
- backgroundColor: string;
- borderColor: string;
- textColor: string;
- className: string[];
- editable: boolean;
- startEditable: boolean;
- durationEditable: boolean;
- rendering: string | null;
- overlap: boolean;
- constraint: any;
- allDayDefault: boolean;
- eventDataTransform: any;
- constructor(calendar: any);
- static parse(rawInput: any, calendar: any): false | Default;
- static normalizeId(id: any): string;
- fetch(start: any, end: any, timezone: any): void;
- removeEventDefsById(eventDefId: any): void;
- removeAllEventDefs(): void;
- getPrimitive(otherSource: any): void;
- parseEventDefs(rawEventDefs: any): any[];
- parseEventDef(rawInput: any): any;
- applyManualStandardProps(rawProps: any): boolean;
- }
- export default Default;
-}
-declare module 'fullcalendar/EventRange' {
- export class Default {
- unzonedRange: any;
- eventDef: any;
- eventInstance: any;
- constructor(unzonedRange: any, eventDef: any, eventInstance?: any);
- }
- export default Default;
-}
-declare module 'fullcalendar/src/models/event/util' {
- import EventRange from 'fullcalendar/EventRange';
- import EventFootprint from 'fullcalendar/EventFootprint';
- export function eventDefsToEventInstances(eventDefs: any, unzonedRange: any): any[];
- export function eventInstanceToEventRange(eventInstance: any): EventRange;
- export function eventRangeToEventFootprint(eventRange: any): EventFootprint;
- export function eventInstanceToUnzonedRange(eventInstance: any): any;
- export function eventFootprintToComponentFootprint(eventFootprint: any): any;
-}
-declare module 'fullcalendar/Constraints' {
- import ComponentFootprint from 'fullcalendar/ComponentFootprint';
- import EventFootprint from 'fullcalendar/EventFootprint';
- export class Default {
- eventManager: any;
- _calendar: any;
- constructor(eventManager: any, _calendar: any);
- opt(name: any): any;
- isEventInstanceGroupAllowed(eventInstanceGroup: any): boolean;
- getPeerEventInstances(eventDef: any): any;
- isSelectionFootprintAllowed(componentFootprint: any): boolean;
- isFootprintAllowed(componentFootprint: any, peerEventFootprints: any, constraintVal: any, overlapVal: any, subjectEventInstance?: any): boolean;
- isFootprintWithinConstraints(componentFootprint: any, constraintFootprints: any): boolean;
- constraintValToFootprints(constraintVal: any, isAllDay: any): any[];
- buildCurrentBusinessFootprints(isAllDay: any): any[];
- eventInstancesToFootprints(eventInstances: any): any[];
- collectOverlapEventFootprints(peerEventFootprints: any, targetFootprint: any): any[];
- parseEventDefToInstances(eventInput: any): any;
- eventRangesToEventFootprints(eventRanges: any): any[];
- eventRangeToEventFootprints(eventRange: any): EventFootprint[];
- parseFootprints(rawInput: any): ComponentFootprint[];
- footprintContainsFootprint(outerFootprint: any, innerFootprint: any): any;
- footprintsIntersect(footprint0: any, footprint1: any): any;
- }
- export default Default;
-}
-declare module 'fullcalendar/Promise' {
- const PromiseStub: {
- construct: (executor: any) => JQueryPromise<{}>;
- resolve: (val: any) => JQueryPromise<{}>;
- reject: () => JQueryPromise<{}>;
- };
- export default PromiseStub;
-}
-declare module 'fullcalendar/EventInstanceGroup' {
- export class Default {
- eventInstances: any;
- explicitEventDef: any;
- constructor(eventInstances?: any);
- getAllEventRanges(constraintRange: any): any;
- sliceRenderRanges(constraintRange: any): any;
- sliceNormalRenderRanges(constraintRange: any): any[];
- sliceInverseRenderRanges(constraintRange: any): any;
- isInverse(): any;
- getEventDef(): any;
- }
- export default Default;
-}
-declare module 'fullcalendar/EventPeriod' {
- /// <reference types="jquery" />
- import * as moment from 'moment';
- import { EmitterInterface } from 'fullcalendar/EmitterMixin';
- import UnzonedRange from 'fullcalendar/UnzonedRange';
- export class Default {
- on: EmitterInterface['on'];
- one: EmitterInterface['one'];
- off: EmitterInterface['off'];
- trigger: EmitterInterface['trigger'];
- triggerWith: EmitterInterface['triggerWith'];
- hasHandlers: EmitterInterface['hasHandlers'];
- start: moment.Moment;
- end: moment.Moment;
- timezone: any;
- unzonedRange: UnzonedRange;
- requestsByUid: any;
- pendingCnt: number;
- freezeDepth: number;
- stuntedReleaseCnt: number;
- releaseCnt: number;
- eventDefsByUid: any;
- eventDefsById: any;
- eventInstanceGroupsById: any;
- constructor(start: any, end: any, timezone: any);
- isWithinRange(start: any, end: any): boolean;
- requestSources(sources: any): void;
- requestSource(source: any): void;
- purgeSource(source: any): void;
- purgeAllSources(): void;
- getEventDefByUid(eventDefUid: any): any;
- getEventDefsById(eventDefId: any): any;
- addEventDefs(eventDefs: any): void;
- addEventDef(eventDef: any): void;
- removeEventDefsById(eventDefId: any): void;
- removeAllEventDefs(): void;
- removeEventDef(eventDef: any): void;
- getEventInstances(): any[];
- getEventInstancesWithId(eventDefId: any): any;
- getEventInstancesWithoutId(eventDefId: any): any[];
- addEventInstance(eventInstance: any, eventDefId: any): void;
- removeEventInstancesForDef(eventDef: any): void;
- tryRelease(): void;
- release(): void;
- whenReleased(): JQueryPromise<{}>;
- freeze(): void;
- thaw(): void;
- }
- export default Default;
-}
-declare module 'fullcalendar/ArrayEventSource' {
- /// <reference types="jquery" />
- import EventSource from 'fullcalendar/EventSource';
- export class Default extends EventSource {
- rawEventDefs: any;
- eventDefs: any;
- currentTimezone: any;
- constructor(calendar: any);
- static parse(rawInput: any, calendar: any): any;
- setRawEventDefs(rawEventDefs: any): void;
- fetch(start: any, end: any, timezone: any): JQueryPromise<{}>;
- addEventDef(eventDef: any): void;
- removeEventDefsById(eventDefId: any): number;
- removeAllEventDefs(): void;
- getPrimitive(): any;
- applyManualStandardProps(rawProps: any): boolean;
- }
- export default Default;
-}
-declare module 'fullcalendar/EventSourceParser' {
- const _default: {
- sourceClasses: any[];
- registerClass: (EventSourceClass: any) => void;
- parse: (rawInput: any, calendar: any) => any;
- };
- export default _default;
-}
-declare module 'fullcalendar/EventManager' {
- import EventInstanceGroup from 'fullcalendar/EventInstanceGroup';
- import { EmitterInterface } from 'fullcalendar/EmitterMixin';
- import { ListenerInterface } from 'fullcalendar/ListenerMixin';
- export class Default {
- on: EmitterInterface['on'];
- one: EmitterInterface['one'];
- off: EmitterInterface['off'];
- trigger: EmitterInterface['trigger'];
- triggerWith: EmitterInterface['triggerWith'];
- hasHandlers: EmitterInterface['hasHandlers'];
- listenTo: ListenerInterface['listenTo'];
- stopListeningTo: ListenerInterface['stopListeningTo'];
- currentPeriod: any;
- calendar: any;
- stickySource: any;
- otherSources: any;
- constructor(calendar: any);
- requestEvents(start: any, end: any, timezone: any, force: any): any;
- addSource(eventSource: any): void;
- removeSource(doomedSource: any): void;
- removeAllSources(): void;
- refetchSource(eventSource: any): void;
- refetchAllSources(): void;
- getSources(): any[];
- multiQuerySources(matchInputs: any): any[];
- querySources(matchInput: any): any[];
- getSourceById(id: any): any;
- setPeriod(eventPeriod: any): void;
- bindPeriod(eventPeriod: any): void;
- unbindPeriod(eventPeriod: any): void;
- getEventDefByUid(uid: any): any;
- addEventDef(eventDef: any, isSticky: any): void;
- removeEventDefsById(eventId: any): void;
- removeAllEventDefs(): void;
- mutateEventsWithId(eventDefId: any, eventDefMutation: any): () => void;
- buildMutatedEventInstanceGroup(eventDefId: any, eventDefMutation: any): EventInstanceGroup;
- freeze(): void;
- thaw(): void;
- getEventDefsById(eventDefId: any): any;
- getEventInstances(): any;
- getEventInstancesWithId(eventDefId: any): any;
- getEventInstancesWithoutId(eventDefId: any): any;
- }
- export default Default;
-}
-declare module 'fullcalendar/BusinessHourGenerator' {
- export class Default {
- rawComplexDef: any;
- calendar: any;
- constructor(rawComplexDef: any, calendar: any);
- buildEventInstanceGroup(isAllDay: any, unzonedRange: any): any;
- buildEventDefs(isAllDay: any): any[];
- buildEventDef(isAllDay: any, rawDef: any): any;
- }
- export default Default;
-}
-declare module 'fullcalendar/EventDefDateMutation' {
- import EventDateProfile from 'fullcalendar/EventDateProfile';
- export class Default {
- clearEnd: boolean;
- forceTimed: boolean;
- forceAllDay: boolean;
- dateDelta: any;
- startDelta: any;
- endDelta: any;
- static createFromDiff(dateProfile0: any, dateProfile1: any, largeUnit: any): any;
- buildNewDateProfile(eventDateProfile: any, calendar: any): EventDateProfile;
- setDateDelta(dateDelta: any): void;
- setStartDelta(startDelta: any): void;
- setEndDelta(endDelta: any): void;
- isEmpty(): boolean;
- }
- export default Default;
-}
-declare module 'fullcalendar/EventDefMutation' {
- export class Default {
- dateMutation: any;
- eventDefId: any;
- className: any;
- verbatimStandardProps: any;
- miscProps: any;
- static createFromRawProps(eventInstance: any, rawProps: any, largeUnit: any): any;
- mutateSingle(eventDef: any): () => void;
- setDateMutation(dateMutation: any): void;
- isEmpty(): boolean;
- }
- export default Default;
-}
-declare module 'fullcalendar/StandardTheme' {
- import Theme from 'fullcalendar/Theme';
- export class Default extends Theme {
- }
- export default Default;
-}
-declare module 'fullcalendar/JqueryUiTheme' {
- import Theme from 'fullcalendar/Theme';
- export class Default extends Theme {
- }
- export default Default;
-}
-declare module 'fullcalendar/ThemeRegistry' {
- export function defineThemeSystem(themeName: any, themeClass: any): void;
- export function getThemeSystemClass(themeSetting: any): any;
-}
-declare module 'fullcalendar/Calendar' {
- /// <reference types="jquery" />
- import * as moment from 'moment';
- import Iterator from 'fullcalendar/Iterator';
- import { EmitterInterface } from 'fullcalendar/EmitterMixin';
- import { ListenerInterface } from 'fullcalendar/ListenerMixin';
- import Toolbar from 'fullcalendar/Toolbar';
- import OptionsManager from 'fullcalendar/OptionsManager';
- import ViewSpecManager from 'fullcalendar/ViewSpecManager';
- import View from 'fullcalendar/View';
- import Theme from 'fullcalendar/Theme';
- import Constraints from 'fullcalendar/Constraints';
- import UnzonedRange from 'fullcalendar/UnzonedRange';
- import ComponentFootprint from 'fullcalendar/ComponentFootprint';
- import EventDateProfile from 'fullcalendar/EventDateProfile';
- import EventManager from 'fullcalendar/EventManager';
- import BusinessHourGenerator from 'fullcalendar/BusinessHourGenerator';
- import EventSource from 'fullcalendar/EventSource';
- import { RangeInput, MomentInput, OptionsInput, EventObjectInput, EventSourceInput } from 'fullcalendar/src/types/input-types';
- export class Default {
- static defaults: any;
- static englishDefaults: any;
- static rtlDefaults: any;
- on: EmitterInterface['on'];
- one: EmitterInterface['one'];
- off: EmitterInterface['off'];
- trigger: EmitterInterface['trigger'];
- triggerWith: EmitterInterface['triggerWith'];
- hasHandlers: EmitterInterface['hasHandlers'];
- listenTo: ListenerInterface['listenTo'];
- stopListeningTo: ListenerInterface['stopListeningTo'];
- view: View;
- viewsByType: {
- [viewName: string]: View;
- };
- currentDate: moment.Moment;
- theme: Theme;
- eventManager: EventManager;
- constraints: Constraints;
- optionsManager: OptionsManager;
- viewSpecManager: ViewSpecManager;
- businessHourGenerator: BusinessHourGenerator;
- loadingLevel: number;
- defaultAllDayEventDuration: moment.Duration;
- defaultTimedEventDuration: moment.Duration;
- localeData: object;
- el: JQuery;
- contentEl: JQuery;
- suggestedViewHeight: number;
- ignoreUpdateViewSize: number;
- freezeContentHeightDepth: number;
- windowResizeProxy: any;
- header: Toolbar;
- footer: Toolbar;
- toolbarsManager: Iterator;
- constructor(el: JQuery, overrides: OptionsInput);
- constructed(): void;
- getView(): View;
- publiclyTrigger(name: string, triggerInfo: any): any;
- hasPublicHandlers(name: string): boolean;
- option(name: string | object, value?: any): any;
- opt(name: string): any;
- instantiateView(viewType: string): View;
- isValidViewType(viewType: string): boolean;
- changeView(viewName: string, dateOrRange: RangeInput | MomentInput): void;
- zoomTo(newDate: moment.Moment, viewType?: string): void;
- initCurrentDate(): void;
- prev(): void;
- next(): void;
- prevYear(): void;
- nextYear(): void;
- today(): void;
- gotoDate(zonedDateInput: any): void;
- incrementDate(delta: any): void;
- getDate(): moment.Moment;
- pushLoading(): void;
- popLoading(): void;
- render(): void;
- initialRender(): void;
- destroy(): void;
- elementVisible(): boolean;
- bindViewHandlers(view: any): void;
- unbindViewHandlers(view: any): void;
- renderView(viewType?: string): void;
- clearView(): void;
- reinitView(): void;
- getSuggestedViewHeight(): number;
- isHeightAuto(): boolean;
- updateViewSize(isResize?: boolean): boolean;
- calcSize(): void;
- _calcSize(): void;
- windowResize(ev: JQueryEventObject): void;
- freezeContentHeight(): void;
- forceFreezeContentHeight(): void;
- thawContentHeight(): void;
- initToolbars(): void;
- computeHeaderOptions(): {
- extraClasses: string;
- layout: any;
- };
- computeFooterOptions(): {
- extraClasses: string;
- layout: any;
- };
- renderHeader(): void;
- renderFooter(): void;
- setToolbarsTitle(title: string): void;
- updateToolbarButtons(dateProfile: any): void;
- queryToolbarsHeight(): any;
- select(zonedStartInput: MomentInput, zonedEndInput?: MomentInput): void;
- unselect(): void;
- buildSelectFootprint(zonedStartInput: MomentInput, zonedEndInput?: MomentInput): ComponentFootprint;
- initMomentInternals(): void;
- moment(...args: any[]): moment.Moment;
- msToMoment(ms: number, forceAllDay: boolean): moment.Moment;
- msToUtcMoment(ms: number, forceAllDay: boolean): moment.Moment;
- localizeMoment(mom: any): void;
- getIsAmbigTimezone(): boolean;
- applyTimezone(date: moment.Moment): moment.Moment;
- footprintToDateProfile(componentFootprint: any, ignoreEnd?: boolean): EventDateProfile;
- getNow(): moment.Moment;
- humanizeDuration(duration: moment.Duration): string;
- parseUnzonedRange(rangeInput: RangeInput): UnzonedRange;
- initEventManager(): void;
- requestEvents(start: moment.Moment, end: moment.Moment): any;
- getEventEnd(event: any): moment.Moment;
- getDefaultEventEnd(allDay: boolean, zonedStart: moment.Moment): moment.Moment;
- rerenderEvents(): void;
- refetchEvents(): void;
- renderEvents(eventInputs: EventObjectInput[], isSticky?: boolean): void;
- renderEvent(eventInput: EventObjectInput, isSticky?: boolean): void;
- removeEvents(legacyQuery: any): void;
- clientEvents(legacyQuery: any): any;
- updateEvents(eventPropsArray: EventObjectInput[]): void;
- updateEvent(eventProps: EventObjectInput): void;
- getEventSources(): EventSource;
- getEventSourceById(id: any): EventSource;
- addEventSource(sourceInput: EventSourceInput): void;
- removeEventSources(sourceMultiQuery: any): void;
- removeEventSource(sourceQuery: any): void;
- refetchEventSources(sourceMultiQuery: any): void;
- }
- export default Default;
-}
-declare module 'fullcalendar/DateProfileGenerator' {
- import * as moment from 'moment';
- import UnzonedRange from 'fullcalendar/UnzonedRange';
- export class Default {
- _view: any;
- constructor(_view: any);
- opt(name: any): any;
- trimHiddenDays(unzonedRange: any): any;
- msToUtcMoment(ms: any, forceAllDay: any): any;
- buildPrev(currentDateProfile: any): {
- validUnzonedRange: any;
- currentUnzonedRange: any;
- currentRangeUnit: any;
- isRangeAllDay: any;
- activeUnzonedRange: any;
- renderUnzonedRange: any;
- minTime: any;
- maxTime: any;
- isValid: any;
- date: any;
- dateIncrement: any;
- };
- buildNext(currentDateProfile: any): {
- validUnzonedRange: any;
- currentUnzonedRange: any;
- currentRangeUnit: any;
- isRangeAllDay: any;
- activeUnzonedRange: any;
- renderUnzonedRange: any;
- minTime: any;
- maxTime: any;
- isValid: any;
- date: any;
- dateIncrement: any;
- };
- build(date: any, direction: any, forceToValid?: boolean): {
- validUnzonedRange: any;
- currentUnzonedRange: any;
- currentRangeUnit: any;
- isRangeAllDay: any;
- activeUnzonedRange: any;
- renderUnzonedRange: any;
- minTime: any;
- maxTime: any;
- isValid: any;
- date: any;
- dateIncrement: any;
- };
- buildValidRange(): any;
- buildCurrentRangeInfo(date: any, direction: any): {
- duration: any;
- unit: any;
- unzonedRange: any;
- };
- getFallbackDuration(): moment.Duration;
- adjustActiveRange(unzonedRange: any, minTime: any, maxTime: any): UnzonedRange;
- buildRangeFromDuration(date: any, direction: any, duration: any, unit: any): any;
- buildRangeFromDayCount(date: any, direction: any, dayCount: any): UnzonedRange;
- buildCustomVisibleRange(date: any): any;
- buildRenderRange(currentUnzonedRange: any, currentRangeUnit: any, isRangeAllDay: any): any;
- buildDateIncrement(fallback: any): any;
- }
- export default Default;
-}
-declare module 'fullcalendar/src/date-formatting' {
- export function formatDate(date: any, formatStr: any): any;
- export function formatRange(date1: any, date2: any, formatStr: any, separator: any, isRTL: any): any;
- export function queryMostGranularFormatUnit(formatStr: any): any;
-}
-declare module 'fullcalendar/Component' {
- import Model from 'fullcalendar/Model';
- export class Default extends Model {
- el: any;
- setElement(el: any): void;
- removeElement(): void;
- bindGlobalHandlers(): void;
- unbindGlobalHandlers(): void;
- renderSkeleton(): void;
- unrenderSkeleton(): void;
- }
- export default Default;
-}
-declare module 'fullcalendar/DateComponent' {
- import Component from 'fullcalendar/Component';
- import EventFootprint from 'fullcalendar/EventFootprint';
- export abstract class Default extends Component {
- static guid: number;
- eventRendererClass: any;
- helperRendererClass: any;
- businessHourRendererClass: any;
- fillRendererClass: any;
- uid: any;
- childrenByUid: any;
- isRTL: boolean;
- nextDayThreshold: any;
- dateProfile: any;
- eventRenderer: any;
- helperRenderer: any;
- businessHourRenderer: any;
- fillRenderer: any;
- hitsNeededDepth: number;
- hasAllDayBusinessHours: boolean;
- isDatesRendered: boolean;
- constructor(_view?: any, _options?: any);
- addChild(child: any): boolean;
- removeChild(child: any): boolean;
- updateSize(totalHeight: any, isAuto: any, isResize: any): void;
- opt(name: any): any;
- publiclyTrigger(...args: any[]): any;
- hasPublicHandlers(...args: any[]): any;
- executeDateRender(dateProfile: any): void;
- executeDateUnrender(): void;
- renderDates(dateProfile: any): void;
- unrenderDates(): void;
- getNowIndicatorUnit(): void;
- renderNowIndicator(date: any): void;
- unrenderNowIndicator(): void;
- renderBusinessHours(businessHourGenerator: any): void;
- unrenderBusinessHours(): void;
- executeEventRender(eventsPayload: any): void;
- executeEventUnrender(): void;
- getBusinessHourSegs(): any;
- getOwnBusinessHourSegs(): any;
- getEventSegs(): any;
- getOwnEventSegs(): any;
- triggerAfterEventsRendered(): void;
- triggerAfterEventSegsRendered(segs: any): void;
- triggerBeforeEventsDestroyed(): void;
- triggerBeforeEventSegsDestroyed(segs: any): void;
- showEventsWithId(eventDefId: any): void;
- hideEventsWithId(eventDefId: any): void;
- renderDrag(eventFootprints: any, seg: any, isTouch: any): boolean;
- unrenderDrag(): void;
- renderEventResize(eventFootprints: any, seg: any, isTouch: any): void;
- unrenderEventResize(): void;
- renderSelectionFootprint(componentFootprint: any): void;
- unrenderSelection(): void;
- renderHighlight(componentFootprint: any): void;
- unrenderHighlight(): void;
- hitsNeeded(): void;
- hitsNotNeeded(): void;
- prepareHits(): void;
- releaseHits(): void;
- queryHit(leftOffset: any, topOffset: any): any;
- getSafeHitFootprint(hit: any): any;
- getHitFootprint(hit: any): any;
- getHitEl(hit: any): any;
- eventRangesToEventFootprints(eventRanges: any): any[];
- eventRangeToEventFootprints(eventRange: any): EventFootprint[];
- eventFootprintsToSegs(eventFootprints: any): any[];
- eventFootprintToSegs(eventFootprint: any): any;
- componentFootprintToSegs(componentFootprint: any): any[];
- callChildren(methodName: any, args: any): void;
- iterChildren(func: any): void;
- _getCalendar(): any;
- _getView(): any;
- _getDateProfile(): any;
- buildGotoAnchorHtml(gotoOptions: any, attrs: any, innerHtml: any): string;
- getAllDayHtml(): any;
- getDayClasses(date: any, noThemeHighlight?: any): any[];
- formatRange(range: any, isAllDay: any, formatStr: any, separator: any): any;
- currentRangeAs(unit: any): any;
- computeDayRange(unzonedRange: any): {
- start: any;
- end: any;
- };
- isMultiDayRange(unzonedRange: any): boolean;
- }
- export default Default;
-}
-declare module 'fullcalendar/InteractiveDateComponent' {
- import * as moment from 'moment';
- import DateComponent from 'fullcalendar/DateComponent';
- export abstract class Default extends DateComponent {
- dateClickingClass: any;
- dateSelectingClass: any;
- eventPointingClass: any;
- eventDraggingClass: any;
- eventResizingClass: any;
- externalDroppingClass: any;
- dateClicking: any;
- dateSelecting: any;
- eventPointing: any;
- eventDragging: any;
- eventResizing: any;
- externalDropping: any;
- segSelector: string;
- largeUnit: any;
- constructor(_view?: any, _options?: any);
- setElement(el: any): void;
- removeElement(): void;
- executeEventUnrender(): void;
- bindGlobalHandlers(): void;
- unbindGlobalHandlers(): void;
- bindDateHandlerToEl(el: any, name: any, handler: any): void;
- bindAllSegHandlersToEl(el: any): void;
- bindSegHandlerToEl(el: any, name: any, handler: any): void;
- shouldIgnoreMouse(): any;
- shouldIgnoreTouch(): any;
- shouldIgnoreEventPointing(): any;
- canStartSelection(seg: any, ev: any): any;
- canStartDrag(seg: any, ev: any): any;
- canStartResize(seg: any, ev: any): boolean;
- endInteractions(): void;
- isEventDefDraggable(eventDef: any): any;
- isEventDefStartEditable(eventDef: any): any;
- isEventDefGenerallyEditable(eventDef: any): any;
- isEventDefResizableFromStart(eventDef: any): any;
- isEventDefResizableFromEnd(eventDef: any): any;
- isEventDefResizable(eventDef: any): any;
- diffDates(a: any, b: any): moment.Duration;
- isEventInstanceGroupAllowed(eventInstanceGroup: any): any;
- isExternalInstanceGroupAllowed(eventInstanceGroup: any): boolean;
- }
- export default Default;
-}
-declare module 'fullcalendar/View' {
- import * as moment from 'moment';
- import RenderQueue from 'fullcalendar/RenderQueue';
- import Calendar from 'fullcalendar/Calendar';
- import InteractiveDateComponent from 'fullcalendar/InteractiveDateComponent';
- import UnzonedRange from 'fullcalendar/UnzonedRange';
- import EventInstance from 'fullcalendar/EventInstance';
- export abstract class Default extends InteractiveDateComponent {
- type: string;
- name: string;
- title: string;
- calendar: Calendar;
- viewSpec: any;
- options: any;
- renderQueue: RenderQueue;
- batchRenderDepth: number;
- queuedScroll: object;
- isSelected: boolean;
- selectedEventInstance: EventInstance;
- eventOrderSpecs: any;
- isHiddenDayHash: boolean[];
- isNowIndicatorRendered: boolean;
- initialNowDate: moment.Moment;
- initialNowQueriedMs: number;
- nowIndicatorTimeoutID: any;
- nowIndicatorIntervalID: any;
- dateProfileGeneratorClass: any;
- dateProfileGenerator: any;
- usesMinMaxTime: boolean;
- start: moment.Moment;
- end: moment.Moment;
- intervalStart: moment.Moment;
- intervalEnd: moment.Moment;
- constructor(calendar: any, viewSpec: any);
- _getView(): this;
- opt(name: any): any;
- initRenderQueue(): void;
- onRenderQueueStart(): void;
- onRenderQueueStop(): void;
- startBatchRender(): void;
- stopBatchRender(): void;
- requestRender(func: any, namespace: any, actionType: any): void;
- whenSizeUpdated(func: any): void;
- computeTitle(dateProfile: any): any;
- computeTitleFormat(dateProfile: any): any;
- setDate(date: any): void;
- unsetDate(): void;
- fetchInitialEvents(dateProfile: any): any;
- bindEventChanges(): void;
- unbindEventChanges(): void;
- setEvents(eventsPayload: any): void;
- unsetEvents(): void;
- resetEvents(eventsPayload: any): void;
- requestDateRender(dateProfile: any): void;
- requestDateUnrender(): void;
- executeDateRender(dateProfile: any): void;
- executeDateUnrender(): void;
- bindBaseRenderHandlers(): void;
- triggerViewRender(): void;
- triggerViewDestroy(): void;
- requestEventsRender(eventsPayload: any): void;
- requestEventsUnrender(): void;
- requestBusinessHoursRender(businessHourGenerator: any): void;
- requestBusinessHoursUnrender(): void;
- bindGlobalHandlers(): void;
- unbindGlobalHandlers(): void;
- startNowIndicator(): void;
- updateNowIndicator(): void;
- stopNowIndicator(): void;
- updateSize(totalHeight: any, isAuto: any, isResize: any): void;
- addScroll(scroll: any): void;
- popScroll(): void;
- applyQueuedScroll(): void;
- queryScroll(): {};
- applyScroll(scroll: any): void;
- computeInitialDateScroll(): {};
- queryDateScroll(): {};
- applyDateScroll(scroll: any): void;
- reportEventDrop(eventInstance: any, eventMutation: any, el: any, ev: any): void;
- triggerEventDrop(eventInstance: any, dateDelta: any, undoFunc: any, el: any, ev: any): void;
- reportExternalDrop(singleEventDef: any, isEvent: any, isSticky: any, el: any, ev: any, ui: any): void;
- triggerExternalDrop(singleEventDef: any, isEvent: any, el: any, ev: any, ui: any): void;
- reportEventResize(eventInstance: any, eventMutation: any, el: any, ev: any): void;
- triggerEventResize(eventInstance: any, durationDelta: any, undoFunc: any, el: any, ev: any): void;
- select(footprint: any, ev?: any): void;
- renderSelectionFootprint(footprint: any): void;
- reportSelection(footprint: any, ev?: any): void;
- triggerSelect(footprint: any, ev?: any): void;
- unselect(ev?: any): void;
- selectEventInstance(eventInstance: any): void;
- unselectEventInstance(): void;
- isEventDefSelected(eventDef: any): boolean;
- handleDocumentMousedown(ev: any): void;
- processUnselect(ev: any): void;
- processRangeUnselect(ev: any): void;
- processEventUnselect(ev: any): void;
- triggerBaseRendered(): void;
- triggerBaseUnrendered(): void;
- triggerDayClick(footprint: any, dayEl: any, ev: any): void;
- isDateInOtherMonth(date: any, dateProfile: any): boolean;
- getUnzonedRangeOption(name: any): UnzonedRange;
- initHiddenDays(): void;
- trimHiddenDays(inputUnzonedRange: any): UnzonedRange;
- isHiddenDay(day: any): boolean;
- skipHiddenDays(date: any, inc?: number, isExclusive?: boolean): any;
- }
- export default Default;
-}
-declare module 'fullcalendar/src/types/input-types' {
- /// <reference types="jquery" />
- import * as moment from 'moment';
- import View from 'fullcalendar/View';
- import EventSource from 'fullcalendar/EventSource';
- export type MomentInput = moment.Moment | Date | object | string | number;
- export type DurationInput = moment.Duration | object | string | number;
- export interface RangeInput {
- start?: MomentInput;
- end?: MomentInput;
- }
- export type ConstraintInput = RangeInput | BusinessHoursInput | 'businessHours';
- export interface EventOptionsBase {
- className?: string | string[];
- editable?: boolean;
- startEditable?: boolean;
- durationEditable?: boolean;
- rendering?: string;
- overlap?: boolean;
- constraint?: ConstraintInput;
- color?: string;
- backgroundColor?: string;
- borderColor?: string;
- textColor?: string;
- }
- export interface EventObjectInput extends EventOptionsBase, RangeInput {
- _id?: string;
- id?: string | number;
- title: string;
- allDay?: boolean;
- url?: string;
- source?: EventSource;
- [customField: string]: any;
- }
- export type EventSourceFunction = (start: moment.Moment, end: moment.Moment, timezone: string, callback: ((events: EventObjectInput[]) => void)) => void;
- export type EventSourceSimpleInput = EventObjectInput[] | EventSourceFunction | string;
- export interface EventSourceExtendedInput extends EventOptionsBase, JQueryAjaxSettings {
- url?: string;
- events?: EventSourceSimpleInput;
- allDayDefault?: boolean;
- startParam?: string;
- endParam?: string;
- eventDataTransform?(eventData: any): EventObjectInput;
- }
- export type EventSourceInput = EventSourceSimpleInput | EventSourceExtendedInput;
- export interface ToolbarInput {
- left?: string;
- center?: string;
- right?: string;
- }
- export interface CustomButtonInput {
- text: string;
- icon?: string;
- themeIcon?: string;
- bootstrapGlyphicon?: string;
- bootstrapFontAwesome?: string;
- click(element: JQuery): 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 BusinessHoursInput {
- start?: MomentInput;
- end?: MomentInput;
- dow?: number[];
- }
- export interface EventSegment {
- event: EventObjectInput;
- start: moment.Moment;
- end: moment.Moment;
- isStart: boolean;
- isEnd: boolean;
- }
- export interface CellInfo {
- date: moment.Moment;
- dayEl: JQuery;
- moreEl: JQuery;
- segs: EventSegment[];
- hiddenSegs: EventSegment[];
- }
- export interface DropInfo {
- start: moment.Moment;
- end: moment.Moment;
- }
- export interface OptionsInputBase {
- header?: boolean | ToolbarInput;
- footer?: boolean | ToolbarInput;
- customButtons?: {
- [name: string]: CustomButtonInput;
- };
- buttonIcons?: boolean | ButtonIconsInput;
- themeSystem?: 'standard' | 'bootstrap3' | 'bootstrap4' | 'jquery-ui';
- themeButtonIcons?: boolean | ButtonIconsInput;
- bootstrapGlyphicons?: boolean | ButtonIconsInput;
- bootstrapFontAwesome?: boolean | ButtonIconsInput;
- firstDay?: number;
- isRTL?: boolean;
- weekends?: boolean;
- hiddenDays?: number[];
- fixedWeekCount?: boolean;
- weekNumbers?: boolean;
- weekNumbersWithinDays?: boolean;
- weekNumberCalculation?: 'local' | 'ISO' | ((m: moment.Moment) => number);
- businessHours?: boolean | BusinessHoursInput | 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' | string | ((cellinfo: CellInfo, jsevent: Event) => void);
- timezone?: string | boolean;
- now?: MomentInput | (() => MomentInput);
- defaultView?: string;
- allDaySlot?: boolean;
- allDayText?: string;
- slotDuration?: DurationInput;
- slotLabelFormat?: string;
- slotLabelInterval?: DurationInput;
- snapDuration?: DurationInput;
- scrollTime?: DurationInput;
- minTime?: DurationInput;
- maxTime?: DurationInput;
- slotEventOverlap?: boolean;
- listDayFormat?: string | boolean;
- listDayAltFormat?: string | boolean;
- noEventsMessage?: string;
- defaultDate?: MomentInput;
- nowIndicator?: boolean;
- visibleRange?: ((currentDate: moment.Moment) => RangeInput) | RangeInput;
- validRange?: RangeInput;
- dateIncrement?: DurationInput;
- dateAlignment?: string;
- duration?: DurationInput;
- dayCount?: number;
- locale?: string;
- timeFormat?: string;
- columnHeader?: boolean;
- columnHeaderFormat?: string;
- columnHeaderText?: string | ((date: MomentInput) => string);
- columnHeaderHtml?: string | ((date: MomentInput) => string);
- titleFormat?: string;
- monthNames?: string[];
- monthNamesShort?: string[];
- dayNames?: string[];
- dayNamesShort?: string[];
- weekNumberTitle?: string;
- displayEventTime?: boolean;
- displayEventEnd?: boolean;
- eventLimitText?: string | ((eventCnt: number) => string);
- dayPopoverFormat?: string;
- navLinks?: boolean;
- navLinkDayClick?: string | ((date: moment.Moment, jsEvent: Event) => void);
- navLinkWeekClick?: string | ((weekStart: any, jsEvent: Event) => void);
- selectable?: boolean;
- selectHelper?: boolean;
- unselectAuto?: boolean;
- unselectCancel?: string;
- selectOverlap?: boolean | ((event: EventObjectInput) => boolean);
- selectConstraint?: ConstraintInput;
- events?: EventSourceInput;
- eventSources?: EventSourceInput[];
- allDayDefault?: boolean;
- startParam?: string;
- endParam?: string;
- lazyFetching?: boolean;
- eventColor?: string;
- eventBackgroundColor?: string;
- eventBorderColor?: string;
- eventTextColor?: string;
- nextDayThreshold?: DurationInput;
- eventOrder?: string | Array<((a: EventObjectInput, b: EventObjectInput) => number) | (string | ((a: EventObjectInput, b: EventObjectInput) => number))>;
- eventRenderWait?: number | null;
- editable?: boolean;
- eventStartEditable?: boolean;
- eventDurationEditable?: boolean;
- dragRevertDuration?: number;
- dragOpacity?: number;
- dragScroll?: boolean;
- eventOverlap?: boolean | ((stillEvent: EventObjectInput, movingEvent: EventObjectInput) => boolean);
- eventConstraint?: ConstraintInput;
- eventAllow?: ((dropInfo: DropInfo, draggedEvent: Event) => boolean);
- longPressDelay?: number;
- eventLongPressDelay?: number;
- droppable?: boolean;
- dropAccept?: string | ((draggable: any) => boolean);
- viewRender?(view: View, element: JQuery): void;
- viewDestroy?(view: View, element: JQuery): void;
- dayRender?(date: moment.Moment, cell: JQuery): void;
- windowResize?(view: View): void;
- dayClick?(date: moment.Moment, jsEvent: MouseEvent, view: View, resourceObj?: any): void;
- eventClick?(event: EventObjectInput, jsEvent: MouseEvent, view: View): boolean | void;
- eventMouseover?(event: EventObjectInput, jsEvent: MouseEvent, view: View): void;
- eventMouseout?(event: EventObjectInput, jsEvent: MouseEvent, view: View): void;
- select?(start: moment.Moment, end: moment.Moment, jsEvent: MouseEvent, view: View, resource?: any): void;
- unselect?(view: View, jsEvent: Event): void;
- eventDataTransform?(eventData: any): EventObjectInput;
- loading?(isLoading: boolean, view: View): void;
- eventRender?(event: EventObjectInput, element: JQuery, view: View): void;
- eventAfterRender?(event: EventObjectInput, element: JQuery, view: View): void;
- eventAfterAllRender?(view: View): void;
- eventDestroy?(event: EventObjectInput, element: JQuery, view: View): void;
- eventDragStart?(event: EventObjectInput, jsEvent: MouseEvent, ui: any, view: View): void;
- eventDragStop?(event: EventObjectInput, jsEvent: MouseEvent, ui: any, view: View): void;
- eventDrop?(event: EventObjectInput, delta: moment.Duration, revertFunc: Function, jsEvent: Event, ui: any, view: View): void;
- eventResizeStart?(event: EventObjectInput, jsEvent: MouseEvent, ui: any, view: View): void;
- eventResizeStop?(event: EventObjectInput, jsEvent: MouseEvent, ui: any, view: View): void;
- eventResize?(event: EventObjectInput, delta: moment.Duration, revertFunc: Function, jsEvent: Event, ui: any, view: View): void;
- drop?(date: moment.Moment, jsEvent: MouseEvent, ui: any): void;
- eventReceive?(event: EventObjectInput): void;
- }
- export interface ViewOptionsInput extends OptionsInputBase {
- type?: string;
- buttonText?: string;
- }
- export interface OptionsInput extends OptionsInputBase {
- buttonText?: ButtonTextCompoundInput;
- views?: {
- [viewId: string]: ViewOptionsInput;
- };
- }
-}
-declare module 'fullcalendar/FuncEventSource' {
- /// <reference types="jquery" />
- import EventSource from 'fullcalendar/EventSource';
- export class Default extends EventSource {
- func: any;
- static parse(rawInput: any, calendar: any): any;
- fetch(start: any, end: any, timezone: any): JQueryPromise<{}>;
- getPrimitive(): any;
- applyManualStandardProps(rawProps: any): boolean;
- }
- export default Default;
-}
-declare module 'fullcalendar/JsonFeedEventSource' {
- /// <reference types="jquery" />
- import EventSource from 'fullcalendar/EventSource';
- export class Default extends EventSource {
- static AJAX_DEFAULTS: {
- dataType: string;
- cache: boolean;
- };
- url: any;
- startParam: any;
- endParam: any;
- timezoneParam: any;
- ajaxSettings: any;
- static parse(rawInput: any, calendar: any): any;
- fetch(start: any, end: any, timezone: any): JQueryPromise<{}>;
- buildRequestParams(start: any, end: any, timezone: any): {};
- getPrimitive(): any;
- applyMiscProps(rawProps: any): void;
- }
- export default Default;
-}
-declare module 'fullcalendar/CoordCache' {
- export class Default {
- els: any;
- forcedOffsetParentEl: any;
- origin: any;
- boundingRect: any;
- isHorizontal: boolean;
- isVertical: boolean;
- lefts: any;
- rights: any;
- tops: any;
- bottoms: any;
- constructor(options: any);
- build(): void;
- clear(): void;
- ensureBuilt(): void;
- buildElHorizontals(): void;
- buildElVerticals(): void;
- getHorizontalIndex(leftOffset: any): any;
- getVerticalIndex(topOffset: any): any;
- getLeftOffset(leftIndex: any): any;
- getLeftPosition(leftIndex: any): number;
- getRightOffset(leftIndex: any): any;
- getRightPosition(leftIndex: any): number;
- getWidth(leftIndex: any): number;
- getTopOffset(topIndex: any): any;
- getTopPosition(topIndex: any): number;
- getBottomOffset(topIndex: any): any;
- getBottomPosition(topIndex: any): number;
- getHeight(topIndex: any): number;
- queryBoundingRect(): {
- left: number;
- right: any;
- top: number;
- bottom: any;
- };
- isPointInBounds(leftOffset: any, topOffset: any): boolean;
- isLeftInBounds(leftOffset: any): boolean;
- isTopInBounds(topOffset: any): boolean;
- }
- export default Default;
-}
-declare module 'fullcalendar/DragListener' {
- import { ListenerInterface } from 'fullcalendar/ListenerMixin';
- export class Default {
- listenTo: ListenerInterface['listenTo'];
- stopListeningTo: ListenerInterface['stopListeningTo'];
- options: any;
- subjectEl: any;
- originX: any;
- originY: any;
- scrollEl: any;
- isInteracting: boolean;
- isDistanceSurpassed: boolean;
- isDelayEnded: boolean;
- isDragging: boolean;
- isTouch: boolean;
- isGeneric: boolean;
- delay: any;
- delayTimeoutId: any;
- minDistance: any;
- shouldCancelTouchScroll: boolean;
- scrollAlwaysKills: boolean;
- isAutoScroll: boolean;
- scrollBounds: any;
- scrollTopVel: any;
- scrollLeftVel: any;
- scrollIntervalId: any;
- scrollSensitivity: number;
- scrollSpeed: number;
- scrollIntervalMs: number;
- constructor(options: any);
- startInteraction(ev: any, extraOptions?: any): void;
- handleInteractionStart(ev: any): void;
- endInteraction(ev: any, isCancelled: any): void;
- handleInteractionEnd(ev: any, isCancelled: any): void;
- bindHandlers(): void;
- unbindHandlers(): void;
- startDrag(ev: any, extraOptions?: any): void;
- handleDragStart(ev: any): void;
- handleMove(ev: any): void;
- handleDrag(dx: any, dy: any, ev: any): void;
- endDrag(ev: any): void;
- handleDragEnd(ev: any): void;
- startDelay(initialEv: any): void;
- handleDelayEnd(initialEv: any): void;
- handleDistanceSurpassed(ev: any): void;
- handleTouchMove(ev: any): void;
- handleMouseMove(ev: any): void;
- handleTouchScroll(ev: any): void;
- trigger(name: any, ...args: any[]): void;
- initAutoScroll(): void;
- destroyAutoScroll(): void;
- computeScrollBounds(): void;
- updateAutoScroll(ev: any): void;
- setScrollVel(topVel: any, leftVel: any): void;
- constrainScrollVel(): void;
- scrollIntervalFunc(): void;
- endAutoScroll(): void;
- handleDebouncedScroll(): void;
- handleScrollEnd(): void;
- }
- export default Default;
-}
-declare module 'fullcalendar/Scroller' {
- import Class from 'fullcalendar/Class';
- export class Default extends Class {
- el: any;
- scrollEl: any;
- overflowX: any;
- overflowY: any;
- constructor(options?: any);
- render(): void;
- renderEl(): JQuery;
- clear(): void;
- destroy(): void;
- applyOverflow(): void;
- lockOverflow(scrollbarWidths: any): void;
- setHeight(height: any): void;
- getScrollTop(): any;
- setScrollTop(top: any): void;
- getClientWidth(): any;
- getClientHeight(): any;
- getScrollbarWidths(): any;
- }
- export default Default;
-}
-declare module 'fullcalendar/DayTableMixin' {
- import Mixin from 'fullcalendar/Mixin';
- export interface DayTableInterface {
- dayDates: any;
- daysPerRow: any;
- rowCnt: any;
- colCnt: any;
- updateDayTable(): any;
- renderHeadHtml(): any;
- renderBgTrHtml(row: any): any;
- bookendCells(trEl: any): any;
- getCellDate(row: any, col: any): any;
- getCellRange(row: any, col: any): any;
- sliceRangeByDay(unzonedRange: any): any;
- sliceRangeByRow(unzonedRange: any): any;
- renderIntroHtml(): any;
- }
- export class Default extends Mixin implements DayTableInterface {
- breakOnWeeks: boolean;
- dayDates: any;
- dayIndices: any;
- daysPerRow: any;
- rowCnt: any;
- colCnt: any;
- colHeadFormat: any;
- updateDayTable(): void;
- updateDayTableCols(): void;
- computeColCnt(): any;
- getCellDate(row: any, col: any): any;
- getCellRange(row: any, col: any): {
- start: any;
- end: any;
- };
- getCellDayIndex(row: any, col: any): any;
- getColDayIndex(col: any): any;
- getDateDayIndex(date: any): any;
- computeColHeadFormat(): any;
- sliceRangeByRow(unzonedRange: any): any[];
- sliceRangeByDay(unzonedRange: any): any[];
- renderHeadHtml(): string;
- renderHeadIntroHtml(): void;
- renderHeadTrHtml(): string;
- renderHeadDateCellsHtml(): string;
- renderHeadDateCellHtml(date: any, colspan: any, otherAttrs: any): string;
- renderBgTrHtml(row: any): string;
- renderBgIntroHtml(row: any): void;
- renderBgCellsHtml(row: any): string;
- renderBgCellHtml(date: any, otherAttrs: any): string;
- renderIntroHtml(): void;
- bookendCells(trEl: any): void;
- }
- export default Default;
-}
-declare module 'fullcalendar/BusinessHourRenderer' {
- export class Default {
- component: any;
- fillRenderer: any;
- segs: any;
- constructor(component: any, fillRenderer: any);
- render(businessHourGenerator: any): void;
- renderEventFootprints(eventFootprints: any): void;
- renderSegs(segs: any): void;
- unrender(): void;
- getSegs(): any;
- }
- export default Default;
-}
-declare module 'fullcalendar/EventRenderer' {
- export class Default {
- view: any;
- component: any;
- fillRenderer: any;
- fgSegs: any;
- bgSegs: any;
- eventTimeFormat: any;
- displayEventTime: any;
- displayEventEnd: any;
- constructor(component: any, fillRenderer: any);
- opt(name: any): any;
- rangeUpdated(): void;
- render(eventsPayload: any): void;
- unrender(): void;
- renderFgRanges(eventRanges: any): void;
- unrenderFgRanges(): void;
- renderBgRanges(eventRanges: any): void;
- unrenderBgRanges(): void;
- getSegs(): any;
- renderFgSegs(segs: any): (boolean | void);
- unrenderFgSegs(segs: any): void;
- renderBgSegs(segs: any): boolean;
- unrenderBgSegs(): void;
- renderFgSegEls(segs: any, disableResizing?: boolean): any[];
- beforeFgSegHtml(seg: any): void;
- fgSegHtml(seg: any, disableResizing: any): void;
- getSegClasses(seg: any, isDraggable: any, isResizable: any): string[];
- filterEventRenderEl(eventFootprint: any, el: any): any;
- getTimeText(eventFootprint: any, formatStr?: any, displayEnd?: any): any;
- _getTimeText(start: any, end: any, isAllDay: any, formatStr?: any, displayEnd?: any): any;
- computeEventTimeFormat(): any;
- computeDisplayEventTime(): boolean;
- computeDisplayEventEnd(): boolean;
- getBgClasses(eventDef: any): any[];
- getClasses(eventDef: any): any[];
- getSkinCss(eventDef: any): {
- 'background-color': any;
- 'border-color': any;
- color: any;
- };
- getBgColor(eventDef: any): any;
- getBorderColor(eventDef: any): any;
- getTextColor(eventDef: any): any;
- getStylingObjs(eventDef: any): any[];
- getFallbackStylingObjs(eventDef: any): any[];
- sortEventSegs(segs: any): void;
- compareEventSegs(seg1: any, seg2: any): any;
- }
- export default Default;
-}
-declare module 'fullcalendar/FillRenderer' {
- export class Default {
- fillSegTag: string;
- component: any;
- elsByFill: any;
- constructor(component: any);
- renderFootprint(type: any, componentFootprint: any, props: any): void;
- renderSegs(type: any, segs: any, props: any): any;
- unrender(type: any): void;
- buildSegEls(type: any, segs: any, props: any): any[];
- buildSegHtml(type: any, seg: any, props: any): string;
- attachSegEls(type: any, segs: any): void;
- reportEls(type: any, nodes: any): void;
- }
- export default Default;
-}
-declare module 'fullcalendar/HelperRenderer' {
- import EventFootprint from 'fullcalendar/EventFootprint';
- export class Default {
- view: any;
- component: any;
- eventRenderer: any;
- helperEls: any;
- constructor(component: any, eventRenderer: any);
- renderComponentFootprint(componentFootprint: any): void;
- renderEventDraggingFootprints(eventFootprints: any, sourceSeg: any, isTouch: any): void;
- renderEventResizingFootprints(eventFootprints: any, sourceSeg: any, isTouch: any): void;
- renderEventFootprints(eventFootprints: any, sourceSeg?: any, extraClassNames?: any, opacity?: any): void;
- renderSegs(segs: any, sourceSeg?: any): void;
- unrender(): void;
- fabricateEventFootprint(componentFootprint: any): EventFootprint;
- }
- export default Default;
-}
-declare module 'fullcalendar/HitDragListener' {
- import DragListener from 'fullcalendar/DragListener';
- export class Default extends DragListener {
- component: any;
- origHit: any;
- hit: any;
- coordAdjust: any;
- constructor(component: any, options: any);
- handleInteractionStart(ev: any): void;
- handleDragStart(ev: any): void;
- handleDrag(dx: any, dy: any, ev: any): void;
- handleDragEnd(ev: any): void;
- handleHitOver(hit: any): void;
- handleHitOut(): void;
- handleHitDone(): void;
- handleInteractionEnd(ev: any, isCancelled: any): void;
- handleScrollEnd(): void;
- queryHit(left: any, top: any): any;
- }
- export default Default;
-}
-declare module 'fullcalendar/Interaction' {
- export class Default {
- view: any;
- component: any;
- constructor(component: any);
- opt(name: any): any;
- end(): void;
- }
- export default Default;
-}
-declare module 'fullcalendar/ExternalDropping' {
- import { ListenerInterface } from 'fullcalendar/ListenerMixin';
- import Interaction from 'fullcalendar/Interaction';
- export class Default extends Interaction {
- listenTo: ListenerInterface['listenTo'];
- stopListeningTo: ListenerInterface['stopListeningTo'];
- dragListener: any;
- isDragging: boolean;
- end(): void;
- bindToDocument(): void;
- unbindFromDocument(): void;
- handleDragStart(ev: any, ui: any): void;
- listenToExternalDrag(el: any, ev: any, ui: any): void;
- computeExternalDrop(componentFootprint: any, meta: any): any;
- }
- export default Default;
-}
-declare module 'fullcalendar/EventResizing' {
- import HitDragListener from 'fullcalendar/HitDragListener';
- import Interaction from 'fullcalendar/Interaction';
- export class Default extends Interaction {
- eventPointing: any;
- dragListener: any;
- isResizing: boolean;
- constructor(component: any, eventPointing: any);
- end(): void;
- bindToEl(el: any): void;
- handleMouseDown(seg: any, ev: any): void;
- handleTouchStart(seg: any, ev: any): void;
- buildDragListener(seg: any, isStart: any): HitDragListener;
- segResizeStart(seg: any, ev: any): void;
- segResizeStop(seg: any, ev: any): void;
- computeEventStartResizeMutation(startFootprint: any, endFootprint: any, origEventFootprint: any): any;
- computeEventEndResizeMutation(startFootprint: any, endFootprint: any, origEventFootprint: any): any;
- }
- export default Default;
-}
-declare module 'fullcalendar/EventPointing' {
- import Interaction from 'fullcalendar/Interaction';
- export class Default extends Interaction {
- mousedOverSeg: any;
- bindToEl(el: any): void;
- handleClick(seg: any, ev: any): void;
- handleMouseover(seg: any, ev: any): void;
- handleMouseout(seg: any, ev?: any): void;
- end(): void;
- }
- export default Default;
-}
-declare module 'fullcalendar/MouseFollower' {
- import { ListenerInterface } from 'fullcalendar/ListenerMixin';
- export class Default {
- listenTo: ListenerInterface['listenTo'];
- stopListeningTo: ListenerInterface['stopListeningTo'];
- options: any;
- sourceEl: any;
- el: any;
- parentEl: any;
- top0: any;
- left0: any;
- y0: any;
- x0: any;
- topDelta: any;
- leftDelta: any;
- isFollowing: boolean;
- isHidden: boolean;
- isAnimating: boolean;
- constructor(sourceEl: any, options: any);
- start(ev: any): void;
- stop(shouldRevert: any, callback: any): void;
- getEl(): any;
- removeElement(): void;
- updatePosition(): void;
- handleMove(ev: any): void;
- hide(): void;
- show(): void;
- }
- export default Default;
-}
-declare module 'fullcalendar/EventDragging' {
- import EventDefMutation from 'fullcalendar/EventDefMutation';
- import Interaction from 'fullcalendar/Interaction';
- export class Default extends Interaction {
- eventPointing: any;
- dragListener: any;
- isDragging: boolean;
- constructor(component: any, eventPointing: any);
- end(): void;
- getSelectionDelay(): any;
- bindToEl(el: any): void;
- handleMousedown(seg: any, ev: any): void;
- handleTouchStart(seg: any, ev: any): void;
- buildSelectListener(seg: any): any;
- buildDragListener(seg: any): any;
- segDragStart(seg: any, ev: any): void;
- segDragStop(seg: any, ev: any): void;
- computeEventDropMutation(startFootprint: any, endFootprint: any, eventDef: any): EventDefMutation;
- computeEventDateMutation(startFootprint: any, endFootprint: any): any;
- }
- export default Default;
-}
-declare module 'fullcalendar/DateSelecting' {
- import HitDragListener from 'fullcalendar/HitDragListener';
- import ComponentFootprint from 'fullcalendar/ComponentFootprint';
- import Interaction from 'fullcalendar/Interaction';
- export class Default extends Interaction {
- dragListener: any;
- constructor(component: any);
- end(): void;
- getDelay(): any;
- bindToEl(el: any): void;
- buildDragListener(): HitDragListener;
- computeSelection(footprint0: any, footprint1: any): false | ComponentFootprint;
- computeSelectionFootprint(footprint0: any, footprint1: any): ComponentFootprint;
- isSelectionFootprintAllowed(componentFootprint: any): any;
- }
- export default Default;
-}
-declare module 'fullcalendar/DateClicking' {
- import HitDragListener from 'fullcalendar/HitDragListener';
- import Interaction from 'fullcalendar/Interaction';
- export class Default extends Interaction {
- dragListener: any;
- constructor(component: any);
- end(): void;
- bindToEl(el: any): void;
- buildDragListener(): HitDragListener;
- }
- export default Default;
-}
-declare module 'fullcalendar/StandardInteractionsMixin' {
- import Mixin from 'fullcalendar/Mixin';
- export class Default extends Mixin {
- }
- export default Default;
-}
-declare module 'fullcalendar/TimeGridEventRenderer' {
- import EventRenderer from 'fullcalendar/EventRenderer';
- export class Default extends EventRenderer {
- timeGrid: any;
- constructor(timeGrid: any, fillRenderer: any);
- renderFgSegs(segs: any): void;
- renderFgSegsIntoContainers(segs: any, containerEls: any): void;
- unrenderFgSegs(): void;
- computeEventTimeFormat(): any;
- computeDisplayEventEnd(): boolean;
- fgSegHtml(seg: any, disableResizing: any): string;
- updateFgSegCoords(segs: any): void;
- computeFgSegHorizontals(segs: any): void;
- computeFgSegForwardBack(seg: any, seriesBackwardPressure: any, seriesBackwardCoord: any): void;
- sortForwardSegs(forwardSegs: any): void;
- compareForwardSegs(seg1: any, seg2: any): any;
- assignFgSegHorizontals(segs: any): void;
- generateFgSegHorizontalCss(seg: any): any;
- }
- export default Default;
-}
-declare module 'fullcalendar/TimeGridHelperRenderer' {
- import HelperRenderer from 'fullcalendar/HelperRenderer';
- export class Default extends HelperRenderer {
- renderSegs(segs: any, sourceSeg: any): JQuery;
- }
- export default Default;
-}
-declare module 'fullcalendar/TimeGridFillRenderer' {
- import FillRenderer from 'fullcalendar/FillRenderer';
- export class Default extends FillRenderer {
- attachSegEls(type: any, segs: any): any;
- }
- export default Default;
-}
-declare module 'fullcalendar/TimeGrid' {
- import * as moment from 'moment';
- import InteractiveDateComponent from 'fullcalendar/InteractiveDateComponent';
- import { DayTableInterface } from 'fullcalendar/DayTableMixin';
- import ComponentFootprint from 'fullcalendar/ComponentFootprint';
- export class Default extends InteractiveDateComponent {
- dayDates: DayTableInterface['dayDates'];
- daysPerRow: DayTableInterface['daysPerRow'];
- colCnt: DayTableInterface['colCnt'];
- updateDayTable: DayTableInterface['updateDayTable'];
- renderHeadHtml: DayTableInterface['renderHeadHtml'];
- renderBgTrHtml: DayTableInterface['renderBgTrHtml'];
- bookendCells: DayTableInterface['bookendCells'];
- getCellDate: DayTableInterface['getCellDate'];
- view: any;
- helperRenderer: any;
- dayRanges: any;
- slotDuration: any;
- snapDuration: any;
- snapsPerSlot: any;
- labelFormat: any;
- labelInterval: any;
- headContainerEl: any;
- colEls: any;
- slatContainerEl: any;
- slatEls: any;
- nowIndicatorEls: any;
- colCoordCache: any;
- slatCoordCache: any;
- bottomRuleEl: any;
- contentSkeletonEl: any;
- colContainerEls: any;
- fgContainerEls: any;
- bgContainerEls: any;
- helperContainerEls: any;
- highlightContainerEls: any;
- businessContainerEls: any;
- helperSegs: any;
- highlightSegs: any;
- businessSegs: any;
- constructor(view: any);
- componentFootprintToSegs(componentFootprint: any): any[];
- sliceRangeByTimes(unzonedRange: any): any[];
- processOptions(): void;
- computeLabelInterval(slotDuration: any): any;
- renderDates(dateProfile: any): void;
- unrenderDates(): void;
- renderSkeleton(): void;
- renderSlats(): void;
- renderSlatRowHtml(): string;
- renderColumns(): void;
- unrenderColumns(): void;
- renderContentSkeleton(): void;
- unrenderContentSkeleton(): void;
- groupSegsByCol(segs: any): any[];
- attachSegsByCol(segsByCol: any, containerEls: any): void;
- getNowIndicatorUnit(): string;
- renderNowIndicator(date: any): void;
- unrenderNowIndicator(): void;
- updateSize(totalHeight: any, isAuto: any, isResize: any): void;
- getTotalSlatHeight(): any;
- computeDateTop(ms: any, startOfDayDate: any): any;
- computeTimeTop(time: any): any;
- updateSegVerticals(segs: any): void;
- computeSegVerticals(segs: any): void;
- assignSegVerticals(segs: any): void;
- generateSegVerticalCss(seg: any): {
- top: any;
- bottom: number;
- };
- prepareHits(): void;
- releaseHits(): void;
- queryHit(leftOffset: any, topOffset: any): any;
- getHitFootprint(hit: any): ComponentFootprint;
- computeSnapTime(snapIndex: any): moment.Duration;
- getHitEl(hit: any): any;
- renderDrag(eventFootprints: any, seg: any, isTouch: any): boolean;
- unrenderDrag(): void;
- renderEventResize(eventFootprints: any, seg: any, isTouch: any): void;
- unrenderEventResize(): void;
- renderSelectionFootprint(componentFootprint: any): void;
- unrenderSelection(): void;
- }
- export default Default;
-}
-declare module 'fullcalendar/Popover' {
- import { ListenerInterface } from 'fullcalendar/ListenerMixin';
- export class Default {
- listenTo: ListenerInterface['listenTo'];
- stopListeningTo: ListenerInterface['stopListeningTo'];
- isHidden: boolean;
- options: any;
- el: any;
- margin: number;
- constructor(options: any);
- show(): void;
- hide(): void;
- render(): void;
- documentMousedown(ev: any): void;
- removeElement(): void;
- position(): void;
- trigger(name: any): void;
- }
- export default Default;
-}
-declare module 'fullcalendar/DayGridEventRenderer' {
- import EventRenderer from 'fullcalendar/EventRenderer';
- export class Default extends EventRenderer {
- dayGrid: any;
- rowStructs: any;
- constructor(dayGrid: any, fillRenderer: any);
- renderBgRanges(eventRanges: any): void;
- renderFgSegs(segs: any): void;
- unrenderFgSegs(): void;
- renderSegRows(segs: any): any[];
- renderSegRow(row: any, rowSegs: any): {
- row: any;
- tbodyEl: JQuery;
- cellMatrix: any[];
- segMatrix: any[];
- segLevels: any[];
- segs: any;
- };
- buildSegLevels(segs: any): any[];
- groupSegRows(segs: any): any[];
- computeEventTimeFormat(): any;
- computeDisplayEventEnd(): boolean;
- fgSegHtml(seg: any, disableResizing: any): string;
- }
- export default Default;
-}
-declare module 'fullcalendar/DayGridHelperRenderer' {
- import HelperRenderer from 'fullcalendar/HelperRenderer';
- export class Default extends HelperRenderer {
- renderSegs(segs: any, sourceSeg: any): JQuery;
- }
- export default Default;
-}
-declare module 'fullcalendar/DayGridFillRenderer' {
- import FillRenderer from 'fullcalendar/FillRenderer';
- export class Default extends FillRenderer {
- fillSegTag: string;
- attachSegEls(type: any, segs: any): any[];
- renderFillRow(type: any, seg: any): any;
- }
- export default Default;
-}
-declare module 'fullcalendar/DayGrid' {
- import ComponentFootprint from 'fullcalendar/ComponentFootprint';
- import InteractiveDateComponent from 'fullcalendar/InteractiveDateComponent';
- import { DayTableInterface } from 'fullcalendar/DayTableMixin';
- export class Default extends InteractiveDateComponent {
- rowCnt: DayTableInterface['rowCnt'];
- colCnt: DayTableInterface['colCnt'];
- daysPerRow: DayTableInterface['daysPerRow'];
- sliceRangeByRow: DayTableInterface['sliceRangeByRow'];
- updateDayTable: DayTableInterface['updateDayTable'];
- renderHeadHtml: DayTableInterface['renderHeadHtml'];
- getCellDate: DayTableInterface['getCellDate'];
- renderBgTrHtml: DayTableInterface['renderBgTrHtml'];
- renderIntroHtml: DayTableInterface['renderIntroHtml'];
- getCellRange: DayTableInterface['getCellRange'];
- sliceRangeByDay: DayTableInterface['sliceRangeByDay'];
- view: any;
- helperRenderer: any;
- cellWeekNumbersVisible: boolean;
- bottomCoordPadding: number;
- headContainerEl: any;
- rowEls: any;
- cellEls: any;
- rowCoordCache: any;
- colCoordCache: any;
- isRigid: boolean;
- hasAllDayBusinessHours: boolean;
- segPopover: any;
- popoverSegs: any;
- constructor(view: any);
- componentFootprintToSegs(componentFootprint: any): any;
- renderDates(dateProfile: any): void;
- unrenderDates(): void;
- renderGrid(): void;
- renderDayRowHtml(row: any, isRigid: any): string;
- getIsNumbersVisible(): boolean;
- getIsDayNumbersVisible(): boolean;
- renderNumberTrHtml(row: any): string;
- renderNumberIntroHtml(row: any): any;
- renderNumberCellsHtml(row: any): string;
- renderNumberCellHtml(date: any): string;
- prepareHits(): void;
- releaseHits(): void;
- queryHit(leftOffset: any, topOffset: any): any;
- getHitFootprint(hit: any): ComponentFootprint;
- getHitEl(hit: any): any;
- getCellHit(row: any, col: any): any;
- getCellEl(row: any, col: any): any;
- executeEventUnrender(): void;
- getOwnEventSegs(): any;
- renderDrag(eventFootprints: any, seg: any, isTouch: any): boolean;
- unrenderDrag(): void;
- renderEventResize(eventFootprints: any, seg: any, isTouch: any): void;
- unrenderEventResize(): 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): JQuery;
- showSegPopover(row: any, col: any, moreLink: any, segs: any): void;
- renderSegPopoverContent(row: any, col: any, segs: any): JQuery;
- resliceDaySegs(segs: any, dayDate: any): any[];
- getMoreLinkText(num: any): any;
- getCellSegs(row: any, col: any, startLevel?: any): any[];
- }
- export default Default;
-}
-declare module 'fullcalendar/AgendaView' {
- import View from 'fullcalendar/View';
- export class Default extends View {
- timeGridClass: any;
- dayGridClass: any;
- timeGrid: any;
- dayGrid: any;
- scroller: any;
- axisWidth: any;
- usesMinMaxTime: boolean;
- constructor(calendar: any, viewSpec: any);
- instantiateTimeGrid(): any;
- instantiateDayGrid(): any;
- renderSkeleton(): void;
- unrenderSkeleton(): void;
- renderSkeletonHtml(): string;
- axisStyleAttr(): string;
- getNowIndicatorUnit(): any;
- updateSize(totalHeight: any, isAuto: any, isResize: any): void;
- computeScrollerHeight(totalHeight: any): number;
- computeInitialDateScroll(): {
- top: any;
- };
- queryDateScroll(): {
- top: any;
- };
- applyDateScroll(scroll: any): void;
- getHitFootprint(hit: any): any;
- getHitEl(hit: any): any;
- executeEventRender(eventsPayload: any): void;
- renderDrag(eventFootprints: any, seg: any, isTouch: any): boolean;
- renderEventResize(eventFootprints: any, seg: any, isTouch: any): void;
- renderSelectionFootprint(componentFootprint: any): void;
- }
- export default Default;
-}
-declare module 'fullcalendar/BasicViewDateProfileGenerator' {
- import UnzonedRange from 'fullcalendar/UnzonedRange';
- import DateProfileGenerator from 'fullcalendar/DateProfileGenerator';
- export class Default extends DateProfileGenerator {
- buildRenderRange(currentUnzonedRange: any, currentRangeUnit: any, isRangeAllDay: any): UnzonedRange;
- }
- export default Default;
-}
-declare module 'fullcalendar/BasicView' {
- import View from 'fullcalendar/View';
- export class Default extends View {
- dateProfileGeneratorClass: any;
- dayGridClass: any;
- scroller: any;
- dayGrid: any;
- weekNumberWidth: any;
- constructor(calendar: any, viewSpec: any);
- instantiateDayGrid(): any;
- executeDateRender(dateProfile: any): void;
- renderSkeleton(): void;
- unrenderSkeleton(): void;
- renderSkeletonHtml(): string;
- weekNumberStyleAttr(): string;
- hasRigidRows(): boolean;
- updateSize(totalHeight: any, isAuto: any, isResize: any): void;
- computeScrollerHeight(totalHeight: any): number;
- setGridHeight(height: any, isAuto: any): void;
- computeInitialDateScroll(): {
- top: number;
- };
- queryDateScroll(): {
- top: any;
- };
- applyDateScroll(scroll: any): void;
- }
- export default Default;
-}
-declare module 'fullcalendar/MonthViewDateProfileGenerator' {
- import BasicViewDateProfileGenerator from 'fullcalendar/BasicViewDateProfileGenerator';
- import UnzonedRange from 'fullcalendar/UnzonedRange';
- export class Default extends BasicViewDateProfileGenerator {
- buildRenderRange(currentUnzonedRange: any, currentRangeUnit: any, isRangeAllDay: any): UnzonedRange;
- }
- export default Default;
-}
-declare module 'fullcalendar/MonthView' {
- import BasicView from 'fullcalendar/BasicView';
- export class Default extends BasicView {
- setGridHeight(height: any, isAuto: any): void;
- isDateInOtherMonth(date: any, dateProfile: any): boolean;
- }
- export default Default;
-}
-declare module 'fullcalendar/ListEventRenderer' {
- import EventRenderer from 'fullcalendar/EventRenderer';
- export class Default extends EventRenderer {
- renderFgSegs(segs: any): void;
- fgSegHtml(seg: any): string;
- computeEventTimeFormat(): any;
- }
- export default Default;
-}
-declare module 'fullcalendar/ListEventPointing' {
- import EventPointing from 'fullcalendar/EventPointing';
- export class Default extends EventPointing {
- handleClick(seg: any, ev: any): void;
- }
- export default Default;
-}
-declare module 'fullcalendar/ListView' {
- import View from 'fullcalendar/View';
- export class Default extends View {
- eventRendererClass: any;
- eventPointingClass: any;
- segSelector: any;
- scroller: any;
- contentEl: any;
- dayDates: any;
- dayRanges: any;
- constructor(calendar: any, viewSpec: any);
- renderSkeleton(): void;
- unrenderSkeleton(): void;
- updateSize(totalHeight: any, isAuto: any, isResize: any): void;
- computeScrollerHeight(totalHeight: any): number;
- renderDates(dateProfile: any): void;
- componentFootprintToSegs(footprint: any): any[];
- renderEmptyMessage(): void;
- renderSegList(allSegs: any): void;
- groupSegsByDay(segs: any): any[];
- dayHeaderHtml(dayDate: any): string;
- }
- export default Default;
-}
-declare module 'fullcalendar/src/exports' {
- export const version = "<%= version %>";
- export const internalApiVersion = 12;
- export { BusinessHoursInput, EventObjectInput, EventOptionsBase, OptionsInput } from 'fullcalendar/src/types/input-types';
- export { applyAll, debounce, isInt, htmlEscape, cssToStr, proxy, capitaliseFirstLetter, getOuterRect, getClientRect, getContentRect, getScrollbarWidths, preventDefault, parseFieldSpecs, compareByFieldSpecs, compareByFieldSpec, flexibleCompare, computeGreatestUnit, divideRangeByDuration, divideDurationByDuration, multiplyDuration, durationHasTime, log, warn, removeExact, intersectRects } from 'fullcalendar/src/util';
- export { formatDate, formatRange, queryMostGranularFormatUnit } from 'fullcalendar/src/date-formatting';
- export { datepickerLocale, locale } from 'fullcalendar/src/locale';
- export { default as moment } from 'fullcalendar/src/moment-ext';
- export { default as EmitterMixin, EmitterInterface } from 'fullcalendar/EmitterMixin';
- export { default as ListenerMixin, ListenerInterface } from 'fullcalendar/ListenerMixin';
- export { default as Model } from 'fullcalendar/Model';
- export { default as Constraints } from 'fullcalendar/Constraints';
- export { default as UnzonedRange } from 'fullcalendar/UnzonedRange';
- export { default as ComponentFootprint } from 'fullcalendar/ComponentFootprint';
- export { default as BusinessHourGenerator } from 'fullcalendar/BusinessHourGenerator';
- export { default as EventDef } from 'fullcalendar/EventDef';
- export { default as EventDefMutation } from 'fullcalendar/EventDefMutation';
- export { default as EventSourceParser } from 'fullcalendar/EventSourceParser';
- export { default as EventSource } from 'fullcalendar/EventSource';
- export { defineThemeSystem } from 'fullcalendar/ThemeRegistry';
- export { default as EventInstanceGroup } from 'fullcalendar/EventInstanceGroup';
- export { default as ArrayEventSource } from 'fullcalendar/ArrayEventSource';
- export { default as FuncEventSource } from 'fullcalendar/FuncEventSource';
- export { default as JsonFeedEventSource } from 'fullcalendar/JsonFeedEventSource';
- export { default as EventFootprint } from 'fullcalendar/EventFootprint';
- export { default as Class } from 'fullcalendar/Class';
- export { default as Mixin } from 'fullcalendar/Mixin';
- export { default as CoordCache } from 'fullcalendar/CoordCache';
- export { default as DragListener } from 'fullcalendar/DragListener';
- export { default as Promise } from 'fullcalendar/Promise';
- export { default as TaskQueue } from 'fullcalendar/TaskQueue';
- export { default as RenderQueue } from 'fullcalendar/RenderQueue';
- export { default as Scroller } from 'fullcalendar/Scroller';
- export { default as Theme } from 'fullcalendar/Theme';
- export { default as DateComponent } from 'fullcalendar/DateComponent';
- export { default as InteractiveDateComponent } from 'fullcalendar/InteractiveDateComponent';
- export { default as Calendar } from 'fullcalendar/Calendar';
- export { default as View } from 'fullcalendar/View';
- export { defineView, getViewConfig } from 'fullcalendar/ViewRegistry';
- export { default as DayTableMixin } from 'fullcalendar/DayTableMixin';
- export { default as BusinessHourRenderer } from 'fullcalendar/BusinessHourRenderer';
- export { default as EventRenderer } from 'fullcalendar/EventRenderer';
- export { default as FillRenderer } from 'fullcalendar/FillRenderer';
- export { default as HelperRenderer } from 'fullcalendar/HelperRenderer';
- export { default as ExternalDropping } from 'fullcalendar/ExternalDropping';
- export { default as EventResizing } from 'fullcalendar/EventResizing';
- export { default as EventPointing } from 'fullcalendar/EventPointing';
- export { default as EventDragging } from 'fullcalendar/EventDragging';
- export { default as DateSelecting } from 'fullcalendar/DateSelecting';
- export { default as StandardInteractionsMixin } from 'fullcalendar/StandardInteractionsMixin';
- export { default as AgendaView } from 'fullcalendar/AgendaView';
- export { default as TimeGrid } from 'fullcalendar/TimeGrid';
- export { default as DayGrid } from 'fullcalendar/DayGrid';
- export { default as BasicView } from 'fullcalendar/BasicView';
- export { default as MonthView } from 'fullcalendar/MonthView';
- export { default as ListView } from 'fullcalendar/ListView';
-}
-declare module 'fullcalendar/src/models/event-source/config' {
- export {};
-}
-declare module 'fullcalendar/Bootstrap3Theme' {
- import Theme from 'fullcalendar/Theme';
- export class Default extends Theme {
- }
- export default Default;
-}
-declare module 'fullcalendar/Bootstrap4Theme' {
- import Theme from 'fullcalendar/Theme';
- export class Default extends Theme {
- }
- export default Default;
-}
-declare module 'fullcalendar/src/theme/config' {
- export {};
-}
-declare module 'fullcalendar/src/basic/config' {
- export {};
-}
-declare module 'fullcalendar/src/agenda/config' {
- export {};
-}
-declare module 'fullcalendar/src/list/config' {
- export {};
-}
-declare module 'fullcalendar/src/types/jquery-hooks' {
- import * as moment from 'moment';
- import Calendar from 'fullcalendar/Calendar';
- import View from 'fullcalendar/View';
- import EventSource from 'fullcalendar/EventSource';
- import { RangeInput, MomentInput, OptionsInput, EventObjectInput, EventSourceInput } from 'fullcalendar/src/types/input-types'; global {
- interface JQueryStatic {
- fullCalendar: object;
- }
- interface JQuery {
- fullCalendar(options?: OptionsInput): JQuery;
- fullCalendar(method: 'getCalendar'): Calendar;
- fullCalendar(method: 'getView'): View;
- fullCalendar(method: 'destroy'): JQuery;
- fullCalendar(method: 'option', name: string | object, value?: any): any;
- fullCalendar(method: 'isValidViewType', viewType: string): boolean;
- fullCalendar(method: 'changeView', viewName: string, dateOrRange?: RangeInput | MomentInput): JQuery;
- fullCalendar(method: 'zoomTo', newDate: moment.Moment, viewType?: string): JQuery;
- fullCalendar(method: 'prev'): JQuery;
- fullCalendar(method: 'next'): JQuery;
- fullCalendar(method: 'prevYear'): JQuery;
- fullCalendar(method: 'nextYear'): JQuery;
- fullCalendar(method: 'today'): JQuery;
- fullCalendar(method: 'gotoDate', zonedDateInput: any): JQuery;
- fullCalendar(method: 'incrementDate', delta: any): JQuery;
- fullCalendar(method: 'getDate'): moment.Moment;
- fullCalendar(method: 'render'): JQuery;
- fullCalendar(method: 'select', zonedStartInput: MomentInput, zonedEndInput?: MomentInput, resourceId?: string): JQuery;
- fullCalendar(method: 'unselect'): JQuery;
- fullCalendar(method: 'moment', ...args: any[]): moment.Moment;
- fullCalendar(method: 'getNow'): moment.Moment;
- fullCalendar(method: 'rerenderEvents'): JQuery;
- fullCalendar(method: 'refetchEvents'): JQuery;
- fullCalendar(method: 'renderEvents', eventInputs: EventObjectInput[], isSticky?: boolean): JQuery;
- fullCalendar(method: 'renderEvent', eventInput: EventObjectInput, isSticky?: boolean): JQuery;
- fullCalendar(method: 'removeEvents', legacyQuery?: any): JQuery;
- fullCalendar(method: 'clientEvents', legacyQuery: any): any;
- fullCalendar(method: 'updateEvents', eventPropsArray: EventObjectInput[]): JQuery;
- fullCalendar(method: 'updateEvent', eventProps: EventObjectInput): JQuery;
- fullCalendar(method: 'getEventSources'): EventSource;
- fullCalendar(method: 'getEventSourceById', id: any): EventSource;
- fullCalendar(method: 'addEventSource', sourceInput: EventSourceInput): JQuery;
- fullCalendar(method: 'removeEventSources', sourceMultiQuery: any): JQuery;
- fullCalendar(method: 'removeEventSource', sourceQuery: any): JQuery;
- fullCalendar(method: 'refetchEventSources', sourceMultiQuery: any): JQuery;
- }
- }
-}
-declare module 'fullcalendar/src/main' {
- import * as exportHooks from 'fullcalendar/src/exports';
- import 'fullcalendar/src/moment-ext';
- import 'fullcalendar/src/date-formatting';
- import 'fullcalendar/src/models/event-source/config';
- import 'fullcalendar/src/theme/config';
- import 'fullcalendar/src/basic/config';
- import 'fullcalendar/src/agenda/config';
- import 'fullcalendar/src/list/config';
- import 'fullcalendar/src/types/jquery-hooks';
- export = exportHooks;
-}
-declare module 'fullcalendar/plugins/gcal/GcalEventSource' {
- /// <reference types="jquery" />
- import { EventSource } from 'fullcalendar';
- export class Default extends EventSource {
- static API_BASE: string;
- googleCalendarApiKey: any;
- googleCalendarId: any;
- googleCalendarError: any;
- ajaxSettings: any;
- static parse(rawInput: any, calendar: any): any;
- fetch(start: any, end: any, timezone: any): JQueryPromise<{}>;
- gcalItemsToRawEventDefs(items: any, gcalTimezone: any): any;
- gcalItemToRawEventDef(item: any, gcalTimezone: any): {
- id: any;
- title: any;
- start: any;
- end: any;
- url: any;
- location: any;
- description: any;
- };
- buildUrl(): string;
- buildRequestParams(start: any, end: any, timezone: any): any;
- reportError(message: any, apiErrorObjs?: any): void;
- getPrimitive(): any;
- applyManualStandardProps(rawProps: any): any;
- applyMiscProps(rawProps: any): void;
- }
- export default Default;
-}
-declare module 'fullcalendar/plugins/gcal/main' {
- export {};
-}
-declare module 'fullcalendar' {
- import main = require('fullcalendar/src/main');
- export = main;
-}
+++ /dev/null
-/*!
- * FullCalendar v3.9.0
- * Docs & License: https://fullcalendar.io/
- * (c) 2018 Adam Shaw
- */
-(function webpackUniversalModuleDefinition(root, factory) {
- if(typeof exports === 'object' && typeof module === 'object')
- module.exports = factory(require("moment"), require("jquery"));
- else if(typeof define === 'function' && define.amd)
- define(["moment", "jquery"], factory);
- else if(typeof exports === 'object')
- exports["FullCalendar"] = factory(require("moment"), require("jquery"));
- else
- root["FullCalendar"] = factory(root["moment"], root["jQuery"]);
-})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_0__, __WEBPACK_EXTERNAL_MODULE_3__) {
-return /******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 236);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports) {
-
-module.exports = __WEBPACK_EXTERNAL_MODULE_0__;
-
-/***/ }),
-/* 1 */,
-/* 2 */
-/***/ (function(module, exports) {
-
-/*
-derived from:
-https://github.com/Microsoft/tslib/blob/v1.6.0/tslib.js
-
-only include the helpers we need, to keep down filesize
-*/
-var 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]; };
-exports.__extends = function (d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-};
-
-
-/***/ }),
-/* 3 */
-/***/ (function(module, exports) {
-
-module.exports = __WEBPACK_EXTERNAL_MODULE_3__;
-
-/***/ }),
-/* 4 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var moment = __webpack_require__(0);
-var $ = __webpack_require__(3);
-/* 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(rowEls, scrollbarWidths) {
- if (scrollbarWidths.left) {
- rowEls.css({
- 'border-left-width': 1,
- 'margin-left': scrollbarWidths.left - 1
- });
- }
- if (scrollbarWidths.right) {
- rowEls.css({
- 'border-right-width': 1,
- 'margin-right': scrollbarWidths.right - 1
- });
- }
-}
-exports.compensateScroll = compensateScroll;
-// Undoes compensateScroll and restores all borders/margins
-function uncompensateScroll(rowEls) {
- rowEls.css({
- 'margin-left': '',
- 'margin-right': '',
- 'border-left-width': '',
- 'border-right-width': ''
- });
-}
-exports.uncompensateScroll = uncompensateScroll;
-// Make the mouse cursor express that an event is not allowed in the current area
-function disableCursor() {
- $('body').addClass('fc-not-allowed');
-}
-exports.disableCursor = disableCursor;
-// Returns the mouse cursor to its original look
-function enableCursor() {
- $('body').removeClass('fc-not-allowed');
-}
-exports.enableCursor = enableCursor;
-// 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.each(function (i, el) {
- var minOffset = i === els.length - 1 ? minOffset2 : minOffset1;
- var naturalOffset = $(el).outerHeight(true);
- if (naturalOffset < minOffset) {
- flexEls.push(el);
- flexOffsets.push(naturalOffset);
- flexHeights.push($(el).height());
- }
- 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).each(function (i, el) {
- 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) {
- $(el).height(newHeight);
- }
- });
-}
-exports.distributeHeight = distributeHeight;
-// Undoes distrubuteHeight, restoring all els to their natural height
-function undistributeHeight(els) {
- els.height('');
-}
-exports.undistributeHeight = undistributeHeight;
-// Given `els`, a jQuery set of <td> 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.find('> *').each(function (i, innerEl) {
- var innerWidth = $(innerEl).outerWidth();
- if (innerWidth > maxInnerWidth) {
- maxInnerWidth = innerWidth;
- }
- });
- maxInnerWidth++; // sometimes not accurate of width the text needs to stay on one line. insurance
- els.width(maxInnerWidth);
- return maxInnerWidth;
-}
-exports.matchCellWidths = matchCellWidths;
-// Given one element that resides inside another,
-// Subtracts the height of the inner element from the outer element.
-function subtractInnerElHeight(outerEl, innerEl) {
- var both = outerEl.add(innerEl);
- var diff;
- // effin' IE8/9/10/11 sometimes returns 0 for dimensions. this weird hack was the only thing that worked
- both.css({
- position: 'relative',
- left: -1 // ensure reflow in case the el was already relative. negative is less likely to cause new scroll
- });
- diff = outerEl.outerHeight() - innerEl.outerHeight(); // grab the dimensions
- both.css({ position: '', left: '' }); // undo hack
- return diff;
-}
-exports.subtractInnerElHeight = subtractInnerElHeight;
-/* Element Geom Utilities
-----------------------------------------------------------------------------------------------------------------------*/
-// borrowed from https://github.com/jquery/jquery-ui/blob/1.11.0/ui/core.js#L51
-function getScrollParent(el) {
- var position = el.css('position');
- var scrollParent = el.parents().filter(function () {
- var parent = $(this);
- return (/(auto|scroll)/).test(parent.css('overflow') + parent.css('overflow-y') + parent.css('overflow-x'));
- }).eq(0);
- return position === 'fixed' || !scrollParent.length ? $(el[0].ownerDocument || document) : scrollParent;
-}
-exports.getScrollParent = getScrollParent;
-// Queries the outer bounding area of a jQuery element.
-// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).
-// Origin is optional.
-function getOuterRect(el, origin) {
- var offset = el.offset();
- var left = offset.left - (origin ? origin.left : 0);
- var top = offset.top - (origin ? origin.top : 0);
- return {
- left: left,
- right: left + el.outerWidth(),
- top: top,
- bottom: top + el.outerHeight()
- };
-}
-exports.getOuterRect = getOuterRect;
-// Queries the area within the margin/border/scrollbars of a jQuery element. Does not go within the padding.
-// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).
-// Origin is optional.
-// WARNING: given element can't have borders
-// NOTE: should use clientLeft/clientTop, but very unreliable cross-browser.
-function getClientRect(el, origin) {
- var offset = el.offset();
- var scrollbarWidths = getScrollbarWidths(el);
- var left = offset.left + getCssFloat(el, 'border-left-width') + scrollbarWidths.left - (origin ? origin.left : 0);
- var top = offset.top + getCssFloat(el, 'border-top-width') + scrollbarWidths.top - (origin ? origin.top : 0);
- return {
- left: left,
- right: left + el[0].clientWidth,
- top: top,
- bottom: top + el[0].clientHeight // clientHeight includes padding but NOT scrollbars
- };
-}
-exports.getClientRect = getClientRect;
-// Queries the area within the margin/border/padding of a jQuery element. Assumed not to have scrollbars.
-// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).
-// Origin is optional.
-function getContentRect(el, origin) {
- var offset = el.offset(); // just outside of border, margin not included
- var left = offset.left + getCssFloat(el, 'border-left-width') + getCssFloat(el, 'padding-left') -
- (origin ? origin.left : 0);
- var top = offset.top + getCssFloat(el, 'border-top-width') + getCssFloat(el, 'padding-top') -
- (origin ? origin.top : 0);
- return {
- left: left,
- right: left + el.width(),
- top: top,
- bottom: top + el.height()
- };
-}
-exports.getContentRect = getContentRect;
-// Returns the computed left/right/top/bottom scrollbar widths for the given jQuery element.
-// WARNING: given element can't have borders (which will cause offsetWidth/offsetHeight to be larger).
-// NOTE: should use clientLeft/clientTop, but very unreliable cross-browser.
-function getScrollbarWidths(el) {
- var leftRightWidth = el[0].offsetWidth - el[0].clientWidth;
- var bottomWidth = el[0].offsetHeight - el[0].clientHeight;
- var widths;
- leftRightWidth = sanitizeScrollbarWidth(leftRightWidth);
- bottomWidth = sanitizeScrollbarWidth(bottomWidth);
- widths = { left: 0, right: 0, top: 0, bottom: bottomWidth };
- if (getIsLeftRtlScrollbars() && el.css('direction') === 'rtl') {
- widths.left = leftRightWidth;
- }
- else {
- widths.right = leftRightWidth;
- }
- return widths;
-}
-exports.getScrollbarWidths = getScrollbarWidths;
-// The scrollbar width computations in getScrollbarWidths 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;
-}
-// Logic for determining if, when the element is right-to-left, the scrollbar appears on the left side
-var _isLeftRtlScrollbars = null;
-function getIsLeftRtlScrollbars() {
- if (_isLeftRtlScrollbars === null) {
- _isLeftRtlScrollbars = computeIsLeftRtlScrollbars();
- }
- return _isLeftRtlScrollbars;
-}
-function computeIsLeftRtlScrollbars() {
- var el = $('<div><div/></div>')
- .css({
- position: 'absolute',
- top: -1000,
- left: 0,
- border: 0,
- padding: 0,
- overflow: 'scroll',
- direction: 'rtl'
- })
- .appendTo('body');
- var innerEl = el.children();
- var res = innerEl.offset().left > el.offset().left; // is the inner div shifted to accommodate a left scrollbar?
- el.remove();
- return res;
-}
-// Retrieves a jQuery element's computed CSS value as a floating-point number.
-// If the queried value is non-numeric (ex: IE can return "medium" for border width), will just return zero.
-function getCssFloat(el, prop) {
- return parseFloat(el.css(prop)) || 0;
-}
-/* Mouse / Touch Utilities
-----------------------------------------------------------------------------------------------------------------------*/
-// 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.which === 1 && !ev.ctrlKey;
-}
-exports.isPrimaryMouseButton = isPrimaryMouseButton;
-function getEvX(ev) {
- var touches = ev.originalEvent.touches;
- // on mobile FF, pageX for touch events is present, but incorrect,
- // so, look at touch coordinates first.
- if (touches && touches.length) {
- return touches[0].pageX;
- }
- return ev.pageX;
-}
-exports.getEvX = getEvX;
-function getEvY(ev) {
- var touches = ev.originalEvent.touches;
- // on mobile FF, pageX for touch events is present, but incorrect,
- // so, look at touch coordinates first.
- if (touches && touches.length) {
- return touches[0].pageY;
- }
- return ev.pageY;
-}
-exports.getEvY = getEvY;
-function getEvIsTouch(ev) {
- return /^touch/.test(ev.type);
-}
-exports.getEvIsTouch = getEvIsTouch;
-function preventSelection(el) {
- el.addClass('fc-unselectable')
- .on('selectstart', preventDefault);
-}
-exports.preventSelection = preventSelection;
-function allowSelection(el) {
- el.removeClass('fc-unselectable')
- .off('selectstart', preventDefault);
-}
-exports.allowSelection = allowSelection;
-// Stops a mouse/touch event from doing it's native browser action
-function preventDefault(ev) {
- ev.preventDefault();
-}
-exports.preventDefault = preventDefault;
-/* General Geometry Utils
-----------------------------------------------------------------------------------------------------------------------*/
-// 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;
-}
-exports.intersectRects = intersectRects;
-// 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)
- };
-}
-exports.constrainPoint = constrainPoint;
-// 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
- };
-}
-exports.getRectCenter = getRectCenter;
-// 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
- };
-}
-exports.diffPoints = diffPoints;
-/* 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 ($.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;
-}
-exports.parseFieldSpecs = parseFieldSpecs;
-function compareByFieldSpecs(obj1, obj2, fieldSpecs, obj1fallback, obj2fallback) {
- var i;
- var cmp;
- for (i = 0; i < fieldSpecs.length; i++) {
- cmp = compareByFieldSpec(obj1, obj2, fieldSpecs[i], obj1fallback, obj2fallback);
- if (cmp) {
- return cmp;
- }
- }
- return 0;
-}
-exports.compareByFieldSpecs = compareByFieldSpecs;
-function compareByFieldSpec(obj1, obj2, fieldSpec, obj1fallback, obj2fallback) {
- if (fieldSpec.func) {
- return fieldSpec.func(obj1, obj2);
- }
- var val1 = obj1[fieldSpec.field];
- var val2 = obj2[fieldSpec.field];
- if (val1 == null && obj1fallback) {
- val1 = obj1fallback[fieldSpec.field];
- }
- if (val2 == null && obj2fallback) {
- val2 = obj2fallback[fieldSpec.field];
- }
- return flexibleCompare(val1, val2) * (fieldSpec.order || 1);
-}
-exports.compareByFieldSpec = compareByFieldSpec;
-function flexibleCompare(a, b) {
- if (!a && !b) {
- return 0;
- }
- if (b == null) {
- return -1;
- }
- if (a == null) {
- return 1;
- }
- if ($.type(a) === 'string' || $.type(b) === 'string') {
- return String(a).localeCompare(String(b));
- }
- return a - b;
-}
-exports.flexibleCompare = flexibleCompare;
-/* Date Utilities
-----------------------------------------------------------------------------------------------------------------------*/
-exports.dayIDs = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];
-exports.unitsDesc = ['year', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond']; // descending
-// Diffs the two moments into a Duration where full-days are recorded first, then the remaining time.
-// Moments will have their timezones normalized.
-function diffDayTime(a, b) {
- return moment.duration({
- days: a.clone().stripTime().diff(b.clone().stripTime(), 'days'),
- ms: a.time() - b.time() // time-of-day from day start. disregards timezone
- });
-}
-exports.diffDayTime = diffDayTime;
-// Diffs the two moments via their start-of-day (regardless of timezone). Produces whole-day durations.
-function diffDay(a, b) {
- return moment.duration({
- days: a.clone().stripTime().diff(b.clone().stripTime(), 'days')
- });
-}
-exports.diffDay = diffDay;
-// Diffs two moments, producing a duration, made of a whole-unit-increment of the given unit. Uses rounding.
-function diffByUnit(a, b, unit) {
- return moment.duration(Math.round(a.diff(b, unit, true)), // returnFloat=true
- unit);
-}
-exports.diffByUnit = diffByUnit;
-// Computes the unit name of the largest whole-unit period of time.
-// For example, 48 hours will be "days" whereas 49 hours will be "hours".
-// Accepts start/end, a range object, or an original duration object.
-function computeGreatestUnit(start, end) {
- var i;
- var unit;
- var val;
- for (i = 0; i < exports.unitsDesc.length; i++) {
- unit = exports.unitsDesc[i];
- val = computeRangeAs(unit, start, end);
- if (val >= 1 && isInt(val)) {
- break;
- }
- }
- return unit; // will be "milliseconds" if nothing else matches
-}
-exports.computeGreatestUnit = computeGreatestUnit;
-// like computeGreatestUnit, but has special abilities to interpret the source input for clues
-function computeDurationGreatestUnit(duration, durationInput) {
- var unit = computeGreatestUnit(duration);
- // prevent days:7 from being interpreted as a week
- if (unit === 'week' && typeof durationInput === 'object' && durationInput.days) {
- unit = 'day';
- }
- return unit;
-}
-exports.computeDurationGreatestUnit = computeDurationGreatestUnit;
-// Computes the number of units (like "hours") in the given range.
-// Range can be a {start,end} object, separate start/end args, or a Duration.
-// Results are based on Moment's .as() and .diff() methods, so results can depend on internal handling
-// of month-diffing logic (which tends to vary from version to version).
-function computeRangeAs(unit, start, end) {
- if (end != null) {
- return end.diff(start, unit, true);
- }
- else if (moment.isDuration(start)) {
- return start.as(unit);
- }
- else {
- return start.end.diff(start.start, unit, true);
- }
-}
-// Intelligently divides a range (specified by a start/end params) by a duration
-function divideRangeByDuration(start, end, dur) {
- var months;
- if (durationHasTime(dur)) {
- return (end - start) / dur;
- }
- months = dur.asMonths();
- if (Math.abs(months) >= 1 && isInt(months)) {
- return end.diff(start, 'months', true) / months;
- }
- return end.diff(start, 'days', true) / dur.asDays();
-}
-exports.divideRangeByDuration = divideRangeByDuration;
-// Intelligently divides one duration by another
-function divideDurationByDuration(dur1, dur2) {
- var months1;
- var months2;
- if (durationHasTime(dur1) || durationHasTime(dur2)) {
- return dur1 / dur2;
- }
- months1 = dur1.asMonths();
- months2 = dur2.asMonths();
- if (Math.abs(months1) >= 1 && isInt(months1) &&
- Math.abs(months2) >= 1 && isInt(months2)) {
- return months1 / months2;
- }
- return dur1.asDays() / dur2.asDays();
-}
-exports.divideDurationByDuration = divideDurationByDuration;
-// Intelligently multiplies a duration by a number
-function multiplyDuration(dur, n) {
- var months;
- if (durationHasTime(dur)) {
- return moment.duration(dur * n);
- }
- months = dur.asMonths();
- if (Math.abs(months) >= 1 && isInt(months)) {
- return moment.duration({ months: months * n });
- }
- return moment.duration({ days: dur.asDays() * n });
-}
-exports.multiplyDuration = multiplyDuration;
-// Returns a boolean about whether the given duration has any time parts (hours/minutes/seconds/ms)
-function durationHasTime(dur) {
- return Boolean(dur.hours() || dur.minutes() || dur.seconds() || dur.milliseconds());
-}
-exports.durationHasTime = durationHasTime;
-function isNativeDate(input) {
- return Object.prototype.toString.call(input) === '[object Date]' || input instanceof Date;
-}
-exports.isNativeDate = isNativeDate;
-// Returns a boolean about whether the given input is a time string, like "06:40:00" or "06:00"
-function isTimeString(str) {
- return typeof str === 'string' &&
- /^\d+\:\d+(?:\:\d+\.?(?:\d{3})?)?$/.test(str);
-}
-exports.isTimeString = isTimeString;
-/* Logging and Debug
-----------------------------------------------------------------------------------------------------------------------*/
-function log() {
- var args = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- args[_i] = arguments[_i];
- }
- var console = window.console;
- if (console && console.log) {
- return console.log.apply(console, args);
- }
-}
-exports.log = log;
-function warn() {
- var args = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- args[_i] = arguments[_i];
- }
- var console = window.console;
- if (console && console.warn) {
- return console.warn.apply(console, args);
- }
- else {
- return log.apply(null, args);
- }
-}
-exports.warn = warn;
-/* General Utilities
-----------------------------------------------------------------------------------------------------------------------*/
-var hasOwnPropMethod = {}.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') {
- 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)) {
- dest[name] = props[name];
- }
- }
- }
- return dest;
-}
-exports.mergeProps = mergeProps;
-function copyOwnProps(src, dest) {
- for (var name_1 in src) {
- if (hasOwnProp(src, name_1)) {
- dest[name_1] = src[name_1];
- }
- }
-}
-exports.copyOwnProps = copyOwnProps;
-function hasOwnProp(obj, name) {
- return hasOwnPropMethod.call(obj, name);
-}
-exports.hasOwnProp = hasOwnProp;
-function applyAll(functions, thisObj, args) {
- if ($.isFunction(functions)) {
- 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;
- }
-}
-exports.applyAll = applyAll;
-function removeMatching(array, testFunc) {
- var removeCnt = 0;
- var i = 0;
- while (i < array.length) {
- if (testFunc(array[i])) {
- array.splice(i, 1);
- removeCnt++;
- }
- else {
- i++;
- }
- }
- return removeCnt;
-}
-exports.removeMatching = removeMatching;
-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;
-}
-exports.removeExact = removeExact;
-function isArraysEqual(a0, a1) {
- var len = a0.length;
- var i;
- if (len == null || len !== a1.length) {
- return false;
- }
- for (i = 0; i < len; i++) {
- if (a0[i] !== a1[i]) {
- return false;
- }
- }
- return true;
-}
-exports.isArraysEqual = isArraysEqual;
-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];
- }
- }
-}
-exports.firstDefined = firstDefined;
-function htmlEscape(s) {
- return (s + '').replace(/&/g, '&')
- .replace(/</g, '<')
- .replace(/>/g, '>')
- .replace(/'/g, ''')
- .replace(/"/g, '"')
- .replace(/\n/g, '<br />');
-}
-exports.htmlEscape = htmlEscape;
-function stripHtmlEntities(text) {
- return text.replace(/&.*?;/g, '');
-}
-exports.stripHtmlEntities = stripHtmlEntities;
-// 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 = [];
- $.each(cssProps, function (name, val) {
- if (val != null) {
- statements.push(name + ':' + val);
- }
- });
- return statements.join(';');
-}
-exports.cssToStr = cssToStr;
-// 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 = [];
- $.each(attrs, function (name, val) {
- if (val != null) {
- parts.push(name + '="' + htmlEscape(val) + '"');
- }
- });
- return parts.join(' ');
-}
-exports.attrsToStr = attrsToStr;
-function capitaliseFirstLetter(str) {
- return str.charAt(0).toUpperCase() + str.slice(1);
-}
-exports.capitaliseFirstLetter = capitaliseFirstLetter;
-function compareNumbers(a, b) {
- return a - b;
-}
-exports.compareNumbers = compareNumbers;
-function isInt(n) {
- return n % 1 === 0;
-}
-exports.isInt = isInt;
-// Returns a method bound to the given object context.
-// Just like one of the jQuery.proxy signatures, but without the undesired behavior of treating the same method with
-// different contexts as identical when binding/unbinding events.
-function proxy(obj, methodName) {
- var method = obj[methodName];
- return function () {
- return method.apply(obj, arguments);
- };
-}
-exports.proxy = proxy;
-// 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, immediate) {
- if (immediate === void 0) { immediate = false; }
- var timeout;
- var args;
- var context;
- var timestamp;
- var result;
- var later = function () {
- var last = +new Date() - timestamp;
- if (last < wait) {
- timeout = setTimeout(later, wait - last);
- }
- else {
- timeout = null;
- if (!immediate) {
- result = func.apply(context, args);
- context = args = null;
- }
- }
- };
- return function () {
- context = this;
- args = arguments;
- timestamp = +new Date();
- var callNow = immediate && !timeout;
- if (!timeout) {
- timeout = setTimeout(later, wait);
- }
- if (callNow) {
- result = func.apply(context, args);
- context = args = null;
- }
- return result;
- };
-}
-exports.debounce = debounce;
-
-
-/***/ }),
-/* 5 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var moment = __webpack_require__(0);
-var moment_ext_1 = __webpack_require__(10);
-var UnzonedRange = /** @class */ (function () {
- function UnzonedRange(startInput, endInput) {
- // TODO: move these into footprint.
- // Especially, doesn't make sense for null startMs/endMs.
- this.isStart = true;
- this.isEnd = true;
- if (moment.isMoment(startInput)) {
- startInput = startInput.clone().stripZone();
- }
- if (moment.isMoment(endInput)) {
- endInput = endInput.clone().stripZone();
- }
- if (startInput) {
- this.startMs = startInput.valueOf();
- }
- if (endInput) {
- this.endMs = endInput.valueOf();
- }
- }
- /*
- SIDEEFFECT: will mutate eventRanges.
- Will return a new array result.
- Only works for non-open-ended ranges.
- */
- UnzonedRange.invertRanges = function (ranges, constraintRange) {
- var invertedRanges = [];
- var startMs = constraintRange.startMs; // 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(compareUnzonedRanges);
- for (i = 0; i < ranges.length; i++) {
- dateRange = ranges[i];
- // add the span of time before the event (if there is any)
- if (dateRange.startMs > startMs) {
- invertedRanges.push(new UnzonedRange(startMs, dateRange.startMs));
- }
- if (dateRange.endMs > startMs) {
- startMs = dateRange.endMs;
- }
- }
- // add the span of time after the last event (if there is any)
- if (startMs < constraintRange.endMs) {
- invertedRanges.push(new UnzonedRange(startMs, constraintRange.endMs));
- }
- return invertedRanges;
- };
- UnzonedRange.prototype.intersect = function (otherRange) {
- var startMs = this.startMs;
- var endMs = this.endMs;
- var newRange = null;
- if (otherRange.startMs != null) {
- if (startMs == null) {
- startMs = otherRange.startMs;
- }
- else {
- startMs = Math.max(startMs, otherRange.startMs);
- }
- }
- if (otherRange.endMs != null) {
- if (endMs == null) {
- endMs = otherRange.endMs;
- }
- else {
- endMs = Math.min(endMs, otherRange.endMs);
- }
- }
- if (startMs == null || endMs == null || startMs < endMs) {
- newRange = new UnzonedRange(startMs, endMs);
- newRange.isStart = this.isStart && startMs === this.startMs;
- newRange.isEnd = this.isEnd && endMs === this.endMs;
- }
- return newRange;
- };
- UnzonedRange.prototype.intersectsWith = function (otherRange) {
- return (this.endMs == null || otherRange.startMs == null || this.endMs > otherRange.startMs) &&
- (this.startMs == null || otherRange.endMs == null || this.startMs < otherRange.endMs);
- };
- UnzonedRange.prototype.containsRange = function (innerRange) {
- return (this.startMs == null || (innerRange.startMs != null && innerRange.startMs >= this.startMs)) &&
- (this.endMs == null || (innerRange.endMs != null && innerRange.endMs <= this.endMs));
- };
- // `date` can be a moment, a Date, or a millisecond time.
- UnzonedRange.prototype.containsDate = function (date) {
- var ms = date.valueOf();
- return (this.startMs == null || ms >= this.startMs) &&
- (this.endMs == null || ms < this.endMs);
- };
- // 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).
- // `date` can be a moment, a Date, or a millisecond time.
- // Returns a MS-time.
- UnzonedRange.prototype.constrainDate = function (date) {
- var ms = date.valueOf();
- if (this.startMs != null && ms < this.startMs) {
- ms = this.startMs;
- }
- if (this.endMs != null && ms >= this.endMs) {
- ms = this.endMs - 1;
- }
- return ms;
- };
- UnzonedRange.prototype.equals = function (otherRange) {
- return this.startMs === otherRange.startMs && this.endMs === otherRange.endMs;
- };
- UnzonedRange.prototype.clone = function () {
- var range = new UnzonedRange(this.startMs, this.endMs);
- range.isStart = this.isStart;
- range.isEnd = this.isEnd;
- return range;
- };
- // Returns an ambig-zoned moment from startMs.
- // BEWARE: returned moment is not localized.
- // Formatting and start-of-week will be default.
- UnzonedRange.prototype.getStart = function () {
- if (this.startMs != null) {
- return moment_ext_1.default.utc(this.startMs).stripZone();
- }
- return null;
- };
- // Returns an ambig-zoned moment from startMs.
- // BEWARE: returned moment is not localized.
- // Formatting and start-of-week will be default.
- UnzonedRange.prototype.getEnd = function () {
- if (this.endMs != null) {
- return moment_ext_1.default.utc(this.endMs).stripZone();
- }
- return null;
- };
- UnzonedRange.prototype.as = function (unit) {
- return moment.utc(this.endMs).diff(moment.utc(this.startMs), unit, true);
- };
- return UnzonedRange;
-}());
-exports.default = UnzonedRange;
-/*
-Only works for non-open-ended ranges.
-*/
-function compareUnzonedRanges(range1, range2) {
- return range1.startMs - range2.startMs; // earlier ranges go first
-}
-
-
-/***/ }),
-/* 6 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var $ = __webpack_require__(3);
-var ParsableModelMixin_1 = __webpack_require__(208);
-var Class_1 = __webpack_require__(33);
-var EventDefParser_1 = __webpack_require__(49);
-var EventSource = /** @class */ (function (_super) {
- tslib_1.__extends(EventSource, _super);
- // can we do away with calendar? at least for the abstract?
- // useful for buildEventDef
- function EventSource(calendar) {
- var _this = _super.call(this) || this;
- _this.calendar = calendar;
- _this.className = [];
- _this.uid = String(EventSource.uuid++);
- return _this;
- }
- /*
- rawInput can be any data type!
- */
- EventSource.parse = function (rawInput, calendar) {
- var source = new this(calendar);
- if (typeof rawInput === 'object') {
- if (source.applyProps(rawInput)) {
- return source;
- }
- }
- return false;
- };
- EventSource.normalizeId = function (id) {
- if (id) {
- return String(id);
- }
- return null;
- };
- EventSource.prototype.fetch = function (start, end, timezone) {
- // subclasses must implement. must return a promise.
- };
- EventSource.prototype.removeEventDefsById = function (eventDefId) {
- // optional for subclasses to implement
- };
- EventSource.prototype.removeAllEventDefs = function () {
- // optional for subclasses to implement
- };
- /*
- For compairing/matching
- */
- EventSource.prototype.getPrimitive = function (otherSource) {
- // subclasses must implement
- };
- EventSource.prototype.parseEventDefs = function (rawEventDefs) {
- var i;
- var eventDef;
- var eventDefs = [];
- for (i = 0; i < rawEventDefs.length; i++) {
- eventDef = this.parseEventDef(rawEventDefs[i]);
- if (eventDef) {
- eventDefs.push(eventDef);
- }
- }
- return eventDefs;
- };
- EventSource.prototype.parseEventDef = function (rawInput) {
- var calendarTransform = this.calendar.opt('eventDataTransform');
- var sourceTransform = this.eventDataTransform;
- if (calendarTransform) {
- rawInput = calendarTransform(rawInput, this.calendar);
- }
- if (sourceTransform) {
- rawInput = sourceTransform(rawInput, this.calendar);
- }
- return EventDefParser_1.default.parse(rawInput, this);
- };
- EventSource.prototype.applyManualStandardProps = function (rawProps) {
- if (rawProps.id != null) {
- this.id = EventSource.normalizeId(rawProps.id);
- }
- // TODO: converge with EventDef
- if ($.isArray(rawProps.className)) {
- this.className = rawProps.className;
- }
- else if (typeof rawProps.className === 'string') {
- this.className = rawProps.className.split(/\s+/);
- }
- return true;
- };
- EventSource.uuid = 0;
- EventSource.defineStandardProps = ParsableModelMixin_1.default.defineStandardProps;
- EventSource.copyVerbatimStandardProps = ParsableModelMixin_1.default.copyVerbatimStandardProps;
- return EventSource;
-}(Class_1.default));
-exports.default = EventSource;
-ParsableModelMixin_1.default.mixInto(EventSource);
-// Parsing
-// ---------------------------------------------------------------------------------------------------------------------
-EventSource.defineStandardProps({
- // manually process...
- id: false,
- className: false,
- // automatically transfer...
- color: true,
- backgroundColor: true,
- borderColor: true,
- textColor: true,
- editable: true,
- startEditable: true,
- durationEditable: true,
- rendering: true,
- overlap: true,
- constraint: true,
- allDayDefault: true,
- eventDataTransform: true
-});
-
-
-/***/ }),
-/* 7 */
-/***/ (function(module, exports, __webpack_require__) {
-
-/*
-Utility methods for easily listening to events on another object,
-and more importantly, easily unlistening from them.
-
-USAGE:
- import { default as ListenerMixin, ListenerInterface } from './ListenerMixin'
-in class:
- listenTo: ListenerInterface['listenTo']
- stopListeningTo: ListenerInterface['stopListeningTo']
-after class:
- ListenerMixin.mixInto(TheClass)
-*/
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var $ = __webpack_require__(3);
-var Mixin_1 = __webpack_require__(14);
-var guid = 0;
-var ListenerMixin = /** @class */ (function (_super) {
- tslib_1.__extends(ListenerMixin, _super);
- function ListenerMixin() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- /*
- Given an `other` object that has on/off methods, bind the given `callback` to an event by the given name.
- The `callback` will be called with the `this` context of the object that .listenTo is being called on.
- Can be called:
- .listenTo(other, eventName, callback)
- OR
- .listenTo(other, {
- eventName1: callback1,
- eventName2: callback2
- })
- */
- ListenerMixin.prototype.listenTo = function (other, arg, callback) {
- if (typeof arg === 'object') {
- for (var eventName in arg) {
- if (arg.hasOwnProperty(eventName)) {
- this.listenTo(other, eventName, arg[eventName]);
- }
- }
- }
- else if (typeof arg === 'string') {
- other.on(arg + '.' + this.getListenerNamespace(), // use event namespacing to identify this object
- $.proxy(callback, this) // always use `this` context
- // the usually-undesired jQuery guid behavior doesn't matter,
- // because we always unbind via namespace
- );
- }
- };
- /*
- Causes the current object to stop listening to events on the `other` object.
- `eventName` is optional. If omitted, will stop listening to ALL events on `other`.
- */
- ListenerMixin.prototype.stopListeningTo = function (other, eventName) {
- other.off((eventName || '') + '.' + this.getListenerNamespace());
- };
- /*
- Returns a string, unique to this object, to be used for event namespacing
- */
- ListenerMixin.prototype.getListenerNamespace = function () {
- if (this.listenerId == null) {
- this.listenerId = guid++;
- }
- return '_listener' + this.listenerId;
- };
- return ListenerMixin;
-}(Mixin_1.default));
-exports.default = ListenerMixin;
-
-
-/***/ }),
-/* 8 */,
-/* 9 */,
-/* 10 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var moment = __webpack_require__(0);
-var $ = __webpack_require__(3);
-var util_1 = __webpack_require__(4);
-var ambigDateOfMonthRegex = /^\s*\d{4}-\d\d$/;
-var ambigTimeOrZoneRegex = /^\s*\d{4}-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?)?$/;
-var newMomentProto = moment.fn; // where we will attach our new methods
-exports.newMomentProto = newMomentProto;
-var oldMomentProto = $.extend({}, newMomentProto); // copy of original moment methods
-exports.oldMomentProto = oldMomentProto;
-// tell momentjs to transfer these properties upon clone
-var momentProperties = moment.momentProperties;
-momentProperties.push('_fullCalendar');
-momentProperties.push('_ambigTime');
-momentProperties.push('_ambigZone');
-/*
-Call this if you want Moment's original format method to be used
-*/
-function oldMomentFormat(mom, formatStr) {
- return oldMomentProto.format.call(mom, formatStr); // oldMomentProto defined in moment-ext.js
-}
-exports.oldMomentFormat = oldMomentFormat;
-// Creating
-// -------------------------------------------------------------------------------------------------
-// Creates a new moment, similar to the vanilla moment(...) constructor, but with
-// extra features (ambiguous time, enhanced formatting). When given an existing moment,
-// it will function as a clone (and retain the zone of the moment). Anything else will
-// result in a moment in the local zone.
-var momentExt = function () {
- return makeMoment(arguments);
-};
-exports.default = momentExt;
-// Sames as momentExt, but forces the resulting moment to be in the UTC timezone.
-momentExt.utc = function () {
- var mom = makeMoment(arguments, true);
- // Force it into UTC because makeMoment doesn't guarantee it
- // (if given a pre-existing moment for example)
- if (mom.hasTime()) {
- mom.utc();
- }
- return mom;
-};
-// Same as momentExt, but when given an ISO8601 string, the timezone offset is preserved.
-// ISO8601 strings with no timezone offset will become ambiguously zoned.
-momentExt.parseZone = function () {
- return makeMoment(arguments, true, true);
-};
-// Builds an enhanced moment from args. When given an existing moment, it clones. When given a
-// native Date, or called with no arguments (the current time), the resulting moment will be local.
-// Anything else needs to be "parsed" (a string or an array), and will be affected by:
-// parseAsUTC - if there is no zone information, should we parse the input in UTC?
-// parseZone - if there is zone information, should we force the zone of the moment?
-function makeMoment(args, parseAsUTC, parseZone) {
- if (parseAsUTC === void 0) { parseAsUTC = false; }
- if (parseZone === void 0) { parseZone = false; }
- var input = args[0];
- var isSingleString = args.length === 1 && typeof input === 'string';
- var isAmbigTime;
- var isAmbigZone;
- var ambigMatch;
- var mom;
- if (moment.isMoment(input) || util_1.isNativeDate(input) || input === undefined) {
- mom = moment.apply(null, args);
- }
- else {
- isAmbigTime = false;
- isAmbigZone = false;
- if (isSingleString) {
- if (ambigDateOfMonthRegex.test(input)) {
- // accept strings like '2014-05', but convert to the first of the month
- input += '-01';
- args = [input]; // for when we pass it on to moment's constructor
- isAmbigTime = true;
- isAmbigZone = true;
- }
- else if ((ambigMatch = ambigTimeOrZoneRegex.exec(input))) {
- isAmbigTime = !ambigMatch[5]; // no time part?
- isAmbigZone = true;
- }
- }
- else if ($.isArray(input)) {
- // arrays have no timezone information, so assume ambiguous zone
- isAmbigZone = true;
- }
- // otherwise, probably a string with a format
- if (parseAsUTC || isAmbigTime) {
- mom = moment.utc.apply(moment, args);
- }
- else {
- mom = moment.apply(null, args);
- }
- if (isAmbigTime) {
- mom._ambigTime = true;
- mom._ambigZone = true; // ambiguous time always means ambiguous zone
- }
- else if (parseZone) {
- if (isAmbigZone) {
- mom._ambigZone = true;
- }
- else if (isSingleString) {
- mom.utcOffset(input); // if not a valid zone, will assign UTC
- }
- }
- }
- mom._fullCalendar = true; // flag for extended functionality
- return mom;
-}
-// Week Number
-// -------------------------------------------------------------------------------------------------
-// Returns the week number, considering the locale's custom week number calcuation
-// `weeks` is an alias for `week`
-newMomentProto.week = newMomentProto.weeks = function (input) {
- var weekCalc = this._locale._fullCalendar_weekCalc;
- if (input == null && typeof weekCalc === 'function') {
- return weekCalc(this);
- }
- else if (weekCalc === 'ISO') {
- return oldMomentProto.isoWeek.apply(this, arguments); // ISO getter/setter
- }
- return oldMomentProto.week.apply(this, arguments); // local getter/setter
-};
-// Time-of-day
-// -------------------------------------------------------------------------------------------------
-// GETTER
-// Returns a Duration with the hours/minutes/seconds/ms values of the moment.
-// If the moment has an ambiguous time, a duration of 00:00 will be returned.
-//
-// SETTER
-// You can supply a Duration, a Moment, or a Duration-like argument.
-// When setting the time, and the moment has an ambiguous time, it then becomes unambiguous.
-newMomentProto.time = function (time) {
- // Fallback to the original method (if there is one) if this moment wasn't created via FullCalendar.
- // `time` is a generic enough method name where this precaution is necessary to avoid collisions w/ other plugins.
- if (!this._fullCalendar) {
- return oldMomentProto.time.apply(this, arguments);
- }
- if (time == null) {
- return moment.duration({
- hours: this.hours(),
- minutes: this.minutes(),
- seconds: this.seconds(),
- milliseconds: this.milliseconds()
- });
- }
- else {
- this._ambigTime = false; // mark that the moment now has a time
- if (!moment.isDuration(time) && !moment.isMoment(time)) {
- time = moment.duration(time);
- }
- // The day value should cause overflow (so 24 hours becomes 00:00:00 of next day).
- // Only for Duration times, not Moment times.
- var dayHours = 0;
- if (moment.isDuration(time)) {
- dayHours = Math.floor(time.asDays()) * 24;
- }
- // We need to set the individual fields.
- // Can't use startOf('day') then add duration. In case of DST at start of day.
- return this.hours(dayHours + time.hours())
- .minutes(time.minutes())
- .seconds(time.seconds())
- .milliseconds(time.milliseconds());
- }
-};
-// Converts the moment to UTC, stripping out its time-of-day and timezone offset,
-// but preserving its YMD. A moment with a stripped time will display no time
-// nor timezone offset when .format() is called.
-newMomentProto.stripTime = function () {
- if (!this._ambigTime) {
- this.utc(true); // keepLocalTime=true (for keeping *date* value)
- // set time to zero
- this.set({
- hours: 0,
- minutes: 0,
- seconds: 0,
- ms: 0
- });
- // Mark the time as ambiguous. This needs to happen after the .utc() call, which might call .utcOffset(),
- // which clears all ambig flags.
- this._ambigTime = true;
- this._ambigZone = true; // if ambiguous time, also ambiguous timezone offset
- }
- return this; // for chaining
-};
-// Returns if the moment has a non-ambiguous time (boolean)
-newMomentProto.hasTime = function () {
- return !this._ambigTime;
-};
-// Timezone
-// -------------------------------------------------------------------------------------------------
-// Converts the moment to UTC, stripping out its timezone offset, but preserving its
-// YMD and time-of-day. A moment with a stripped timezone offset will display no
-// timezone offset when .format() is called.
-newMomentProto.stripZone = function () {
- var wasAmbigTime;
- if (!this._ambigZone) {
- wasAmbigTime = this._ambigTime;
- this.utc(true); // keepLocalTime=true (for keeping date and time values)
- // the above call to .utc()/.utcOffset() unfortunately might clear the ambig flags, so restore
- this._ambigTime = wasAmbigTime || false;
- // Mark the zone as ambiguous. This needs to happen after the .utc() call, which might call .utcOffset(),
- // which clears the ambig flags.
- this._ambigZone = true;
- }
- return this; // for chaining
-};
-// Returns of the moment has a non-ambiguous timezone offset (boolean)
-newMomentProto.hasZone = function () {
- return !this._ambigZone;
-};
-// implicitly marks a zone
-newMomentProto.local = function (keepLocalTime) {
- // for when converting from ambiguously-zoned to local,
- // keep the time values when converting from UTC -> local
- oldMomentProto.local.call(this, this._ambigZone || keepLocalTime);
- // ensure non-ambiguous
- // this probably already happened via local() -> utcOffset(), but don't rely on Moment's internals
- this._ambigTime = false;
- this._ambigZone = false;
- return this; // for chaining
-};
-// implicitly marks a zone
-newMomentProto.utc = function (keepLocalTime) {
- oldMomentProto.utc.call(this, keepLocalTime);
- // ensure non-ambiguous
- // this probably already happened via utc() -> utcOffset(), but don't rely on Moment's internals
- this._ambigTime = false;
- this._ambigZone = false;
- return this;
-};
-// implicitly marks a zone (will probably get called upon .utc() and .local())
-newMomentProto.utcOffset = function (tzo) {
- if (tzo != null) {
- // these assignments needs to happen before the original zone method is called.
- // I forget why, something to do with a browser crash.
- this._ambigTime = false;
- this._ambigZone = false;
- }
- return oldMomentProto.utcOffset.apply(this, arguments);
-};
-
-
-/***/ }),
-/* 11 */
-/***/ (function(module, exports, __webpack_require__) {
-
-/*
-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)
-*/
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var $ = __webpack_require__(3);
-var Mixin_1 = __webpack_require__(14);
-var EmitterMixin = /** @class */ (function (_super) {
- tslib_1.__extends(EmitterMixin, _super);
- function EmitterMixin() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- // jQuery-ification via $(this) allows a non-DOM object to have
- // the same event handling capabilities (including namespaces).
- EmitterMixin.prototype.on = function (types, handler) {
- $(this).on(types, this._prepareIntercept(handler));
- return this; // for chaining
- };
- EmitterMixin.prototype.one = function (types, handler) {
- $(this).one(types, this._prepareIntercept(handler));
- return this; // for chaining
- };
- EmitterMixin.prototype._prepareIntercept = function (handler) {
- // handlers are always called with an "event" object as their first param.
- // sneak the `this` context and arguments into the extra parameter object
- // and forward them on to the original handler.
- var intercept = function (ev, extra) {
- return handler.apply(extra.context || this, extra.args || []);
- };
- // mimick jQuery's internal "proxy" system (risky, I know)
- // causing all functions with the same .guid to appear to be the same.
- // https://github.com/jquery/jquery/blob/2.2.4/src/core.js#L448
- // this is needed for calling .off with the original non-intercept handler.
- if (!handler.guid) {
- handler.guid = $.guid++;
- }
- intercept.guid = handler.guid;
- return intercept;
- };
- EmitterMixin.prototype.off = function (types, handler) {
- $(this).off(types, handler);
- return this; // for chaining
- };
- EmitterMixin.prototype.trigger = function (types) {
- var args = [];
- for (var _i = 1; _i < arguments.length; _i++) {
- args[_i - 1] = arguments[_i];
- }
- // pass in "extra" info to the intercept
- $(this).triggerHandler(types, { args: args });
- return this; // for chaining
- };
- EmitterMixin.prototype.triggerWith = function (types, context, args) {
- // `triggerHandler` is less reliant on the DOM compared to `trigger`.
- // pass in "extra" info to the intercept.
- $(this).triggerHandler(types, { context: context, args: args });
- return this; // for chaining
- };
- EmitterMixin.prototype.hasHandlers = function (type) {
- var hash = $._data(this, 'events'); // http://blog.jquery.com/2012/08/09/jquery-1-8-released/
- return hash && hash[type] && hash[type].length > 0;
- };
- return EmitterMixin;
-}(Mixin_1.default));
-exports.default = EmitterMixin;
-
-
-/***/ }),
-/* 12 */
-/***/ (function(module, exports) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-/*
-Meant to be immutable
-*/
-var ComponentFootprint = /** @class */ (function () {
- function ComponentFootprint(unzonedRange, isAllDay) {
- this.isAllDay = false; // component can choose to ignore this
- this.unzonedRange = unzonedRange;
- this.isAllDay = isAllDay;
- }
- /*
- Only works for non-open-ended ranges.
- */
- ComponentFootprint.prototype.toLegacy = function (calendar) {
- return {
- start: calendar.msToMoment(this.unzonedRange.startMs, this.isAllDay),
- end: calendar.msToMoment(this.unzonedRange.endMs, this.isAllDay)
- };
- };
- return ComponentFootprint;
-}());
-exports.default = ComponentFootprint;
-
-
-/***/ }),
-/* 13 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var EventDef_1 = __webpack_require__(34);
-var EventInstance_1 = __webpack_require__(209);
-var EventDateProfile_1 = __webpack_require__(17);
-var SingleEventDef = /** @class */ (function (_super) {
- tslib_1.__extends(SingleEventDef, _super);
- function SingleEventDef() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- /*
- Will receive start/end params, but will be ignored.
- */
- SingleEventDef.prototype.buildInstances = function () {
- return [this.buildInstance()];
- };
- SingleEventDef.prototype.buildInstance = function () {
- return new EventInstance_1.default(this, // definition
- this.dateProfile);
- };
- SingleEventDef.prototype.isAllDay = function () {
- return this.dateProfile.isAllDay();
- };
- SingleEventDef.prototype.clone = function () {
- var def = _super.prototype.clone.call(this);
- def.dateProfile = this.dateProfile;
- return def;
- };
- SingleEventDef.prototype.rezone = function () {
- var calendar = this.source.calendar;
- var dateProfile = this.dateProfile;
- this.dateProfile = new EventDateProfile_1.default(calendar.moment(dateProfile.start), dateProfile.end ? calendar.moment(dateProfile.end) : null, calendar);
- };
- /*
- NOTE: if super-method fails, should still attempt to apply
- */
- SingleEventDef.prototype.applyManualStandardProps = function (rawProps) {
- var superSuccess = _super.prototype.applyManualStandardProps.call(this, rawProps);
- var dateProfile = EventDateProfile_1.default.parse(rawProps, this.source); // returns null on failure
- if (dateProfile) {
- this.dateProfile = dateProfile;
- // make sure `date` shows up in the legacy event objects as-is
- if (rawProps.date != null) {
- this.miscProps.date = rawProps.date;
- }
- return superSuccess;
- }
- else {
- return false;
- }
- };
- return SingleEventDef;
-}(EventDef_1.default));
-exports.default = SingleEventDef;
-// Parsing
-// ---------------------------------------------------------------------------------------------------------------------
-SingleEventDef.defineStandardProps({
- start: false,
- date: false,
- end: false,
- allDay: false
-});
-
-
-/***/ }),
-/* 14 */
-/***/ (function(module, exports) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var Mixin = /** @class */ (function () {
- function Mixin() {
- }
- Mixin.mixInto = function (destClass) {
- var _this = this;
- Object.getOwnPropertyNames(this.prototype).forEach(function (name) {
- if (!destClass.prototype[name]) {
- destClass.prototype[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;
-}());
-exports.default = Mixin;
-
-
-/***/ }),
-/* 15 */
-/***/ (function(module, exports) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var Interaction = /** @class */ (function () {
- function Interaction(component) {
- this.view = component._getView();
- this.component = component;
- }
- Interaction.prototype.opt = function (name) {
- return this.view.opt(name);
- };
- Interaction.prototype.end = function () {
- // subclasses can implement
- };
- return Interaction;
-}());
-exports.default = Interaction;
-
-
-/***/ }),
-/* 16 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.version = '3.9.0';
-// When introducing internal API incompatibilities (where fullcalendar plugins would break),
-// the minor version of the calendar should be upped (ex: 2.7.2 -> 2.8.0)
-// and the below integer should be incremented.
-exports.internalApiVersion = 12;
-var util_1 = __webpack_require__(4);
-exports.applyAll = util_1.applyAll;
-exports.debounce = util_1.debounce;
-exports.isInt = util_1.isInt;
-exports.htmlEscape = util_1.htmlEscape;
-exports.cssToStr = util_1.cssToStr;
-exports.proxy = util_1.proxy;
-exports.capitaliseFirstLetter = util_1.capitaliseFirstLetter;
-exports.getOuterRect = util_1.getOuterRect;
-exports.getClientRect = util_1.getClientRect;
-exports.getContentRect = util_1.getContentRect;
-exports.getScrollbarWidths = util_1.getScrollbarWidths;
-exports.preventDefault = util_1.preventDefault;
-exports.parseFieldSpecs = util_1.parseFieldSpecs;
-exports.compareByFieldSpecs = util_1.compareByFieldSpecs;
-exports.compareByFieldSpec = util_1.compareByFieldSpec;
-exports.flexibleCompare = util_1.flexibleCompare;
-exports.computeGreatestUnit = util_1.computeGreatestUnit;
-exports.divideRangeByDuration = util_1.divideRangeByDuration;
-exports.divideDurationByDuration = util_1.divideDurationByDuration;
-exports.multiplyDuration = util_1.multiplyDuration;
-exports.durationHasTime = util_1.durationHasTime;
-exports.log = util_1.log;
-exports.warn = util_1.warn;
-exports.removeExact = util_1.removeExact;
-exports.intersectRects = util_1.intersectRects;
-var date_formatting_1 = __webpack_require__(47);
-exports.formatDate = date_formatting_1.formatDate;
-exports.formatRange = date_formatting_1.formatRange;
-exports.queryMostGranularFormatUnit = date_formatting_1.queryMostGranularFormatUnit;
-var locale_1 = __webpack_require__(31);
-exports.datepickerLocale = locale_1.datepickerLocale;
-exports.locale = locale_1.locale;
-var moment_ext_1 = __webpack_require__(10);
-exports.moment = moment_ext_1.default;
-var EmitterMixin_1 = __webpack_require__(11);
-exports.EmitterMixin = EmitterMixin_1.default;
-var ListenerMixin_1 = __webpack_require__(7);
-exports.ListenerMixin = ListenerMixin_1.default;
-var Model_1 = __webpack_require__(48);
-exports.Model = Model_1.default;
-var Constraints_1 = __webpack_require__(207);
-exports.Constraints = Constraints_1.default;
-var UnzonedRange_1 = __webpack_require__(5);
-exports.UnzonedRange = UnzonedRange_1.default;
-var ComponentFootprint_1 = __webpack_require__(12);
-exports.ComponentFootprint = ComponentFootprint_1.default;
-var BusinessHourGenerator_1 = __webpack_require__(212);
-exports.BusinessHourGenerator = BusinessHourGenerator_1.default;
-var EventDef_1 = __webpack_require__(34);
-exports.EventDef = EventDef_1.default;
-var EventDefMutation_1 = __webpack_require__(37);
-exports.EventDefMutation = EventDefMutation_1.default;
-var EventSourceParser_1 = __webpack_require__(38);
-exports.EventSourceParser = EventSourceParser_1.default;
-var EventSource_1 = __webpack_require__(6);
-exports.EventSource = EventSource_1.default;
-var ThemeRegistry_1 = __webpack_require__(51);
-exports.defineThemeSystem = ThemeRegistry_1.defineThemeSystem;
-var EventInstanceGroup_1 = __webpack_require__(18);
-exports.EventInstanceGroup = EventInstanceGroup_1.default;
-var ArrayEventSource_1 = __webpack_require__(52);
-exports.ArrayEventSource = ArrayEventSource_1.default;
-var FuncEventSource_1 = __webpack_require__(215);
-exports.FuncEventSource = FuncEventSource_1.default;
-var JsonFeedEventSource_1 = __webpack_require__(216);
-exports.JsonFeedEventSource = JsonFeedEventSource_1.default;
-var EventFootprint_1 = __webpack_require__(36);
-exports.EventFootprint = EventFootprint_1.default;
-var Class_1 = __webpack_require__(33);
-exports.Class = Class_1.default;
-var Mixin_1 = __webpack_require__(14);
-exports.Mixin = Mixin_1.default;
-var CoordCache_1 = __webpack_require__(53);
-exports.CoordCache = CoordCache_1.default;
-var DragListener_1 = __webpack_require__(54);
-exports.DragListener = DragListener_1.default;
-var Promise_1 = __webpack_require__(20);
-exports.Promise = Promise_1.default;
-var TaskQueue_1 = __webpack_require__(217);
-exports.TaskQueue = TaskQueue_1.default;
-var RenderQueue_1 = __webpack_require__(218);
-exports.RenderQueue = RenderQueue_1.default;
-var Scroller_1 = __webpack_require__(39);
-exports.Scroller = Scroller_1.default;
-var Theme_1 = __webpack_require__(19);
-exports.Theme = Theme_1.default;
-var DateComponent_1 = __webpack_require__(219);
-exports.DateComponent = DateComponent_1.default;
-var InteractiveDateComponent_1 = __webpack_require__(40);
-exports.InteractiveDateComponent = InteractiveDateComponent_1.default;
-var Calendar_1 = __webpack_require__(220);
-exports.Calendar = Calendar_1.default;
-var View_1 = __webpack_require__(41);
-exports.View = View_1.default;
-var ViewRegistry_1 = __webpack_require__(22);
-exports.defineView = ViewRegistry_1.defineView;
-exports.getViewConfig = ViewRegistry_1.getViewConfig;
-var DayTableMixin_1 = __webpack_require__(55);
-exports.DayTableMixin = DayTableMixin_1.default;
-var BusinessHourRenderer_1 = __webpack_require__(56);
-exports.BusinessHourRenderer = BusinessHourRenderer_1.default;
-var EventRenderer_1 = __webpack_require__(42);
-exports.EventRenderer = EventRenderer_1.default;
-var FillRenderer_1 = __webpack_require__(57);
-exports.FillRenderer = FillRenderer_1.default;
-var HelperRenderer_1 = __webpack_require__(58);
-exports.HelperRenderer = HelperRenderer_1.default;
-var ExternalDropping_1 = __webpack_require__(222);
-exports.ExternalDropping = ExternalDropping_1.default;
-var EventResizing_1 = __webpack_require__(223);
-exports.EventResizing = EventResizing_1.default;
-var EventPointing_1 = __webpack_require__(59);
-exports.EventPointing = EventPointing_1.default;
-var EventDragging_1 = __webpack_require__(224);
-exports.EventDragging = EventDragging_1.default;
-var DateSelecting_1 = __webpack_require__(225);
-exports.DateSelecting = DateSelecting_1.default;
-var StandardInteractionsMixin_1 = __webpack_require__(60);
-exports.StandardInteractionsMixin = StandardInteractionsMixin_1.default;
-var AgendaView_1 = __webpack_require__(226);
-exports.AgendaView = AgendaView_1.default;
-var TimeGrid_1 = __webpack_require__(227);
-exports.TimeGrid = TimeGrid_1.default;
-var DayGrid_1 = __webpack_require__(61);
-exports.DayGrid = DayGrid_1.default;
-var BasicView_1 = __webpack_require__(62);
-exports.BasicView = BasicView_1.default;
-var MonthView_1 = __webpack_require__(229);
-exports.MonthView = MonthView_1.default;
-var ListView_1 = __webpack_require__(230);
-exports.ListView = ListView_1.default;
-
-
-/***/ }),
-/* 17 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var UnzonedRange_1 = __webpack_require__(5);
-/*
-Meant to be immutable
-*/
-var EventDateProfile = /** @class */ (function () {
- function EventDateProfile(start, end, calendar) {
- this.start = start;
- this.end = end || null;
- this.unzonedRange = this.buildUnzonedRange(calendar);
- }
- /*
- Needs an EventSource object
- */
- EventDateProfile.parse = function (rawProps, source) {
- var startInput = rawProps.start || rawProps.date;
- var endInput = rawProps.end;
- if (!startInput) {
- return false;
- }
- var calendar = source.calendar;
- var start = calendar.moment(startInput);
- var end = endInput ? calendar.moment(endInput) : null;
- var forcedAllDay = rawProps.allDay;
- var forceEventDuration = calendar.opt('forceEventDuration');
- if (!start.isValid()) {
- return false;
- }
- if (end && (!end.isValid() || !end.isAfter(start))) {
- end = null;
- }
- if (forcedAllDay == null) {
- forcedAllDay = source.allDayDefault;
- if (forcedAllDay == null) {
- forcedAllDay = calendar.opt('allDayDefault');
- }
- }
- if (forcedAllDay === true) {
- start.stripTime();
- if (end) {
- end.stripTime();
- }
- }
- else if (forcedAllDay === false) {
- if (!start.hasTime()) {
- start.time(0);
- }
- if (end && !end.hasTime()) {
- end.time(0);
- }
- }
- if (!end && forceEventDuration) {
- end = calendar.getDefaultEventEnd(!start.hasTime(), start);
- }
- return new EventDateProfile(start, end, calendar);
- };
- EventDateProfile.isStandardProp = function (propName) {
- return propName === 'start' || propName === 'date' || propName === 'end' || propName === 'allDay';
- };
- EventDateProfile.prototype.isAllDay = function () {
- return !(this.start.hasTime() || (this.end && this.end.hasTime()));
- };
- /*
- Needs a Calendar object
- */
- EventDateProfile.prototype.buildUnzonedRange = function (calendar) {
- var startMs = this.start.clone().stripZone().valueOf();
- var endMs = this.getEnd(calendar).stripZone().valueOf();
- return new UnzonedRange_1.default(startMs, endMs);
- };
- /*
- Needs a Calendar object
- */
- EventDateProfile.prototype.getEnd = function (calendar) {
- return this.end ?
- this.end.clone() :
- // derive the end from the start and allDay. compute allDay if necessary
- calendar.getDefaultEventEnd(this.isAllDay(), this.start);
- };
- return EventDateProfile;
-}());
-exports.default = EventDateProfile;
-
-
-/***/ }),
-/* 18 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var UnzonedRange_1 = __webpack_require__(5);
-var util_1 = __webpack_require__(35);
-var EventRange_1 = __webpack_require__(211);
-/*
-It's expected that there will be at least one EventInstance,
-OR that an explicitEventDef is assigned.
-*/
-var EventInstanceGroup = /** @class */ (function () {
- function EventInstanceGroup(eventInstances) {
- this.eventInstances = eventInstances || [];
- }
- EventInstanceGroup.prototype.getAllEventRanges = function (constraintRange) {
- if (constraintRange) {
- return this.sliceNormalRenderRanges(constraintRange);
- }
- else {
- return this.eventInstances.map(util_1.eventInstanceToEventRange);
- }
- };
- EventInstanceGroup.prototype.sliceRenderRanges = function (constraintRange) {
- if (this.isInverse()) {
- return this.sliceInverseRenderRanges(constraintRange);
- }
- else {
- return this.sliceNormalRenderRanges(constraintRange);
- }
- };
- EventInstanceGroup.prototype.sliceNormalRenderRanges = function (constraintRange) {
- var eventInstances = this.eventInstances;
- var i;
- var eventInstance;
- var slicedRange;
- var slicedEventRanges = [];
- for (i = 0; i < eventInstances.length; i++) {
- eventInstance = eventInstances[i];
- slicedRange = eventInstance.dateProfile.unzonedRange.intersect(constraintRange);
- if (slicedRange) {
- slicedEventRanges.push(new EventRange_1.default(slicedRange, eventInstance.def, eventInstance));
- }
- }
- return slicedEventRanges;
- };
- EventInstanceGroup.prototype.sliceInverseRenderRanges = function (constraintRange) {
- var unzonedRanges = this.eventInstances.map(util_1.eventInstanceToUnzonedRange);
- var ownerDef = this.getEventDef();
- unzonedRanges = UnzonedRange_1.default.invertRanges(unzonedRanges, constraintRange);
- return unzonedRanges.map(function (unzonedRange) {
- return new EventRange_1.default(unzonedRange, ownerDef); // don't give an EventInstance
- });
- };
- EventInstanceGroup.prototype.isInverse = function () {
- return this.getEventDef().hasInverseRendering();
- };
- EventInstanceGroup.prototype.getEventDef = function () {
- return this.explicitEventDef || this.eventInstances[0].def;
- };
- return EventInstanceGroup;
-}());
-exports.default = EventInstanceGroup;
-
-
-/***/ }),
-/* 19 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var $ = __webpack_require__(3);
-var Theme = /** @class */ (function () {
- function Theme(optionsManager) {
- this.optionsManager = optionsManager;
- this.processIconOverride();
- }
- Theme.prototype.processIconOverride = function () {
- if (this.iconOverrideOption) {
- this.setIconOverride(this.optionsManager.get(this.iconOverrideOption));
- }
- };
- Theme.prototype.setIconOverride = function (iconOverrideHash) {
- var iconClassesCopy;
- var buttonName;
- if ($.isPlainObject(iconOverrideHash)) {
- iconClassesCopy = $.extend({}, 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) {
- 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;
-}());
-exports.default = Theme;
-Theme.prototype.classes = {};
-Theme.prototype.iconClasses = {};
-Theme.prototype.baseIconClass = '';
-Theme.prototype.iconOverridePrefix = '';
-
-
-/***/ }),
-/* 20 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var $ = __webpack_require__(3);
-var PromiseStub = {
- construct: function (executor) {
- var deferred = $.Deferred();
- var promise = deferred.promise();
- if (typeof executor === 'function') {
- executor(function (val) {
- deferred.resolve(val);
- attachImmediatelyResolvingThen(promise, val);
- }, function () {
- deferred.reject();
- attachImmediatelyRejectingThen(promise);
- });
- }
- return promise;
- },
- resolve: function (val) {
- var deferred = $.Deferred().resolve(val);
- var promise = deferred.promise();
- attachImmediatelyResolvingThen(promise, val);
- return promise;
- },
- reject: function () {
- var deferred = $.Deferred().reject();
- var promise = deferred.promise();
- attachImmediatelyRejectingThen(promise);
- return promise;
- }
-};
-exports.default = PromiseStub;
-function attachImmediatelyResolvingThen(promise, val) {
- promise.then = function (onResolve) {
- if (typeof onResolve === 'function') {
- return PromiseStub.resolve(onResolve(val));
- }
- return promise;
- };
-}
-function attachImmediatelyRejectingThen(promise) {
- promise.then = function (onResolve, onReject) {
- if (typeof onReject === 'function') {
- onReject();
- }
- return promise;
- };
-}
-
-
-/***/ }),
-/* 21 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var $ = __webpack_require__(3);
-var exportHooks = __webpack_require__(16);
-var EmitterMixin_1 = __webpack_require__(11);
-var ListenerMixin_1 = __webpack_require__(7);
-exportHooks.touchMouseIgnoreWait = 500;
-var globalEmitter = null;
-var neededCount = 0;
-/*
-Listens to document and window-level user-interaction events, like touch events and mouse events,
-and fires these events as-is to whoever is observing a GlobalEmitter.
-Best when used as a singleton via GlobalEmitter.get()
-
-Normalizes mouse/touch events. For examples:
-- ignores the the simulated mouse events that happen after a quick tap: mousemove+mousedown+mouseup+click
-- compensates for various buggy scenarios where a touchend does not fire
-*/
-var GlobalEmitter = /** @class */ (function () {
- function GlobalEmitter() {
- this.isTouching = false;
- this.mouseIgnoreDepth = 0;
- }
- // gets the singleton
- GlobalEmitter.get = function () {
- if (!globalEmitter) {
- globalEmitter = new GlobalEmitter();
- globalEmitter.bind();
- }
- return globalEmitter;
- };
- // called when an object knows it will need a GlobalEmitter in the near future.
- GlobalEmitter.needed = function () {
- GlobalEmitter.get(); // ensures globalEmitter
- neededCount++;
- };
- // called when the object that originally called needed() doesn't need a GlobalEmitter anymore.
- GlobalEmitter.unneeded = function () {
- neededCount--;
- if (!neededCount) {
- globalEmitter.unbind();
- globalEmitter = null;
- }
- };
- GlobalEmitter.prototype.bind = function () {
- var _this = this;
- this.listenTo($(document), {
- touchstart: this.handleTouchStart,
- touchcancel: this.handleTouchCancel,
- touchend: this.handleTouchEnd,
- mousedown: this.handleMouseDown,
- mousemove: this.handleMouseMove,
- mouseup: this.handleMouseUp,
- click: this.handleClick,
- selectstart: this.handleSelectStart,
- contextmenu: this.handleContextMenu
- });
- // because we need to call preventDefault
- // because https://www.chromestatus.com/features/5093566007214080
- // TODO: investigate performance because this is a global handler
- window.addEventListener('touchmove', this.handleTouchMoveProxy = function (ev) {
- _this.handleTouchMove($.Event(ev));
- }, { passive: false } // allows preventDefault()
- );
- // 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.handleScrollProxy = function (ev) {
- _this.handleScroll($.Event(ev));
- }, true // useCapture
- );
- };
- GlobalEmitter.prototype.unbind = function () {
- this.stopListeningTo($(document));
- window.removeEventListener('touchmove', this.handleTouchMoveProxy);
- window.removeEventListener('scroll', this.handleScrollProxy, true // useCapture
- );
- };
- // Touch Handlers
- // -----------------------------------------------------------------------------------------------------------------
- GlobalEmitter.prototype.handleTouchStart = function (ev) {
- // if a previous touch interaction never ended with a touchend, then implicitly end it,
- // but since a new touch interaction is about to begin, don't start the mouse ignore period.
- this.stopTouch(ev, true); // skipMouseIgnore=true
- this.isTouching = true;
- this.trigger('touchstart', ev);
- };
- GlobalEmitter.prototype.handleTouchMove = function (ev) {
- if (this.isTouching) {
- this.trigger('touchmove', ev);
- }
- };
- GlobalEmitter.prototype.handleTouchCancel = function (ev) {
- if (this.isTouching) {
- this.trigger('touchcancel', ev);
- // Have touchcancel fire an artificial touchend. That way, handlers won't need to listen to both.
- // If touchend fires later, it won't have any effect b/c isTouching will be false.
- this.stopTouch(ev);
- }
- };
- GlobalEmitter.prototype.handleTouchEnd = function (ev) {
- this.stopTouch(ev);
- };
- // Mouse Handlers
- // -----------------------------------------------------------------------------------------------------------------
- GlobalEmitter.prototype.handleMouseDown = function (ev) {
- if (!this.shouldIgnoreMouse()) {
- this.trigger('mousedown', ev);
- }
- };
- GlobalEmitter.prototype.handleMouseMove = function (ev) {
- if (!this.shouldIgnoreMouse()) {
- this.trigger('mousemove', ev);
- }
- };
- GlobalEmitter.prototype.handleMouseUp = function (ev) {
- if (!this.shouldIgnoreMouse()) {
- this.trigger('mouseup', ev);
- }
- };
- GlobalEmitter.prototype.handleClick = function (ev) {
- if (!this.shouldIgnoreMouse()) {
- this.trigger('click', ev);
- }
- };
- // Misc Handlers
- // -----------------------------------------------------------------------------------------------------------------
- GlobalEmitter.prototype.handleSelectStart = function (ev) {
- this.trigger('selectstart', ev);
- };
- GlobalEmitter.prototype.handleContextMenu = function (ev) {
- this.trigger('contextmenu', ev);
- };
- GlobalEmitter.prototype.handleScroll = function (ev) {
- this.trigger('scroll', ev);
- };
- // Utils
- // -----------------------------------------------------------------------------------------------------------------
- GlobalEmitter.prototype.stopTouch = function (ev, skipMouseIgnore) {
- if (skipMouseIgnore === void 0) { skipMouseIgnore = false; }
- if (this.isTouching) {
- this.isTouching = false;
- this.trigger('touchend', ev);
- if (!skipMouseIgnore) {
- this.startTouchMouseIgnore();
- }
- }
- };
- GlobalEmitter.prototype.startTouchMouseIgnore = function () {
- var _this = this;
- var wait = exportHooks.touchMouseIgnoreWait;
- if (wait) {
- this.mouseIgnoreDepth++;
- setTimeout(function () {
- _this.mouseIgnoreDepth--;
- }, wait);
- }
- };
- GlobalEmitter.prototype.shouldIgnoreMouse = function () {
- return this.isTouching || Boolean(this.mouseIgnoreDepth);
- };
- return GlobalEmitter;
-}());
-exports.default = GlobalEmitter;
-ListenerMixin_1.default.mixInto(GlobalEmitter);
-EmitterMixin_1.default.mixInto(GlobalEmitter);
-
-
-/***/ }),
-/* 22 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var exportHooks = __webpack_require__(16);
-exports.viewHash = {};
-exportHooks.views = exports.viewHash;
-function defineView(viewName, viewConfig) {
- exports.viewHash[viewName] = viewConfig;
-}
-exports.defineView = defineView;
-function getViewConfig(viewName) {
- return exports.viewHash[viewName];
-}
-exports.getViewConfig = getViewConfig;
-
-
-/***/ }),
-/* 23 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var util_1 = __webpack_require__(4);
-var DragListener_1 = __webpack_require__(54);
-/* Tracks mouse movements over a component and raises events about which hit the mouse is over.
-------------------------------------------------------------------------------------------------------------------------
-options:
-- subjectEl
-- subjectCenter
-*/
-var HitDragListener = /** @class */ (function (_super) {
- tslib_1.__extends(HitDragListener, _super);
- function HitDragListener(component, options) {
- var _this = _super.call(this, options) || this;
- _this.component = component;
- return _this;
- }
- // Called when drag listening starts (but a real drag has not necessarily began).
- // ev might be undefined if dragging was started manually.
- HitDragListener.prototype.handleInteractionStart = function (ev) {
- var subjectEl = this.subjectEl;
- var subjectRect;
- var origPoint;
- var point;
- this.component.hitsNeeded();
- this.computeScrollBounds(); // for autoscroll
- if (ev) {
- origPoint = { left: util_1.getEvX(ev), top: util_1.getEvY(ev) };
- point = origPoint;
- // constrain the point to bounds of the element being dragged
- if (subjectEl) {
- subjectRect = util_1.getOuterRect(subjectEl); // used for centering as well
- point = util_1.constrainPoint(point, subjectRect);
- }
- this.origHit = this.queryHit(point.left, point.top);
- // treat the center of the subject as the collision point?
- if (subjectEl && this.options.subjectCenter) {
- // only consider the area the subject overlaps the hit. best for large subjects.
- // TODO: skip this if hit didn't supply left/right/top/bottom
- if (this.origHit) {
- subjectRect = util_1.intersectRects(this.origHit, subjectRect) ||
- subjectRect; // in case there is no intersection
- }
- point = util_1.getRectCenter(subjectRect);
- }
- this.coordAdjust = util_1.diffPoints(point, origPoint); // point - origPoint
- }
- else {
- this.origHit = null;
- this.coordAdjust = null;
- }
- // call the super-method. do it after origHit has been computed
- _super.prototype.handleInteractionStart.call(this, ev);
- };
- // Called when the actual drag has started
- HitDragListener.prototype.handleDragStart = function (ev) {
- var hit;
- _super.prototype.handleDragStart.call(this, ev);
- // might be different from this.origHit if the min-distance is large
- hit = this.queryHit(util_1.getEvX(ev), util_1.getEvY(ev));
- // report the initial hit the mouse is over
- // especially important if no min-distance and drag starts immediately
- if (hit) {
- this.handleHitOver(hit);
- }
- };
- // Called when the drag moves
- HitDragListener.prototype.handleDrag = function (dx, dy, ev) {
- var hit;
- _super.prototype.handleDrag.call(this, dx, dy, ev);
- hit = this.queryHit(util_1.getEvX(ev), util_1.getEvY(ev));
- if (!isHitsEqual(hit, this.hit)) {
- if (this.hit) {
- this.handleHitOut();
- }
- if (hit) {
- this.handleHitOver(hit);
- }
- }
- };
- // Called when dragging has been stopped
- HitDragListener.prototype.handleDragEnd = function (ev) {
- this.handleHitDone();
- _super.prototype.handleDragEnd.call(this, ev);
- };
- // Called when a the mouse has just moved over a new hit
- HitDragListener.prototype.handleHitOver = function (hit) {
- var isOrig = isHitsEqual(hit, this.origHit);
- this.hit = hit;
- this.trigger('hitOver', this.hit, isOrig, this.origHit);
- };
- // Called when the mouse has just moved out of a hit
- HitDragListener.prototype.handleHitOut = function () {
- if (this.hit) {
- this.trigger('hitOut', this.hit);
- this.handleHitDone();
- this.hit = null;
- }
- };
- // Called after a hitOut. Also called before a dragStop
- HitDragListener.prototype.handleHitDone = function () {
- if (this.hit) {
- this.trigger('hitDone', this.hit);
- }
- };
- // Called when the interaction ends, whether there was a real drag or not
- HitDragListener.prototype.handleInteractionEnd = function (ev, isCancelled) {
- _super.prototype.handleInteractionEnd.call(this, ev, isCancelled);
- this.origHit = null;
- this.hit = null;
- this.component.hitsNotNeeded();
- };
- // Called when scrolling has stopped, whether through auto scroll, or the user scrolling
- HitDragListener.prototype.handleScrollEnd = function () {
- _super.prototype.handleScrollEnd.call(this);
- // hits' absolute positions will be in new places after a user's scroll.
- // HACK for recomputing.
- if (this.isDragging) {
- this.component.releaseHits();
- this.component.prepareHits();
- }
- };
- // Gets the hit underneath the coordinates for the given mouse event
- HitDragListener.prototype.queryHit = function (left, top) {
- if (this.coordAdjust) {
- left += this.coordAdjust.left;
- top += this.coordAdjust.top;
- }
- return this.component.queryHit(left, top);
- };
- return HitDragListener;
-}(DragListener_1.default));
-exports.default = HitDragListener;
-// Returns `true` if the hits are identically equal. `false` otherwise. Must be from the same component.
-// Two null values will be considered equal, as two "out of the component" states are the same.
-function isHitsEqual(hit0, hit1) {
- if (!hit0 && !hit1) {
- return true;
- }
- if (hit0 && hit1) {
- return hit0.component === hit1.component &&
- isHitPropsWithin(hit0, hit1) &&
- isHitPropsWithin(hit1, hit0); // ensures all props are identical
- }
- return false;
-}
-// Returns true if all of subHit's non-standard properties are within superHit
-function isHitPropsWithin(subHit, superHit) {
- for (var propName in subHit) {
- if (!/^(component|left|right|top|bottom)$/.test(propName)) {
- if (subHit[propName] !== superHit[propName]) {
- return false;
- }
- }
- }
- return true;
-}
-
-
-/***/ }),
-/* 24 */,
-/* 25 */,
-/* 26 */,
-/* 27 */,
-/* 28 */,
-/* 29 */,
-/* 30 */,
-/* 31 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var $ = __webpack_require__(3);
-var moment = __webpack_require__(0);
-var exportHooks = __webpack_require__(16);
-var options_1 = __webpack_require__(32);
-var util_1 = __webpack_require__(4);
-exports.localeOptionHash = {};
-exportHooks.locales = exports.localeOptionHash;
-// NOTE: can't guarantee any of these computations will run because not every locale has datepicker
-// configs, so make sure there are English fallbacks for these in the defaults file.
-var dpComputableOptions = {
- buttonText: function (dpOptions) {
- return {
- // the translations sometimes wrongly contain HTML entities
- prev: util_1.stripHtmlEntities(dpOptions.prevText),
- next: util_1.stripHtmlEntities(dpOptions.nextText),
- today: util_1.stripHtmlEntities(dpOptions.currentText)
- };
- },
- // Produces format strings like "MMMM YYYY" -> "September 2014"
- monthYearFormat: function (dpOptions) {
- return dpOptions.showMonthAfterYear ?
- 'YYYY[' + dpOptions.yearSuffix + '] MMMM' :
- 'MMMM YYYY[' + dpOptions.yearSuffix + ']';
- }
-};
-var momComputableOptions = {
- // Produces format strings like "ddd M/D" -> "Fri 9/15"
- dayOfMonthFormat: function (momOptions, fcOptions) {
- var format = momOptions.longDateFormat('l'); // for the format like "M/D/YYYY"
- // strip the year off the edge, as well as other misc non-whitespace chars
- format = format.replace(/^Y+[^\w\s]*|[^\w\s]*Y+$/g, '');
- if (fcOptions.isRTL) {
- format += ' ddd'; // for RTL, add day-of-week to end
- }
- else {
- format = 'ddd ' + format; // for LTR, add day-of-week to beginning
- }
- return format;
- },
- // Produces format strings like "h:mma" -> "6:00pm"
- mediumTimeFormat: function (momOptions) {
- return momOptions.longDateFormat('LT')
- .replace(/\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand
- },
- // Produces format strings like "h(:mm)a" -> "6pm" / "6:30pm"
- smallTimeFormat: function (momOptions) {
- return momOptions.longDateFormat('LT')
- .replace(':mm', '(:mm)')
- .replace(/(\Wmm)$/, '($1)') // like above, but for foreign locales
- .replace(/\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand
- },
- // Produces format strings like "h(:mm)t" -> "6p" / "6:30p"
- extraSmallTimeFormat: function (momOptions) {
- return momOptions.longDateFormat('LT')
- .replace(':mm', '(:mm)')
- .replace(/(\Wmm)$/, '($1)') // like above, but for foreign locales
- .replace(/\s*a$/i, 't'); // convert to AM/PM/am/pm to lowercase one-letter. remove any spaces beforehand
- },
- // Produces format strings like "ha" / "H" -> "6pm" / "18"
- hourFormat: function (momOptions) {
- return momOptions.longDateFormat('LT')
- .replace(':mm', '')
- .replace(/(\Wmm)$/, '') // like above, but for foreign locales
- .replace(/\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand
- },
- // Produces format strings like "h:mm" -> "6:30" (with no AM/PM)
- noMeridiemTimeFormat: function (momOptions) {
- return momOptions.longDateFormat('LT')
- .replace(/\s*a$/i, ''); // remove trailing AM/PM
- }
-};
-// options that should be computed off live calendar options (considers override options)
-// TODO: best place for this? related to locale?
-// TODO: flipping text based on isRTL is a bad idea because the CSS `direction` might want to handle it
-var instanceComputableOptions = {
- // Produces format strings for results like "Mo 16"
- smallDayDateFormat: function (options) {
- return options.isRTL ?
- 'D dd' :
- 'dd D';
- },
- // Produces format strings for results like "Wk 5"
- weekFormat: function (options) {
- return options.isRTL ?
- 'w[ ' + options.weekNumberTitle + ']' :
- '[' + options.weekNumberTitle + ' ]w';
- },
- // Produces format strings for results like "Wk5"
- smallWeekFormat: function (options) {
- return options.isRTL ?
- 'w[' + options.weekNumberTitle + ']' :
- '[' + options.weekNumberTitle + ']w';
- }
-};
-// TODO: make these computable properties in optionsManager
-function populateInstanceComputableOptions(options) {
- $.each(instanceComputableOptions, function (name, func) {
- if (options[name] == null) {
- options[name] = func(options);
- }
- });
-}
-exports.populateInstanceComputableOptions = populateInstanceComputableOptions;
-// Initialize jQuery UI datepicker translations while using some of the translations
-// Will set this as the default locales for datepicker.
-function datepickerLocale(localeCode, dpLocaleCode, dpOptions) {
- // get the FullCalendar internal option hash for this locale. create if necessary
- var fcOptions = exports.localeOptionHash[localeCode] || (exports.localeOptionHash[localeCode] = {});
- // transfer some simple options from datepicker to fc
- fcOptions.isRTL = dpOptions.isRTL;
- fcOptions.weekNumberTitle = dpOptions.weekHeader;
- // compute some more complex options from datepicker
- $.each(dpComputableOptions, function (name, func) {
- fcOptions[name] = func(dpOptions);
- });
- var jqDatePicker = $.datepicker;
- // is jQuery UI Datepicker is on the page?
- if (jqDatePicker) {
- // Register the locale data.
- // FullCalendar and MomentJS use locale codes like "pt-br" but Datepicker
- // does it like "pt-BR" or if it doesn't have the locale, maybe just "pt".
- // Make an alias so the locale can be referenced either way.
- jqDatePicker.regional[dpLocaleCode] =
- jqDatePicker.regional[localeCode] = // alias
- dpOptions;
- // Alias 'en' to the default locale data. Do this every time.
- jqDatePicker.regional.en = jqDatePicker.regional[''];
- // Set as Datepicker's global defaults.
- jqDatePicker.setDefaults(dpOptions);
- }
-}
-exports.datepickerLocale = datepickerLocale;
-// Sets FullCalendar-specific translations. Will set the locales as the global default.
-function locale(localeCode, newFcOptions) {
- var fcOptions;
- var momOptions;
- // get the FullCalendar internal option hash for this locale. create if necessary
- fcOptions = exports.localeOptionHash[localeCode] || (exports.localeOptionHash[localeCode] = {});
- // provided new options for this locales? merge them in
- if (newFcOptions) {
- fcOptions = exports.localeOptionHash[localeCode] = options_1.mergeOptions([fcOptions, newFcOptions]);
- }
- // compute locale options that weren't defined.
- // always do this. newFcOptions can be undefined when initializing from i18n file,
- // so no way to tell if this is an initialization or a default-setting.
- momOptions = getMomentLocaleData(localeCode); // will fall back to en
- $.each(momComputableOptions, function (name, func) {
- if (fcOptions[name] == null) {
- fcOptions[name] = (func)(momOptions, fcOptions);
- }
- });
- // set it as the default locale for FullCalendar
- options_1.globalDefaults.locale = localeCode;
-}
-exports.locale = locale;
-// Returns moment's internal locale data. If doesn't exist, returns English.
-function getMomentLocaleData(localeCode) {
- return moment.localeData(localeCode) || moment.localeData('en');
-}
-exports.getMomentLocaleData = getMomentLocaleData;
-// Initialize English by forcing computation of moment-derived options.
-// Also, sets it as the default.
-locale('en', options_1.englishDefaults);
-
-
-/***/ }),
-/* 32 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var util_1 = __webpack_require__(4);
-exports.globalDefaults = {
- titleRangeSeparator: ' \u2013 ',
- monthYearFormat: 'MMMM YYYY',
- defaultTimedEventDuration: '02:00:00',
- defaultAllDayEventDuration: { days: 1 },
- forceEventDuration: false,
- nextDayThreshold: '09:00:00',
- // display
- columnHeader: true,
- defaultView: 'month',
- aspectRatio: 1.35,
- header: {
- left: 'title',
- center: '',
- right: 'today prev,next'
- },
- weekends: true,
- weekNumbers: false,
- weekNumberTitle: 'W',
- 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: false,
- // allDayDefault: undefined,
- // locale
- locale: null,
- isRTL: false,
- buttonText: {
- prev: 'prev',
- next: 'next',
- prevYear: 'prev year',
- nextYear: 'next year',
- year: 'year',
- today: 'today',
- month: 'month',
- week: 'week',
- day: 'day'
- },
- // buttonIcons: null,
- allDayText: 'all-day',
- // allows setting a min-height to the event segment to prevent short events overlapping each other
- agendaEventMinHeight: 0,
- // jquery-ui theming
- theme: false,
- // themeButtonIcons: null,
- // eventResizableFromStart: false,
- dragOpacity: .75,
- dragRevertDuration: 500,
- dragScroll: true,
- // selectable: false,
- unselectAuto: true,
- // selectMinDistance: 0,
- dropAccept: '*',
- eventOrder: 'title',
- // eventRenderWait: null,
- eventLimit: false,
- eventLimitText: 'more',
- eventLimitClick: 'popover',
- dayPopoverFormat: 'LL',
- handleWindowResize: true,
- windowResizeDelay: 100,
- longPressDelay: 1000
-};
-exports.englishDefaults = {
- dayPopoverFormat: 'dddd, MMMM D'
-};
-exports.rtlDefaults = {
- header: {
- left: 'next,prev today',
- center: '',
- right: 'title'
- },
- buttonIcons: {
- prev: 'right-single-arrow',
- next: 'left-single-arrow',
- prevYear: 'right-double-arrow',
- nextYear: 'left-double-arrow'
- },
- themeButtonIcons: {
- prev: 'circle-triangle-e',
- next: 'circle-triangle-w',
- nextYear: 'seek-prev',
- prevYear: 'seek-next'
- }
-};
-var complexOptions = [
- 'header',
- 'footer',
- 'buttonText',
- 'buttonIcons',
- 'themeButtonIcons'
-];
-// Merges an array of option objects into a single object
-function mergeOptions(optionObjs) {
- return util_1.mergeProps(optionObjs, complexOptions);
-}
-exports.mergeOptions = mergeOptions;
-
-
-/***/ }),
-/* 33 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var util_1 = __webpack_require__(4);
-// Class that all other classes will inherit from
-var Class = /** @class */ (function () {
- function Class() {
- }
- // Called on a class to create a subclass.
- // LIMITATION: cannot provide a constructor!
- Class.extend = function (members) {
- var SubClass = /** @class */ (function (_super) {
- tslib_1.__extends(SubClass, _super);
- function SubClass() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- return SubClass;
- }(this));
- util_1.copyOwnProps(members, SubClass.prototype);
- return SubClass;
- };
- // Adds new member variables/methods to the class's prototype.
- // Can be called with another class, or a plain object hash containing new members.
- Class.mixin = function (members) {
- util_1.copyOwnProps(members, this.prototype);
- };
- return Class;
-}());
-exports.default = Class;
-
-
-/***/ }),
-/* 34 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var $ = __webpack_require__(3);
-var ParsableModelMixin_1 = __webpack_require__(208);
-var EventDef = /** @class */ (function () {
- function EventDef(source) {
- this.source = source;
- this.className = [];
- this.miscProps = {};
- }
- EventDef.parse = function (rawInput, source) {
- var def = new this(source);
- if (def.applyProps(rawInput)) {
- return def;
- }
- return false;
- };
- EventDef.normalizeId = function (id) {
- return String(id);
- };
- EventDef.generateId = function () {
- return '_fc' + (EventDef.uuid++);
- };
- EventDef.prototype.clone = function () {
- var copy = new this.constructor(this.source);
- copy.id = this.id;
- copy.rawId = this.rawId;
- copy.uid = this.uid; // not really unique anymore :(
- EventDef.copyVerbatimStandardProps(this, copy);
- copy.className = this.className.slice(); // copy
- copy.miscProps = $.extend({}, this.miscProps);
- return copy;
- };
- EventDef.prototype.hasInverseRendering = function () {
- return this.getRendering() === 'inverse-background';
- };
- EventDef.prototype.hasBgRendering = function () {
- var rendering = this.getRendering();
- return rendering === 'inverse-background' || rendering === 'background';
- };
- EventDef.prototype.getRendering = function () {
- if (this.rendering != null) {
- return this.rendering;
- }
- return this.source.rendering;
- };
- EventDef.prototype.getConstraint = function () {
- if (this.constraint != null) {
- return this.constraint;
- }
- if (this.source.constraint != null) {
- return this.source.constraint;
- }
- return this.source.calendar.opt('eventConstraint'); // what about View option?
- };
- EventDef.prototype.getOverlap = function () {
- if (this.overlap != null) {
- return this.overlap;
- }
- if (this.source.overlap != null) {
- return this.source.overlap;
- }
- return this.source.calendar.opt('eventOverlap'); // what about View option?
- };
- EventDef.prototype.isStartExplicitlyEditable = function () {
- if (this.startEditable != null) {
- return this.startEditable;
- }
- return this.source.startEditable;
- };
- EventDef.prototype.isDurationExplicitlyEditable = function () {
- if (this.durationEditable != null) {
- return this.durationEditable;
- }
- return this.source.durationEditable;
- };
- EventDef.prototype.isExplicitlyEditable = function () {
- if (this.editable != null) {
- return this.editable;
- }
- return this.source.editable;
- };
- EventDef.prototype.toLegacy = function () {
- var obj = $.extend({}, this.miscProps);
- obj._id = this.uid;
- obj.source = this.source;
- obj.className = this.className.slice(); // copy
- obj.allDay = this.isAllDay();
- if (this.rawId != null) {
- obj.id = this.rawId;
- }
- EventDef.copyVerbatimStandardProps(this, obj);
- return obj;
- };
- EventDef.prototype.applyManualStandardProps = function (rawProps) {
- if (rawProps.id != null) {
- this.id = EventDef.normalizeId((this.rawId = rawProps.id));
- }
- else {
- this.id = EventDef.generateId();
- }
- if (rawProps._id != null) {
- this.uid = String(rawProps._id);
- }
- else {
- this.uid = EventDef.generateId();
- }
- // TODO: converge with EventSource
- if ($.isArray(rawProps.className)) {
- this.className = rawProps.className;
- }
- if (typeof rawProps.className === 'string') {
- this.className = rawProps.className.split(/\s+/);
- }
- return true;
- };
- EventDef.prototype.applyMiscProps = function (rawProps) {
- $.extend(this.miscProps, rawProps);
- };
- EventDef.uuid = 0;
- EventDef.defineStandardProps = ParsableModelMixin_1.default.defineStandardProps;
- EventDef.copyVerbatimStandardProps = ParsableModelMixin_1.default.copyVerbatimStandardProps;
- return EventDef;
-}());
-exports.default = EventDef;
-ParsableModelMixin_1.default.mixInto(EventDef);
-EventDef.defineStandardProps({
- // not automatically assigned (`false`)
- _id: false,
- id: false,
- className: false,
- source: false,
- // automatically assigned (`true`)
- title: true,
- url: true,
- rendering: true,
- constraint: true,
- overlap: true,
- editable: true,
- startEditable: true,
- durationEditable: true,
- color: true,
- backgroundColor: true,
- borderColor: true,
- textColor: true
-});
-
-
-/***/ }),
-/* 35 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var EventRange_1 = __webpack_require__(211);
-var EventFootprint_1 = __webpack_require__(36);
-var ComponentFootprint_1 = __webpack_require__(12);
-function eventDefsToEventInstances(eventDefs, unzonedRange) {
- var eventInstances = [];
- var i;
- for (i = 0; i < eventDefs.length; i++) {
- eventInstances.push.apply(eventInstances, // append
- eventDefs[i].buildInstances(unzonedRange));
- }
- return eventInstances;
-}
-exports.eventDefsToEventInstances = eventDefsToEventInstances;
-function eventInstanceToEventRange(eventInstance) {
- return new EventRange_1.default(eventInstance.dateProfile.unzonedRange, eventInstance.def, eventInstance);
-}
-exports.eventInstanceToEventRange = eventInstanceToEventRange;
-function eventRangeToEventFootprint(eventRange) {
- return new EventFootprint_1.default(new ComponentFootprint_1.default(eventRange.unzonedRange, eventRange.eventDef.isAllDay()), eventRange.eventDef, eventRange.eventInstance // might not exist
- );
-}
-exports.eventRangeToEventFootprint = eventRangeToEventFootprint;
-function eventInstanceToUnzonedRange(eventInstance) {
- return eventInstance.dateProfile.unzonedRange;
-}
-exports.eventInstanceToUnzonedRange = eventInstanceToUnzonedRange;
-function eventFootprintToComponentFootprint(eventFootprint) {
- return eventFootprint.componentFootprint;
-}
-exports.eventFootprintToComponentFootprint = eventFootprintToComponentFootprint;
-
-
-/***/ }),
-/* 36 */
-/***/ (function(module, exports) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var EventFootprint = /** @class */ (function () {
- function EventFootprint(componentFootprint, eventDef, eventInstance) {
- this.componentFootprint = componentFootprint;
- this.eventDef = eventDef;
- if (eventInstance) {
- this.eventInstance = eventInstance;
- }
- }
- EventFootprint.prototype.getEventLegacy = function () {
- return (this.eventInstance || this.eventDef).toLegacy();
- };
- return EventFootprint;
-}());
-exports.default = EventFootprint;
-
-
-/***/ }),
-/* 37 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var util_1 = __webpack_require__(4);
-var EventDateProfile_1 = __webpack_require__(17);
-var EventDef_1 = __webpack_require__(34);
-var EventDefDateMutation_1 = __webpack_require__(50);
-var SingleEventDef_1 = __webpack_require__(13);
-var EventDefMutation = /** @class */ (function () {
- function EventDefMutation() {
- }
- EventDefMutation.createFromRawProps = function (eventInstance, rawProps, largeUnit) {
- var eventDef = eventInstance.def;
- var dateProps = {};
- var standardProps = {};
- var miscProps = {};
- var verbatimStandardProps = {};
- var eventDefId = null;
- var className = null;
- var propName;
- var dateProfile;
- var dateMutation;
- var defMutation;
- for (propName in rawProps) {
- if (EventDateProfile_1.default.isStandardProp(propName)) {
- dateProps[propName] = rawProps[propName];
- }
- else if (eventDef.isStandardProp(propName)) {
- standardProps[propName] = rawProps[propName];
- }
- else if (eventDef.miscProps[propName] !== rawProps[propName]) {
- miscProps[propName] = rawProps[propName];
- }
- }
- dateProfile = EventDateProfile_1.default.parse(dateProps, eventDef.source);
- if (dateProfile) {
- dateMutation = EventDefDateMutation_1.default.createFromDiff(eventInstance.dateProfile, dateProfile, largeUnit);
- }
- if (standardProps.id !== eventDef.id) {
- eventDefId = standardProps.id; // only apply if there's a change
- }
- if (!util_1.isArraysEqual(standardProps.className, eventDef.className)) {
- className = standardProps.className; // only apply if there's a change
- }
- EventDef_1.default.copyVerbatimStandardProps(standardProps, // src
- verbatimStandardProps // dest
- );
- defMutation = new EventDefMutation();
- defMutation.eventDefId = eventDefId;
- defMutation.className = className;
- defMutation.verbatimStandardProps = verbatimStandardProps;
- defMutation.miscProps = miscProps;
- if (dateMutation) {
- defMutation.dateMutation = dateMutation;
- }
- return defMutation;
- };
- /*
- eventDef assumed to be a SingleEventDef.
- returns an undo function.
- */
- EventDefMutation.prototype.mutateSingle = function (eventDef) {
- var origDateProfile;
- if (this.dateMutation) {
- origDateProfile = eventDef.dateProfile;
- eventDef.dateProfile = this.dateMutation.buildNewDateProfile(origDateProfile, eventDef.source.calendar);
- }
- // can't undo
- // TODO: more DRY with EventDef::applyManualStandardProps
- if (this.eventDefId != null) {
- eventDef.id = EventDef_1.default.normalizeId((eventDef.rawId = this.eventDefId));
- }
- // can't undo
- // TODO: more DRY with EventDef::applyManualStandardProps
- if (this.className) {
- eventDef.className = this.className;
- }
- // can't undo
- if (this.verbatimStandardProps) {
- SingleEventDef_1.default.copyVerbatimStandardProps(this.verbatimStandardProps, // src
- eventDef // dest
- );
- }
- // can't undo
- if (this.miscProps) {
- eventDef.applyMiscProps(this.miscProps);
- }
- if (origDateProfile) {
- return function () {
- eventDef.dateProfile = origDateProfile;
- };
- }
- else {
- return function () { };
- }
- };
- EventDefMutation.prototype.setDateMutation = function (dateMutation) {
- if (dateMutation && !dateMutation.isEmpty()) {
- this.dateMutation = dateMutation;
- }
- else {
- this.dateMutation = null;
- }
- };
- EventDefMutation.prototype.isEmpty = function () {
- return !this.dateMutation;
- };
- return EventDefMutation;
-}());
-exports.default = EventDefMutation;
-
-
-/***/ }),
-/* 38 */
-/***/ (function(module, exports) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.default = {
- sourceClasses: [],
- registerClass: function (EventSourceClass) {
- this.sourceClasses.unshift(EventSourceClass); // give highest priority
- },
- parse: function (rawInput, calendar) {
- var sourceClasses = this.sourceClasses;
- var i;
- var eventSource;
- for (i = 0; i < sourceClasses.length; i++) {
- eventSource = sourceClasses[i].parse(rawInput, calendar);
- if (eventSource) {
- return eventSource;
- }
- }
- }
-};
-
-
-/***/ }),
-/* 39 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var $ = __webpack_require__(3);
-var util_1 = __webpack_require__(4);
-var Class_1 = __webpack_require__(33);
-/*
-Embodies a div that has potential scrollbars
-*/
-var Scroller = /** @class */ (function (_super) {
- tslib_1.__extends(Scroller, _super);
- function Scroller(options) {
- var _this = _super.call(this) || this;
- options = options || {};
- _this.overflowX = options.overflowX || options.overflow || 'auto';
- _this.overflowY = options.overflowY || options.overflow || 'auto';
- return _this;
- }
- Scroller.prototype.render = function () {
- this.el = this.renderEl();
- this.applyOverflow();
- };
- Scroller.prototype.renderEl = function () {
- return (this.scrollEl = $('<div class="fc-scroller"></div>'));
- };
- // sets to natural height, unlocks overflow
- Scroller.prototype.clear = function () {
- this.setHeight('auto');
- this.applyOverflow();
- };
- Scroller.prototype.destroy = function () {
- this.el.remove();
- };
- // Overflow
- // -----------------------------------------------------------------------------------------------------------------
- Scroller.prototype.applyOverflow = function () {
- this.scrollEl.css({
- 'overflow-x': this.overflowX,
- 'overflow-y': 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.
- Scroller.prototype.lockOverflow = function (scrollbarWidths) {
- var overflowX = this.overflowX;
- var overflowY = this.overflowY;
- scrollbarWidths = scrollbarWidths || this.getScrollbarWidths();
- if (overflowX === 'auto') {
- overflowX = (scrollbarWidths.top || scrollbarWidths.bottom || // horizontal scrollbars?
- // OR scrolling pane with massless scrollbars?
- this.scrollEl[0].scrollWidth - 1 > this.scrollEl[0].clientWidth) ? 'scroll' : 'hidden';
- }
- if (overflowY === 'auto') {
- overflowY = (scrollbarWidths.left || scrollbarWidths.right || // vertical scrollbars?
- // OR scrolling pane with massless scrollbars?
- this.scrollEl[0].scrollHeight - 1 > this.scrollEl[0].clientHeight) ? 'scroll' : 'hidden';
- }
- this.scrollEl.css({ 'overflow-x': overflowX, 'overflow-y': overflowY });
- };
- // Getters / Setters
- // -----------------------------------------------------------------------------------------------------------------
- Scroller.prototype.setHeight = function (height) {
- this.scrollEl.height(height);
- };
- Scroller.prototype.getScrollTop = function () {
- return this.scrollEl.scrollTop();
- };
- Scroller.prototype.setScrollTop = function (top) {
- this.scrollEl.scrollTop(top);
- };
- Scroller.prototype.getClientWidth = function () {
- return this.scrollEl[0].clientWidth;
- };
- Scroller.prototype.getClientHeight = function () {
- return this.scrollEl[0].clientHeight;
- };
- Scroller.prototype.getScrollbarWidths = function () {
- return util_1.getScrollbarWidths(this.scrollEl);
- };
- return Scroller;
-}(Class_1.default));
-exports.default = Scroller;
-
-
-/***/ }),
-/* 40 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var $ = __webpack_require__(3);
-var util_1 = __webpack_require__(4);
-var DateComponent_1 = __webpack_require__(219);
-var GlobalEmitter_1 = __webpack_require__(21);
-var InteractiveDateComponent = /** @class */ (function (_super) {
- tslib_1.__extends(InteractiveDateComponent, _super);
- function InteractiveDateComponent(_view, _options) {
- var _this = _super.call(this, _view, _options) || this;
- // self-config, overridable by subclasses
- _this.segSelector = '.fc-event-container > *'; // what constitutes an event element?
- if (_this.dateSelectingClass) {
- _this.dateClicking = new _this.dateClickingClass(_this);
- }
- if (_this.dateSelectingClass) {
- _this.dateSelecting = new _this.dateSelectingClass(_this);
- }
- if (_this.eventPointingClass) {
- _this.eventPointing = new _this.eventPointingClass(_this);
- }
- if (_this.eventDraggingClass && _this.eventPointing) {
- _this.eventDragging = new _this.eventDraggingClass(_this, _this.eventPointing);
- }
- if (_this.eventResizingClass && _this.eventPointing) {
- _this.eventResizing = new _this.eventResizingClass(_this, _this.eventPointing);
- }
- if (_this.externalDroppingClass) {
- _this.externalDropping = new _this.externalDroppingClass(_this);
- }
- return _this;
- }
- // Sets the container element that the view should render inside of, does global DOM-related initializations,
- // and renders all the non-date-related content inside.
- InteractiveDateComponent.prototype.setElement = function (el) {
- _super.prototype.setElement.call(this, el);
- if (this.dateClicking) {
- this.dateClicking.bindToEl(el);
- }
- if (this.dateSelecting) {
- this.dateSelecting.bindToEl(el);
- }
- this.bindAllSegHandlersToEl(el);
- };
- InteractiveDateComponent.prototype.removeElement = function () {
- this.endInteractions();
- _super.prototype.removeElement.call(this);
- };
- InteractiveDateComponent.prototype.executeEventUnrender = function () {
- this.endInteractions();
- _super.prototype.executeEventUnrender.call(this);
- };
- InteractiveDateComponent.prototype.bindGlobalHandlers = function () {
- _super.prototype.bindGlobalHandlers.call(this);
- if (this.externalDropping) {
- this.externalDropping.bindToDocument();
- }
- };
- InteractiveDateComponent.prototype.unbindGlobalHandlers = function () {
- _super.prototype.unbindGlobalHandlers.call(this);
- if (this.externalDropping) {
- this.externalDropping.unbindFromDocument();
- }
- };
- InteractiveDateComponent.prototype.bindDateHandlerToEl = function (el, name, handler) {
- var _this = this;
- // attach a handler to the grid's root element.
- // jQuery will take care of unregistering them when removeElement gets called.
- this.el.on(name, function (ev) {
- if (!$(ev.target).is(_this.segSelector + ':not(.fc-helper),' + // directly on an event element
- _this.segSelector + ':not(.fc-helper) *,' + // within an event element
- '.fc-more,' + // a "more.." link
- 'a[data-goto]' // a clickable nav link
- )) {
- return handler.call(_this, ev);
- }
- });
- };
- InteractiveDateComponent.prototype.bindAllSegHandlersToEl = function (el) {
- [
- this.eventPointing,
- this.eventDragging,
- this.eventResizing
- ].forEach(function (eventInteraction) {
- if (eventInteraction) {
- eventInteraction.bindToEl(el);
- }
- });
- };
- InteractiveDateComponent.prototype.bindSegHandlerToEl = function (el, name, handler) {
- var _this = this;
- el.on(name, this.segSelector, function (ev) {
- var segEl = $(ev.currentTarget);
- if (!segEl.is('.fc-helper')) {
- var seg = segEl.data('fc-seg'); // grab segment data. put there by View::renderEventsPayload
- if (seg && !_this.shouldIgnoreEventPointing()) {
- return handler.call(_this, seg, ev); // context will be the Grid
- }
- }
- });
- };
- InteractiveDateComponent.prototype.shouldIgnoreMouse = function () {
- // HACK
- // This will still work even though bindDateHandlerToEl doesn't use GlobalEmitter.
- return GlobalEmitter_1.default.get().shouldIgnoreMouse();
- };
- InteractiveDateComponent.prototype.shouldIgnoreTouch = function () {
- var view = this._getView();
- // On iOS (and Android?) when a new selection is initiated overtop another selection,
- // the touchend never fires because the elements gets removed mid-touch-interaction (my theory).
- // HACK: simply don't allow this to happen.
- // ALSO: prevent selection when an *event* is already raised.
- return view.isSelected || view.selectedEvent;
- };
- InteractiveDateComponent.prototype.shouldIgnoreEventPointing = function () {
- // only call the handlers if there is not a drag/resize in progress
- return (this.eventDragging && this.eventDragging.isDragging) ||
- (this.eventResizing && this.eventResizing.isResizing);
- };
- InteractiveDateComponent.prototype.canStartSelection = function (seg, ev) {
- return util_1.getEvIsTouch(ev) &&
- !this.canStartResize(seg, ev) &&
- (this.isEventDefDraggable(seg.footprint.eventDef) ||
- this.isEventDefResizable(seg.footprint.eventDef));
- };
- InteractiveDateComponent.prototype.canStartDrag = function (seg, ev) {
- return !this.canStartResize(seg, ev) &&
- this.isEventDefDraggable(seg.footprint.eventDef);
- };
- InteractiveDateComponent.prototype.canStartResize = function (seg, ev) {
- var view = this._getView();
- var eventDef = seg.footprint.eventDef;
- return (!util_1.getEvIsTouch(ev) || view.isEventDefSelected(eventDef)) &&
- this.isEventDefResizable(eventDef) &&
- $(ev.target).is('.fc-resizer');
- };
- // Kills all in-progress dragging.
- // Useful for when public API methods that result in re-rendering are invoked during a drag.
- // Also useful for when touch devices misbehave and don't fire their touchend.
- InteractiveDateComponent.prototype.endInteractions = function () {
- [
- this.dateClicking,
- this.dateSelecting,
- this.eventPointing,
- this.eventDragging,
- this.eventResizing
- ].forEach(function (interaction) {
- if (interaction) {
- interaction.end();
- }
- });
- };
- // Event Drag-n-Drop
- // ---------------------------------------------------------------------------------------------------------------
- // Computes if the given event is allowed to be dragged by the user
- InteractiveDateComponent.prototype.isEventDefDraggable = function (eventDef) {
- return this.isEventDefStartEditable(eventDef);
- };
- InteractiveDateComponent.prototype.isEventDefStartEditable = function (eventDef) {
- var isEditable = eventDef.isStartExplicitlyEditable();
- if (isEditable == null) {
- isEditable = this.opt('eventStartEditable');
- if (isEditable == null) {
- isEditable = this.isEventDefGenerallyEditable(eventDef);
- }
- }
- return isEditable;
- };
- InteractiveDateComponent.prototype.isEventDefGenerallyEditable = function (eventDef) {
- var isEditable = eventDef.isExplicitlyEditable();
- if (isEditable == null) {
- isEditable = this.opt('editable');
- }
- return isEditable;
- };
- // Event Resizing
- // ---------------------------------------------------------------------------------------------------------------
- // Computes if the given event is allowed to be resized from its starting edge
- InteractiveDateComponent.prototype.isEventDefResizableFromStart = function (eventDef) {
- return this.opt('eventResizableFromStart') && this.isEventDefResizable(eventDef);
- };
- // Computes if the given event is allowed to be resized from its ending edge
- InteractiveDateComponent.prototype.isEventDefResizableFromEnd = function (eventDef) {
- return this.isEventDefResizable(eventDef);
- };
- // Computes if the given event is allowed to be resized by the user at all
- InteractiveDateComponent.prototype.isEventDefResizable = function (eventDef) {
- var isResizable = eventDef.isDurationExplicitlyEditable();
- if (isResizable == null) {
- isResizable = this.opt('eventDurationEditable');
- if (isResizable == null) {
- isResizable = this.isEventDefGenerallyEditable(eventDef);
- }
- }
- return isResizable;
- };
- // Event Mutation / Constraints
- // ---------------------------------------------------------------------------------------------------------------
- // Diffs the two dates, returning a duration, based on granularity of the grid
- // TODO: port isTimeScale into this system?
- InteractiveDateComponent.prototype.diffDates = function (a, b) {
- if (this.largeUnit) {
- return util_1.diffByUnit(a, b, this.largeUnit);
- }
- else {
- return util_1.diffDayTime(a, b);
- }
- };
- // is it allowed, in relation to the view's validRange?
- // NOTE: very similar to isExternalInstanceGroupAllowed
- InteractiveDateComponent.prototype.isEventInstanceGroupAllowed = function (eventInstanceGroup) {
- var view = this._getView();
- var dateProfile = this.dateProfile;
- var eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());
- var i;
- for (i = 0; i < eventFootprints.length; i++) {
- // TODO: just use getAllEventRanges directly
- if (!dateProfile.validUnzonedRange.containsRange(eventFootprints[i].componentFootprint.unzonedRange)) {
- return false;
- }
- }
- return view.calendar.constraints.isEventInstanceGroupAllowed(eventInstanceGroup);
- };
- // NOTE: very similar to isEventInstanceGroupAllowed
- // when it's a completely anonymous external drag, no event.
- InteractiveDateComponent.prototype.isExternalInstanceGroupAllowed = function (eventInstanceGroup) {
- var view = this._getView();
- var dateProfile = this.dateProfile;
- var eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());
- var i;
- for (i = 0; i < eventFootprints.length; i++) {
- if (!dateProfile.validUnzonedRange.containsRange(eventFootprints[i].componentFootprint.unzonedRange)) {
- return false;
- }
- }
- for (i = 0; i < eventFootprints.length; i++) {
- // treat it as a selection
- // TODO: pass in eventInstanceGroup instead
- // because we don't want calendar's constraint system to depend on a component's
- // determination of footprints.
- if (!view.calendar.constraints.isSelectionFootprintAllowed(eventFootprints[i].componentFootprint)) {
- return false;
- }
- }
- return true;
- };
- return InteractiveDateComponent;
-}(DateComponent_1.default));
-exports.default = InteractiveDateComponent;
-
-
-/***/ }),
-/* 41 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var $ = __webpack_require__(3);
-var moment = __webpack_require__(0);
-var util_1 = __webpack_require__(4);
-var RenderQueue_1 = __webpack_require__(218);
-var DateProfileGenerator_1 = __webpack_require__(221);
-var InteractiveDateComponent_1 = __webpack_require__(40);
-var GlobalEmitter_1 = __webpack_require__(21);
-var UnzonedRange_1 = __webpack_require__(5);
-/* An abstract class from which other views inherit from
-----------------------------------------------------------------------------------------------------------------------*/
-var View = /** @class */ (function (_super) {
- tslib_1.__extends(View, _super);
- function View(calendar, viewSpec) {
- var _this = _super.call(this, null, viewSpec.options) || this;
- _this.batchRenderDepth = 0;
- _this.isSelected = false; // boolean whether a range of time is user-selected or not
- _this.calendar = calendar;
- _this.viewSpec = viewSpec;
- // shortcuts
- _this.type = viewSpec.type;
- // .name is deprecated
- _this.name = _this.type;
- _this.initRenderQueue();
- _this.initHiddenDays();
- _this.dateProfileGenerator = new _this.dateProfileGeneratorClass(_this);
- _this.bindBaseRenderHandlers();
- _this.eventOrderSpecs = util_1.parseFieldSpecs(_this.opt('eventOrder'));
- // legacy
- if (_this['initialize']) {
- _this['initialize']();
- }
- return _this;
- }
- View.prototype._getView = function () {
- return this;
- };
- // Retrieves an option with the given name
- View.prototype.opt = function (name) {
- return this.options[name];
- };
- /* Render Queue
- ------------------------------------------------------------------------------------------------------------------*/
- View.prototype.initRenderQueue = function () {
- this.renderQueue = new RenderQueue_1.default({
- event: this.opt('eventRenderWait')
- });
- this.renderQueue.on('start', this.onRenderQueueStart.bind(this));
- this.renderQueue.on('stop', this.onRenderQueueStop.bind(this));
- this.on('before:change', this.startBatchRender);
- this.on('change', this.stopBatchRender);
- };
- View.prototype.onRenderQueueStart = function () {
- this.calendar.freezeContentHeight();
- this.addScroll(this.queryScroll());
- };
- View.prototype.onRenderQueueStop = function () {
- if (this.calendar.updateViewSize()) {
- this.popScroll();
- }
- this.calendar.thawContentHeight();
- };
- View.prototype.startBatchRender = function () {
- if (!(this.batchRenderDepth++)) {
- this.renderQueue.pause();
- }
- };
- View.prototype.stopBatchRender = function () {
- if (!(--this.batchRenderDepth)) {
- this.renderQueue.resume();
- }
- };
- View.prototype.requestRender = function (func, namespace, actionType) {
- this.renderQueue.queue(func, namespace, actionType);
- };
- // given func will auto-bind to `this`
- View.prototype.whenSizeUpdated = function (func) {
- if (this.renderQueue.isRunning) {
- this.renderQueue.one('stop', func.bind(this));
- }
- else {
- func.call(this);
- }
- };
- /* Title and Date Formatting
- ------------------------------------------------------------------------------------------------------------------*/
- // Computes what the title at the top of the calendar should be for this view
- View.prototype.computeTitle = function (dateProfile) {
- var unzonedRange;
- // 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)) {
- unzonedRange = dateProfile.currentUnzonedRange;
- }
- else {
- unzonedRange = dateProfile.activeUnzonedRange;
- }
- return this.formatRange({
- start: this.calendar.msToMoment(unzonedRange.startMs, dateProfile.isRangeAllDay),
- end: this.calendar.msToMoment(unzonedRange.endMs, dateProfile.isRangeAllDay)
- }, dateProfile.isRangeAllDay, this.opt('titleFormat') || this.computeTitleFormat(dateProfile), this.opt('titleRangeSeparator'));
- };
- // 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`.
- View.prototype.computeTitleFormat = function (dateProfile) {
- var currentRangeUnit = dateProfile.currentRangeUnit;
- if (currentRangeUnit === 'year') {
- return 'YYYY';
- }
- else if (currentRangeUnit === 'month') {
- return this.opt('monthYearFormat'); // like "September 2014"
- }
- else if (dateProfile.currentUnzonedRange.as('days') > 1) {
- return 'll'; // multi-day range. shorter, like "Sep 9 - 10 2014"
- }
- else {
- return 'LL'; // one day. longer, like "September 9 2014"
- }
- };
- // Date Setting/Unsetting
- // -----------------------------------------------------------------------------------------------------------------
- View.prototype.setDate = function (date) {
- var currentDateProfile = this.get('dateProfile');
- var newDateProfile = this.dateProfileGenerator.build(date, undefined, true); // forceToValid=true
- if (!currentDateProfile ||
- !currentDateProfile.activeUnzonedRange.equals(newDateProfile.activeUnzonedRange)) {
- this.set('dateProfile', newDateProfile);
- }
- };
- View.prototype.unsetDate = function () {
- this.unset('dateProfile');
- };
- // Event Data
- // -----------------------------------------------------------------------------------------------------------------
- View.prototype.fetchInitialEvents = function (dateProfile) {
- var calendar = this.calendar;
- var forceAllDay = dateProfile.isRangeAllDay && !this.usesMinMaxTime;
- return calendar.requestEvents(calendar.msToMoment(dateProfile.activeUnzonedRange.startMs, forceAllDay), calendar.msToMoment(dateProfile.activeUnzonedRange.endMs, forceAllDay));
- };
- View.prototype.bindEventChanges = function () {
- this.listenTo(this.calendar, 'eventsReset', this.resetEvents); // TODO: make this a real event
- };
- View.prototype.unbindEventChanges = function () {
- this.stopListeningTo(this.calendar, 'eventsReset');
- };
- View.prototype.setEvents = function (eventsPayload) {
- this.set('currentEvents', eventsPayload);
- this.set('hasEvents', true);
- };
- View.prototype.unsetEvents = function () {
- this.unset('currentEvents');
- this.unset('hasEvents');
- };
- View.prototype.resetEvents = function (eventsPayload) {
- this.startBatchRender();
- this.unsetEvents();
- this.setEvents(eventsPayload);
- this.stopBatchRender();
- };
- // Date High-level Rendering
- // -----------------------------------------------------------------------------------------------------------------
- View.prototype.requestDateRender = function (dateProfile) {
- var _this = this;
- this.requestRender(function () {
- _this.executeDateRender(dateProfile);
- }, 'date', 'init');
- };
- View.prototype.requestDateUnrender = function () {
- var _this = this;
- this.requestRender(function () {
- _this.executeDateUnrender();
- }, 'date', 'destroy');
- };
- // if dateProfile not specified, uses current
- View.prototype.executeDateRender = function (dateProfile) {
- _super.prototype.executeDateRender.call(this, dateProfile);
- if (this['render']) {
- this['render'](); // TODO: deprecate
- }
- this.trigger('datesRendered');
- this.addScroll({ isDateInit: true });
- this.startNowIndicator(); // shouldn't render yet because updateSize will be called soon
- };
- View.prototype.executeDateUnrender = function () {
- this.unselect();
- this.stopNowIndicator();
- this.trigger('before:datesUnrendered');
- if (this['destroy']) {
- this['destroy'](); // TODO: deprecate
- }
- _super.prototype.executeDateUnrender.call(this);
- };
- // "Base" rendering
- // -----------------------------------------------------------------------------------------------------------------
- View.prototype.bindBaseRenderHandlers = function () {
- var _this = this;
- this.on('datesRendered', function () {
- _this.whenSizeUpdated(_this.triggerViewRender);
- });
- this.on('before:datesUnrendered', function () {
- _this.triggerViewDestroy();
- });
- };
- View.prototype.triggerViewRender = function () {
- this.publiclyTrigger('viewRender', {
- context: this,
- args: [this, this.el]
- });
- };
- View.prototype.triggerViewDestroy = function () {
- this.publiclyTrigger('viewDestroy', {
- context: this,
- args: [this, this.el]
- });
- };
- // Event High-level Rendering
- // -----------------------------------------------------------------------------------------------------------------
- View.prototype.requestEventsRender = function (eventsPayload) {
- var _this = this;
- this.requestRender(function () {
- _this.executeEventRender(eventsPayload);
- _this.whenSizeUpdated(_this.triggerAfterEventsRendered);
- }, 'event', 'init');
- };
- View.prototype.requestEventsUnrender = function () {
- var _this = this;
- this.requestRender(function () {
- _this.triggerBeforeEventsDestroyed();
- _this.executeEventUnrender();
- }, 'event', 'destroy');
- };
- // Business Hour High-level Rendering
- // -----------------------------------------------------------------------------------------------------------------
- View.prototype.requestBusinessHoursRender = function (businessHourGenerator) {
- var _this = this;
- this.requestRender(function () {
- _this.renderBusinessHours(businessHourGenerator);
- }, 'businessHours', 'init');
- };
- View.prototype.requestBusinessHoursUnrender = function () {
- var _this = this;
- this.requestRender(function () {
- _this.unrenderBusinessHours();
- }, 'businessHours', 'destroy');
- };
- // Misc view rendering utils
- // -----------------------------------------------------------------------------------------------------------------
- // Binds DOM handlers to elements that reside outside the view container, such as the document
- View.prototype.bindGlobalHandlers = function () {
- _super.prototype.bindGlobalHandlers.call(this);
- this.listenTo(GlobalEmitter_1.default.get(), {
- touchstart: this.processUnselect,
- mousedown: this.handleDocumentMousedown
- });
- };
- // Unbinds DOM handlers from elements that reside outside the view container
- View.prototype.unbindGlobalHandlers = function () {
- _super.prototype.unbindGlobalHandlers.call(this);
- this.stopListeningTo(GlobalEmitter_1.default.get());
- };
- /* 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
- View.prototype.startNowIndicator = function () {
- var _this = this;
- var unit;
- var update;
- var delay; // ms wait value
- if (this.opt('nowIndicator')) {
- unit = this.getNowIndicatorUnit();
- if (unit) {
- update = util_1.proxy(this, 'updateNowIndicator'); // bind to `this`
- this.initialNowDate = this.calendar.getNow();
- this.initialNowQueriedMs = new Date().valueOf();
- // wait until the beginning of the next interval
- delay = this.initialNowDate.clone().startOf(unit).add(1, unit).valueOf() - this.initialNowDate.valueOf();
- this.nowIndicatorTimeoutID = setTimeout(function () {
- _this.nowIndicatorTimeoutID = null;
- update();
- delay = +moment.duration(1, unit);
- delay = Math.max(100, delay); // prevent too frequent
- _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.isDatesRendered &&
- this.initialNowDate // activated before?
- ) {
- this.unrenderNowIndicator(); // won't unrender if unnecessary
- this.renderNowIndicator(this.initialNowDate.clone().add(new Date().valueOf() - this.initialNowQueriedMs) // add ms
- );
- 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.isNowIndicatorRendered) {
- if (this.nowIndicatorTimeoutID) {
- clearTimeout(this.nowIndicatorTimeoutID);
- this.nowIndicatorTimeoutID = null;
- }
- if (this.nowIndicatorIntervalID) {
- clearInterval(this.nowIndicatorIntervalID);
- this.nowIndicatorIntervalID = null;
- }
- this.unrenderNowIndicator();
- this.isNowIndicatorRendered = false;
- }
- };
- /* Dimensions
- ------------------------------------------------------------------------------------------------------------------*/
- View.prototype.updateSize = function (totalHeight, isAuto, isResize) {
- if (this['setHeight']) {
- this['setHeight'](totalHeight, isAuto);
- }
- else {
- _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);
- }
- this.updateNowIndicator();
- };
- /* Scroller
- ------------------------------------------------------------------------------------------------------------------*/
- View.prototype.addScroll = function (scroll) {
- var queuedScroll = this.queuedScroll || (this.queuedScroll = {});
- $.extend(queuedScroll, scroll);
- };
- View.prototype.popScroll = function () {
- this.applyQueuedScroll();
- this.queuedScroll = null;
- };
- View.prototype.applyQueuedScroll = function () {
- if (this.queuedScroll) {
- this.applyScroll(this.queuedScroll);
- }
- };
- View.prototype.queryScroll = function () {
- var scroll = {};
- if (this.isDatesRendered) {
- $.extend(scroll, this.queryDateScroll());
- }
- return scroll;
- };
- View.prototype.applyScroll = function (scroll) {
- if (scroll.isDateInit && this.isDatesRendered) {
- $.extend(scroll, this.computeInitialDateScroll());
- }
- if (this.isDatesRendered) {
- this.applyDateScroll(scroll);
- }
- };
- View.prototype.computeInitialDateScroll = function () {
- return {}; // subclasses must implement
- };
- View.prototype.queryDateScroll = function () {
- return {}; // subclasses must implement
- };
- View.prototype.applyDateScroll = function (scroll) {
- // subclasses must implement
- };
- /* Event Drag-n-Drop
- ------------------------------------------------------------------------------------------------------------------*/
- View.prototype.reportEventDrop = function (eventInstance, eventMutation, el, ev) {
- var eventManager = this.calendar.eventManager;
- var undoFunc = eventManager.mutateEventsWithId(eventInstance.def.id, eventMutation);
- var dateMutation = eventMutation.dateMutation;
- // update the EventInstance, for handlers
- if (dateMutation) {
- eventInstance.dateProfile = dateMutation.buildNewDateProfile(eventInstance.dateProfile, this.calendar);
- }
- this.triggerEventDrop(eventInstance,
- // a drop doesn't necessarily mean a date mutation (ex: resource change)
- (dateMutation && dateMutation.dateDelta) || moment.duration(), undoFunc, el, ev);
- };
- // Triggers event-drop handlers that have subscribed via the API
- View.prototype.triggerEventDrop = function (eventInstance, dateDelta, undoFunc, el, ev) {
- this.publiclyTrigger('eventDrop', {
- context: el[0],
- args: [
- eventInstance.toLegacy(),
- dateDelta,
- undoFunc,
- ev,
- {},
- this
- ]
- });
- };
- /* External Element Drag-n-Drop
- ------------------------------------------------------------------------------------------------------------------*/
- // Must be called when an external element, via jQuery UI, has been dropped onto the calendar.
- // `meta` is the parsed data that has been embedded into the dragging event.
- // `dropLocation` is an object that contains the new zoned start/end/allDay values for the event.
- View.prototype.reportExternalDrop = function (singleEventDef, isEvent, isSticky, el, ev, ui) {
- if (isEvent) {
- this.calendar.eventManager.addEventDef(singleEventDef, isSticky);
- }
- this.triggerExternalDrop(singleEventDef, isEvent, el, ev, ui);
- };
- // Triggers external-drop handlers that have subscribed via the API
- View.prototype.triggerExternalDrop = function (singleEventDef, isEvent, el, ev, ui) {
- // trigger 'drop' regardless of whether element represents an event
- this.publiclyTrigger('drop', {
- context: el[0],
- args: [
- singleEventDef.dateProfile.start.clone(),
- ev,
- ui,
- this
- ]
- });
- if (isEvent) {
- // signal an external event landed
- this.publiclyTrigger('eventReceive', {
- context: this,
- args: [
- singleEventDef.buildInstance().toLegacy(),
- this
- ]
- });
- }
- };
- /* Event Resizing
- ------------------------------------------------------------------------------------------------------------------*/
- // Must be called when an event in the view has been resized to a new length
- View.prototype.reportEventResize = function (eventInstance, eventMutation, el, ev) {
- var eventManager = this.calendar.eventManager;
- var undoFunc = eventManager.mutateEventsWithId(eventInstance.def.id, eventMutation);
- // update the EventInstance, for handlers
- eventInstance.dateProfile = eventMutation.dateMutation.buildNewDateProfile(eventInstance.dateProfile, this.calendar);
- this.triggerEventResize(eventInstance, eventMutation.dateMutation.endDelta, undoFunc, el, ev);
- };
- // Triggers event-resize handlers that have subscribed via the API
- View.prototype.triggerEventResize = function (eventInstance, durationDelta, undoFunc, el, ev) {
- this.publiclyTrigger('eventResize', {
- context: el[0],
- args: [
- eventInstance.toLegacy(),
- durationDelta,
- undoFunc,
- ev,
- {},
- this
- ]
- });
- };
- /* Selection (time range)
- ------------------------------------------------------------------------------------------------------------------*/
- // Selects a date span on the view. `start` and `end` are both Moments.
- // `ev` is the native mouse event that begin the interaction.
- View.prototype.select = function (footprint, ev) {
- this.unselect(ev);
- this.renderSelectionFootprint(footprint);
- this.reportSelection(footprint, ev);
- };
- View.prototype.renderSelectionFootprint = function (footprint) {
- if (this['renderSelection']) {
- this['renderSelection'](footprint.toLegacy(this.calendar));
- }
- else {
- _super.prototype.renderSelectionFootprint.call(this, footprint);
- }
- };
- // Called when a new selection is made. Updates internal state and triggers handlers.
- View.prototype.reportSelection = function (footprint, ev) {
- this.isSelected = true;
- this.triggerSelect(footprint, ev);
- };
- // Triggers handlers to 'select'
- View.prototype.triggerSelect = function (footprint, ev) {
- var dateProfile = this.calendar.footprintToDateProfile(footprint); // abuse of "Event"DateProfile?
- this.publiclyTrigger('select', {
- context: this,
- args: [
- dateProfile.start,
- dateProfile.end,
- ev,
- this
- ]
- });
- };
- // Undoes a selection. updates in the internal state and triggers handlers.
- // `ev` is the native mouse event that began the interaction.
- View.prototype.unselect = function (ev) {
- if (this.isSelected) {
- this.isSelected = false;
- if (this['destroySelection']) {
- this['destroySelection'](); // TODO: deprecate
- }
- this.unrenderSelection();
- this.publiclyTrigger('unselect', {
- context: this,
- args: [ev, this]
- });
- }
- };
- /* Event Selection
- ------------------------------------------------------------------------------------------------------------------*/
- View.prototype.selectEventInstance = function (eventInstance) {
- if (!this.selectedEventInstance ||
- this.selectedEventInstance !== eventInstance) {
- this.unselectEventInstance();
- this.getEventSegs().forEach(function (seg) {
- if (seg.footprint.eventInstance === eventInstance &&
- seg.el // necessary?
- ) {
- seg.el.addClass('fc-selected');
- }
- });
- this.selectedEventInstance = eventInstance;
- }
- };
- View.prototype.unselectEventInstance = function () {
- if (this.selectedEventInstance) {
- this.getEventSegs().forEach(function (seg) {
- if (seg.el) {
- seg.el.removeClass('fc-selected');
- }
- });
- this.selectedEventInstance = null;
- }
- };
- View.prototype.isEventDefSelected = function (eventDef) {
- // event references might change on refetchEvents(), while selectedEventInstance doesn't,
- // so compare IDs
- return this.selectedEventInstance && this.selectedEventInstance.def.id === eventDef.id;
- };
- /* Mouse / Touch Unselecting (time range & event unselection)
- ------------------------------------------------------------------------------------------------------------------*/
- // TODO: move consistently to down/start or up/end?
- // TODO: don't kill previous selection if touch scrolling
- View.prototype.handleDocumentMousedown = function (ev) {
- if (util_1.isPrimaryMouseButton(ev)) {
- this.processUnselect(ev);
- }
- };
- View.prototype.processUnselect = function (ev) {
- this.processRangeUnselect(ev);
- this.processEventUnselect(ev);
- };
- View.prototype.processRangeUnselect = function (ev) {
- var ignore;
- // is there a time-range selection?
- if (this.isSelected && this.opt('unselectAuto')) {
- // only unselect if the clicked element is not identical to or inside of an 'unselectCancel' element
- ignore = this.opt('unselectCancel');
- if (!ignore || !$(ev.target).closest(ignore).length) {
- this.unselect(ev);
- }
- }
- };
- View.prototype.processEventUnselect = function (ev) {
- if (this.selectedEventInstance) {
- if (!$(ev.target).closest('.fc-selected').length) {
- this.unselectEventInstance();
- }
- }
- };
- /* Triggers
- ------------------------------------------------------------------------------------------------------------------*/
- View.prototype.triggerBaseRendered = function () {
- this.publiclyTrigger('viewRender', {
- context: this,
- args: [this, this.el]
- });
- };
- View.prototype.triggerBaseUnrendered = function () {
- this.publiclyTrigger('viewDestroy', {
- context: this,
- args: [this, this.el]
- });
- };
- // Triggers handlers to 'dayClick'
- // Span has start/end of the clicked area. Only the start is useful.
- View.prototype.triggerDayClick = function (footprint, dayEl, ev) {
- var dateProfile = this.calendar.footprintToDateProfile(footprint); // abuse of "Event"DateProfile?
- this.publiclyTrigger('dayClick', {
- context: dayEl,
- args: [dateProfile.start, ev, this]
- });
- };
- /* Date Utils
- ------------------------------------------------------------------------------------------------------------------*/
- // For DateComponent::getDayClasses
- View.prototype.isDateInOtherMonth = function (date, dateProfile) {
- return false;
- };
- // 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.
- View.prototype.getUnzonedRangeOption = function (name) {
- var val = this.opt(name);
- if (typeof val === 'function') {
- val = val.apply(null, Array.prototype.slice.call(arguments, 1));
- }
- if (val) {
- return this.calendar.parseUnzonedRange(val);
- }
- };
- /* Hidden Days
- ------------------------------------------------------------------------------------------------------------------*/
- // Initializes internal variables related to calculating hidden days-of-week
- View.prototype.initHiddenDays = function () {
- var hiddenDays = this.opt('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.opt('weekends') === false) {
- hiddenDays.push(0, 6); // 0=sunday, 6=saturday
- }
- for (i = 0; i < 7; i++) {
- if (!(isHiddenDayHash[i] = $.inArray(i, hiddenDays) !== -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
- View.prototype.trimHiddenDays = function (inputUnzonedRange) {
- var start = inputUnzonedRange.getStart();
- var end = inputUnzonedRange.getEnd();
- if (start) {
- start = this.skipHiddenDays(start);
- }
- if (end) {
- end = this.skipHiddenDays(end, -1, true);
- }
- if (start === null || end === null || start < end) {
- return new UnzonedRange_1.default(start, end);
- }
- return null;
- };
- // Is the current day hidden?
- // `day` is a day-of-week index (0-6), or a Moment
- View.prototype.isHiddenDay = function (day) {
- if (moment.isMoment(day)) {
- day = day.day();
- }
- return this.isHiddenDayHash[day];
- };
- // Incrementing the current day until it is no longer a hidden day, returning a copy.
- // DOES NOT CONSIDER validUnzonedRange!
- // 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)
- View.prototype.skipHiddenDays = function (date, inc, isExclusive) {
- if (inc === void 0) { inc = 1; }
- if (isExclusive === void 0) { isExclusive = false; }
- var out = date.clone();
- while (this.isHiddenDayHash[(out.day() + (isExclusive ? inc : 0) + 7) % 7]) {
- out.add(inc, 'days');
- }
- return out;
- };
- return View;
-}(InteractiveDateComponent_1.default));
-exports.default = View;
-View.prototype.usesMinMaxTime = false;
-View.prototype.dateProfileGeneratorClass = DateProfileGenerator_1.default;
-View.watch('displayingDates', ['isInDom', 'dateProfile'], function (deps) {
- this.requestDateRender(deps.dateProfile);
-}, function () {
- this.requestDateUnrender();
-});
-View.watch('displayingBusinessHours', ['displayingDates', 'businessHourGenerator'], function (deps) {
- this.requestBusinessHoursRender(deps.businessHourGenerator);
-}, function () {
- this.requestBusinessHoursUnrender();
-});
-View.watch('initialEvents', ['dateProfile'], function (deps) {
- return this.fetchInitialEvents(deps.dateProfile);
-});
-View.watch('bindingEvents', ['initialEvents'], function (deps) {
- this.setEvents(deps.initialEvents);
- this.bindEventChanges();
-}, function () {
- this.unbindEventChanges();
- this.unsetEvents();
-});
-View.watch('displayingEvents', ['displayingDates', 'hasEvents'], function () {
- this.requestEventsRender(this.get('currentEvents'));
-}, function () {
- this.requestEventsUnrender();
-});
-View.watch('title', ['dateProfile'], function (deps) {
- return (this.title = this.computeTitle(deps.dateProfile)); // assign to View for legacy reasons
-});
-View.watch('legacyDateProps', ['dateProfile'], function (deps) {
- var calendar = this.calendar;
- var dateProfile = deps.dateProfile;
- // DEPRECATED, but we need to keep it updated...
- this.start = calendar.msToMoment(dateProfile.activeUnzonedRange.startMs, dateProfile.isRangeAllDay);
- this.end = calendar.msToMoment(dateProfile.activeUnzonedRange.endMs, dateProfile.isRangeAllDay);
- this.intervalStart = calendar.msToMoment(dateProfile.currentUnzonedRange.startMs, dateProfile.isRangeAllDay);
- this.intervalEnd = calendar.msToMoment(dateProfile.currentUnzonedRange.endMs, dateProfile.isRangeAllDay);
-});
-
-
-/***/ }),
-/* 42 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var $ = __webpack_require__(3);
-var util_1 = __webpack_require__(4);
-var EventRenderer = /** @class */ (function () {
- function EventRenderer(component, fillRenderer) {
- this.view = component._getView();
- this.component = component;
- this.fillRenderer = fillRenderer;
- }
- EventRenderer.prototype.opt = function (name) {
- return this.view.opt(name);
- };
- // Updates values that rely on options and also relate to range
- EventRenderer.prototype.rangeUpdated = function () {
- var displayEventTime;
- var displayEventEnd;
- this.eventTimeFormat =
- this.opt('eventTimeFormat') ||
- this.opt('timeFormat') || // deprecated
- this.computeEventTimeFormat();
- displayEventTime = this.opt('displayEventTime');
- if (displayEventTime == null) {
- displayEventTime = this.computeDisplayEventTime(); // might be based off of range
- }
- displayEventEnd = this.opt('displayEventEnd');
- if (displayEventEnd == null) {
- displayEventEnd = this.computeDisplayEventEnd(); // might be based off of range
- }
- this.displayEventTime = displayEventTime;
- this.displayEventEnd = displayEventEnd;
- };
- EventRenderer.prototype.render = function (eventsPayload) {
- var dateProfile = this.component._getDateProfile();
- var eventDefId;
- var instanceGroup;
- var eventRanges;
- var bgRanges = [];
- var fgRanges = [];
- for (eventDefId in eventsPayload) {
- instanceGroup = eventsPayload[eventDefId];
- eventRanges = instanceGroup.sliceRenderRanges(dateProfile.activeUnzonedRange);
- if (instanceGroup.getEventDef().hasBgRendering()) {
- bgRanges.push.apply(bgRanges, eventRanges);
- }
- else {
- fgRanges.push.apply(fgRanges, eventRanges);
- }
- }
- this.renderBgRanges(bgRanges);
- this.renderFgRanges(fgRanges);
- };
- EventRenderer.prototype.unrender = function () {
- this.unrenderBgRanges();
- this.unrenderFgRanges();
- };
- EventRenderer.prototype.renderFgRanges = function (eventRanges) {
- var eventFootprints = this.component.eventRangesToEventFootprints(eventRanges);
- var segs = this.component.eventFootprintsToSegs(eventFootprints);
- // render an `.el` on each seg
- // returns a subset of the segs. segs that were actually rendered
- segs = this.renderFgSegEls(segs);
- if (this.renderFgSegs(segs) !== false) {
- this.fgSegs = segs;
- }
- };
- EventRenderer.prototype.unrenderFgRanges = function () {
- this.unrenderFgSegs(this.fgSegs || []);
- this.fgSegs = null;
- };
- EventRenderer.prototype.renderBgRanges = function (eventRanges) {
- var eventFootprints = this.component.eventRangesToEventFootprints(eventRanges);
- var segs = this.component.eventFootprintsToSegs(eventFootprints);
- if (this.renderBgSegs(segs) !== false) {
- this.bgSegs = segs;
- }
- };
- EventRenderer.prototype.unrenderBgRanges = function () {
- this.unrenderBgSegs();
- this.bgSegs = null;
- };
- EventRenderer.prototype.getSegs = function () {
- return (this.bgSegs || []).concat(this.fgSegs || []);
- };
- // Renders foreground event segments onto the grid
- EventRenderer.prototype.renderFgSegs = function (segs) {
- // subclasses must implement
- // segs already has rendered els, and has been filtered.
- return false; // signal failure if not implemented
- };
- // Unrenders all currently rendered foreground segments
- EventRenderer.prototype.unrenderFgSegs = function (segs) {
- // subclasses must implement
- };
- EventRenderer.prototype.renderBgSegs = function (segs) {
- var _this = this;
- if (this.fillRenderer) {
- this.fillRenderer.renderSegs('bgEvent', segs, {
- getClasses: function (seg) {
- return _this.getBgClasses(seg.footprint.eventDef);
- },
- getCss: function (seg) {
- return {
- 'background-color': _this.getBgColor(seg.footprint.eventDef)
- };
- },
- filterEl: function (seg, el) {
- return _this.filterEventRenderEl(seg.footprint, el);
- }
- });
- }
- else {
- return false; // signal failure if no fillRenderer
- }
- };
- EventRenderer.prototype.unrenderBgSegs = function () {
- if (this.fillRenderer) {
- this.fillRenderer.unrender('bgEvent');
- }
- };
- // Renders and assigns an `el` property for each foreground event segment.
- // Only returns segments that successfully rendered.
- EventRenderer.prototype.renderFgSegEls = function (segs, disableResizing) {
- var _this = this;
- if (disableResizing === void 0) { disableResizing = false; }
- var hasEventRenderHandlers = this.view.hasPublicHandlers('eventRender');
- var html = '';
- var renderedSegs = [];
- var i;
- if (segs.length) {
- // build a large concatenation of event segment HTML
- for (i = 0; i < segs.length; i++) {
- this.beforeFgSegHtml(segs[i]);
- html += this.fgSegHtml(segs[i], disableResizing);
- }
- // 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.
- $(html).each(function (i, node) {
- var seg = segs[i];
- var el = $(node);
- if (hasEventRenderHandlers) {
- el = _this.filterEventRenderEl(seg.footprint, el);
- }
- if (el) {
- el.data('fc-seg', seg); // used by handlers
- seg.el = el;
- renderedSegs.push(seg);
- }
- });
- }
- return renderedSegs;
- };
- EventRenderer.prototype.beforeFgSegHtml = function (seg) {
- };
- // Generates the HTML for the default rendering of a foreground event segment. Used by renderFgSegEls()
- EventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {
- // subclasses should implement
- };
- // Generic utility for generating the HTML classNames for an event segment's element
- EventRenderer.prototype.getSegClasses = function (seg, isDraggable, isResizable) {
- var classes = [
- 'fc-event',
- seg.isStart ? 'fc-start' : 'fc-not-start',
- seg.isEnd ? 'fc-end' : 'fc-not-end'
- ].concat(this.getClasses(seg.footprint.eventDef));
- if (isDraggable) {
- classes.push('fc-draggable');
- }
- if (isResizable) {
- classes.push('fc-resizable');
- }
- // event is currently selected? attach a className.
- if (this.view.isEventDefSelected(seg.footprint.eventDef)) {
- classes.push('fc-selected');
- }
- return classes;
- };
- // Given an event and the default element used for rendering, returns the element that should actually be used.
- // Basically runs events and elements through the eventRender hook.
- EventRenderer.prototype.filterEventRenderEl = function (eventFootprint, el) {
- var legacy = eventFootprint.getEventLegacy();
- var custom = this.view.publiclyTrigger('eventRender', {
- context: legacy,
- args: [legacy, el, this.view]
- });
- if (custom === false) {
- el = null;
- }
- else if (custom && custom !== true) {
- el = $(custom);
- }
- return el;
- };
- // 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, formatStr will default to the eventTimeFormat setting,
- // and displayEnd will default to the displayEventEnd setting.
- EventRenderer.prototype.getTimeText = function (eventFootprint, formatStr, displayEnd) {
- return this._getTimeText(eventFootprint.eventInstance.dateProfile.start, eventFootprint.eventInstance.dateProfile.end, eventFootprint.componentFootprint.isAllDay, formatStr, displayEnd);
- };
- EventRenderer.prototype._getTimeText = function (start, end, isAllDay, formatStr, displayEnd) {
- if (formatStr == null) {
- formatStr = this.eventTimeFormat;
- }
- if (displayEnd == null) {
- displayEnd = this.displayEventEnd;
- }
- if (this.displayEventTime && !isAllDay) {
- if (displayEnd && end) {
- return this.view.formatRange({ start: start, end: end }, false, // allDay
- formatStr);
- }
- else {
- return start.format(formatStr);
- }
- }
- return '';
- };
- EventRenderer.prototype.computeEventTimeFormat = function () {
- return this.opt('smallTimeFormat');
- };
- EventRenderer.prototype.computeDisplayEventTime = function () {
- return true;
- };
- EventRenderer.prototype.computeDisplayEventEnd = function () {
- return true;
- };
- EventRenderer.prototype.getBgClasses = function (eventDef) {
- var classNames = this.getClasses(eventDef);
- classNames.push('fc-bgevent');
- return classNames;
- };
- EventRenderer.prototype.getClasses = function (eventDef) {
- var objs = this.getStylingObjs(eventDef);
- var i;
- var classNames = [];
- for (i = 0; i < objs.length; i++) {
- classNames.push.apply(// append
- classNames, objs[i].eventClassName || objs[i].className || []);
- }
- return classNames;
- };
- // Utility for generating event skin-related CSS properties
- EventRenderer.prototype.getSkinCss = function (eventDef) {
- return {
- 'background-color': this.getBgColor(eventDef),
- 'border-color': this.getBorderColor(eventDef),
- color: this.getTextColor(eventDef)
- };
- };
- // Queries for caller-specified color, then falls back to default
- EventRenderer.prototype.getBgColor = function (eventDef) {
- var objs = this.getStylingObjs(eventDef);
- var i;
- var val;
- for (i = 0; i < objs.length && !val; i++) {
- val = objs[i].eventBackgroundColor || objs[i].eventColor ||
- objs[i].backgroundColor || objs[i].color;
- }
- if (!val) {
- val = this.opt('eventBackgroundColor') || this.opt('eventColor');
- }
- return val;
- };
- // Queries for caller-specified color, then falls back to default
- EventRenderer.prototype.getBorderColor = function (eventDef) {
- var objs = this.getStylingObjs(eventDef);
- var i;
- var val;
- for (i = 0; i < objs.length && !val; i++) {
- val = objs[i].eventBorderColor || objs[i].eventColor ||
- objs[i].borderColor || objs[i].color;
- }
- if (!val) {
- val = this.opt('eventBorderColor') || this.opt('eventColor');
- }
- return val;
- };
- // Queries for caller-specified color, then falls back to default
- EventRenderer.prototype.getTextColor = function (eventDef) {
- var objs = this.getStylingObjs(eventDef);
- var i;
- var val;
- for (i = 0; i < objs.length && !val; i++) {
- val = objs[i].eventTextColor ||
- objs[i].textColor;
- }
- if (!val) {
- val = this.opt('eventTextColor');
- }
- return val;
- };
- EventRenderer.prototype.getStylingObjs = function (eventDef) {
- var objs = this.getFallbackStylingObjs(eventDef);
- objs.unshift(eventDef);
- return objs;
- };
- EventRenderer.prototype.getFallbackStylingObjs = function (eventDef) {
- return [eventDef.source];
- };
- EventRenderer.prototype.sortEventSegs = function (segs) {
- segs.sort(util_1.proxy(this, 'compareEventSegs'));
- };
- // A cmp function for determining which segments should take visual priority
- EventRenderer.prototype.compareEventSegs = function (seg1, seg2) {
- var f1 = seg1.footprint;
- var f2 = seg2.footprint;
- var cf1 = f1.componentFootprint;
- var cf2 = f2.componentFootprint;
- var r1 = cf1.unzonedRange;
- var r2 = cf2.unzonedRange;
- return r1.startMs - r2.startMs || // earlier events go first
- (r2.endMs - r2.startMs) - (r1.endMs - r1.startMs) || // tie? longer events go first
- cf2.isAllDay - cf1.isAllDay || // tie? put all-day events first (booleans cast to 0/1)
- util_1.compareByFieldSpecs(f1.eventDef, f2.eventDef, this.view.eventOrderSpecs, f1.eventDef.miscProps, f2.eventDef.miscProps);
- };
- return EventRenderer;
-}());
-exports.default = EventRenderer;
-
-
-/***/ }),
-/* 43 */,
-/* 44 */,
-/* 45 */,
-/* 46 */,
-/* 47 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var moment_ext_1 = __webpack_require__(10);
-// Plugin
-// -------------------------------------------------------------------------------------------------
-moment_ext_1.newMomentProto.format = function () {
- if (this._fullCalendar && arguments[0]) {
- return formatDate(this, arguments[0]); // our extended formatting
- }
- if (this._ambigTime) {
- return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD');
- }
- if (this._ambigZone) {
- return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD[T]HH:mm:ss');
- }
- if (this._fullCalendar) {
- // moment.format() doesn't ensure english, but we want to.
- return moment_ext_1.oldMomentFormat(englishMoment(this));
- }
- return moment_ext_1.oldMomentProto.format.apply(this, arguments);
-};
-moment_ext_1.newMomentProto.toISOString = function () {
- if (this._ambigTime) {
- return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD');
- }
- if (this._ambigZone) {
- return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD[T]HH:mm:ss');
- }
- if (this._fullCalendar) {
- // depending on browser, moment might not output english. ensure english.
- // https://github.com/moment/moment/blob/2.18.1/src/lib/moment/format.js#L22
- return moment_ext_1.oldMomentProto.toISOString.apply(englishMoment(this), arguments);
- }
- return moment_ext_1.oldMomentProto.toISOString.apply(this, arguments);
-};
-function englishMoment(mom) {
- if (mom.locale() !== 'en') {
- return mom.clone().locale('en');
- }
- return mom;
-}
-// Config
-// ---------------------------------------------------------------------------------------------------------------------
-/*
-Inserted between chunks in the fake ("intermediate") formatting string.
-Important that it passes as whitespace (\s) because moment often identifies non-standalone months
-via a regexp with an \s.
-*/
-var PART_SEPARATOR = '\u000b'; // vertical tab
-/*
-Inserted as the first character of a literal-text chunk to indicate that the literal text is not actually literal text,
-but rather, a "special" token that has custom rendering (see specialTokens map).
-*/
-var SPECIAL_TOKEN_MARKER = '\u001f'; // information separator 1
-/*
-Inserted at the beginning and end of a span of text that must have non-zero numeric characters.
-Handling of these markers is done in a post-processing step at the very end of text rendering.
-*/
-var MAYBE_MARKER = '\u001e'; // information separator 2
-var MAYBE_REGEXP = new RegExp(MAYBE_MARKER + '([^' + MAYBE_MARKER + ']*)' + MAYBE_MARKER, 'g'); // must be global
-/*
-Addition formatting tokens we want recognized
-*/
-var specialTokens = {
- t: function (date) {
- return moment_ext_1.oldMomentFormat(date, 'a').charAt(0);
- },
- T: function (date) {
- return moment_ext_1.oldMomentFormat(date, 'A').charAt(0);
- }
-};
-/*
-The first characters of formatting tokens for units that are 1 day or larger.
-`value` is for ranking relative size (lower means bigger).
-`unit` is a normalized unit, used for comparing moments.
-*/
-var largeTokenMap = {
- Y: { value: 1, unit: 'year' },
- M: { value: 2, unit: 'month' },
- W: { value: 3, unit: 'week' },
- w: { value: 3, unit: 'week' },
- D: { value: 4, unit: 'day' },
- d: { value: 4, unit: 'day' } // day of week
-};
-// Single Date Formatting
-// ---------------------------------------------------------------------------------------------------------------------
-/*
-Formats `date` with a Moment formatting string, but allow our non-zero areas and special token
-*/
-function formatDate(date, formatStr) {
- return renderFakeFormatString(getParsedFormatString(formatStr).fakeFormatString, date);
-}
-exports.formatDate = formatDate;
-// Date Range Formatting
-// -------------------------------------------------------------------------------------------------
-// TODO: make it work with timezone offset
-/*
-Using a formatting string meant for a single date, generate a range string, like
-"Sep 2 - 9 2013", that intelligently inserts a separator where the dates differ.
-If the dates are the same as far as the format string is concerned, just return a single
-rendering of one date, without any separator.
-*/
-function formatRange(date1, date2, formatStr, separator, isRTL) {
- var localeData;
- date1 = moment_ext_1.default.parseZone(date1);
- date2 = moment_ext_1.default.parseZone(date2);
- localeData = date1.localeData();
- // Expand localized format strings, like "LL" -> "MMMM D YYYY".
- // BTW, this is not important for `formatDate` because it is impossible to put custom tokens
- // or non-zero areas in Moment's localized format strings.
- formatStr = localeData.longDateFormat(formatStr) || formatStr;
- return renderParsedFormat(getParsedFormatString(formatStr), date1, date2, separator || ' - ', isRTL);
-}
-exports.formatRange = formatRange;
-/*
-Renders a range with an already-parsed format string.
-*/
-function renderParsedFormat(parsedFormat, date1, date2, separator, isRTL) {
- var sameUnits = parsedFormat.sameUnits;
- var unzonedDate1 = date1.clone().stripZone(); // for same-unit comparisons
- var unzonedDate2 = date2.clone().stripZone(); // "
- var renderedParts1 = renderFakeFormatStringParts(parsedFormat.fakeFormatString, date1);
- var renderedParts2 = renderFakeFormatStringParts(parsedFormat.fakeFormatString, date2);
- var leftI;
- var leftStr = '';
- var rightI;
- var rightStr = '';
- var middleI;
- var middleStr1 = '';
- var middleStr2 = '';
- var middleStr = '';
- // Start at the leftmost side of the formatting string and continue until you hit a token
- // that is not the same between dates.
- for (leftI = 0; leftI < sameUnits.length && (!sameUnits[leftI] || unzonedDate1.isSame(unzonedDate2, sameUnits[leftI])); leftI++) {
- leftStr += renderedParts1[leftI];
- }
- // Similarly, start at the rightmost side of the formatting string and move left
- for (rightI = sameUnits.length - 1; rightI > leftI && (!sameUnits[rightI] || unzonedDate1.isSame(unzonedDate2, sameUnits[rightI])); rightI--) {
- // If current chunk is on the boundary of unique date-content, and is a special-case
- // date-formatting postfix character, then don't consume it. Consider it unique date-content.
- // TODO: make configurable
- if (rightI - 1 === leftI && renderedParts1[rightI] === '.') {
- break;
- }
- rightStr = renderedParts1[rightI] + rightStr;
- }
- // The area in the middle is different for both of the dates.
- // Collect them distinctly so we can jam them together later.
- for (middleI = leftI; middleI <= rightI; middleI++) {
- middleStr1 += renderedParts1[middleI];
- middleStr2 += renderedParts2[middleI];
- }
- if (middleStr1 || middleStr2) {
- if (isRTL) {
- middleStr = middleStr2 + separator + middleStr1;
- }
- else {
- middleStr = middleStr1 + separator + middleStr2;
- }
- }
- return processMaybeMarkers(leftStr + middleStr + rightStr);
-}
-// Format String Parsing
-// ---------------------------------------------------------------------------------------------------------------------
-var parsedFormatStrCache = {};
-/*
-Returns a parsed format string, leveraging a cache.
-*/
-function getParsedFormatString(formatStr) {
- return parsedFormatStrCache[formatStr] ||
- (parsedFormatStrCache[formatStr] = parseFormatString(formatStr));
-}
-/*
-Parses a format string into the following:
-- fakeFormatString: a momentJS formatting string, littered with special control characters that get post-processed.
-- sameUnits: for every part in fakeFormatString, if the part is a token, the value will be a unit string (like "day"),
- that indicates how similar a range's start & end must be in order to share the same formatted text.
- If not a token, then the value is null.
- Always a flat array (not nested liked "chunks").
-*/
-function parseFormatString(formatStr) {
- var chunks = chunkFormatString(formatStr);
- return {
- fakeFormatString: buildFakeFormatString(chunks),
- sameUnits: buildSameUnits(chunks)
- };
-}
-/*
-Break the formatting string into an array of chunks.
-A 'maybe' chunk will have nested chunks.
-*/
-function chunkFormatString(formatStr) {
- var chunks = [];
- var match;
- // TODO: more descrimination
- // \4 is a backreference to the first character of a multi-character set.
- var chunker = /\[([^\]]*)\]|\(([^\)]*)\)|(LTS|LT|(\w)\4*o?)|([^\w\[\(]+)/g;
- while ((match = chunker.exec(formatStr))) {
- if (match[1]) {
- chunks.push.apply(chunks, // append
- splitStringLiteral(match[1]));
- }
- else if (match[2]) {
- chunks.push({ maybe: chunkFormatString(match[2]) });
- }
- else if (match[3]) {
- chunks.push({ token: match[3] });
- }
- else if (match[5]) {
- chunks.push.apply(chunks, // append
- splitStringLiteral(match[5]));
- }
- }
- return chunks;
-}
-/*
-Potentially splits a literal-text string into multiple parts. For special cases.
-*/
-function splitStringLiteral(s) {
- if (s === '. ') {
- return ['.', ' ']; // for locales with periods bound to the end of each year/month/date
- }
- else {
- return [s];
- }
-}
-/*
-Given chunks parsed from a real format string, generate a fake (aka "intermediate") format string with special control
-characters that will eventually be given to moment for formatting, and then post-processed.
-*/
-function buildFakeFormatString(chunks) {
- var parts = [];
- var i;
- var chunk;
- for (i = 0; i < chunks.length; i++) {
- chunk = chunks[i];
- if (typeof chunk === 'string') {
- parts.push('[' + chunk + ']');
- }
- else if (chunk.token) {
- if (chunk.token in specialTokens) {
- parts.push(SPECIAL_TOKEN_MARKER + // useful during post-processing
- '[' + chunk.token + ']' // preserve as literal text
- );
- }
- else {
- parts.push(chunk.token); // unprotected text implies a format string
- }
- }
- else if (chunk.maybe) {
- parts.push(MAYBE_MARKER + // useful during post-processing
- buildFakeFormatString(chunk.maybe) +
- MAYBE_MARKER);
- }
- }
- return parts.join(PART_SEPARATOR);
-}
-/*
-Given parsed chunks from a real formatting string, generates an array of unit strings (like "day") that indicate
-in which regard two dates must be similar in order to share range formatting text.
-The `chunks` can be nested (because of "maybe" chunks), however, the returned array will be flat.
-*/
-function buildSameUnits(chunks) {
- var units = [];
- var i;
- var chunk;
- var tokenInfo;
- for (i = 0; i < chunks.length; i++) {
- chunk = chunks[i];
- if (chunk.token) {
- tokenInfo = largeTokenMap[chunk.token.charAt(0)];
- units.push(tokenInfo ? tokenInfo.unit : 'second'); // default to a very strict same-second
- }
- else if (chunk.maybe) {
- units.push.apply(units, // append
- buildSameUnits(chunk.maybe));
- }
- else {
- units.push(null);
- }
- }
- return units;
-}
-// Rendering to text
-// ---------------------------------------------------------------------------------------------------------------------
-/*
-Formats a date with a fake format string, post-processes the control characters, then returns.
-*/
-function renderFakeFormatString(fakeFormatString, date) {
- return processMaybeMarkers(renderFakeFormatStringParts(fakeFormatString, date).join(''));
-}
-/*
-Formats a date into parts that will have been post-processed, EXCEPT for the "maybe" markers.
-*/
-function renderFakeFormatStringParts(fakeFormatString, date) {
- var parts = [];
- var fakeRender = moment_ext_1.oldMomentFormat(date, fakeFormatString);
- var fakeParts = fakeRender.split(PART_SEPARATOR);
- var i;
- var fakePart;
- for (i = 0; i < fakeParts.length; i++) {
- fakePart = fakeParts[i];
- if (fakePart.charAt(0) === SPECIAL_TOKEN_MARKER) {
- parts.push(
- // the literal string IS the token's name.
- // call special token's registered function.
- specialTokens[fakePart.substring(1)](date));
- }
- else {
- parts.push(fakePart);
- }
- }
- return parts;
-}
-/*
-Accepts an almost-finally-formatted string and processes the "maybe" control characters, returning a new string.
-*/
-function processMaybeMarkers(s) {
- return s.replace(MAYBE_REGEXP, function (m0, m1) {
- if (m1.match(/[1-9]/)) {
- return m1;
- }
- else {
- return '';
- }
- });
-}
-// Misc Utils
-// -------------------------------------------------------------------------------------------------
-/*
-Returns a unit string, either 'year', 'month', 'day', or null for the most granular formatting token in the string.
-*/
-function queryMostGranularFormatUnit(formatStr) {
- var chunks = chunkFormatString(formatStr);
- var i;
- var chunk;
- var candidate;
- var best;
- for (i = 0; i < chunks.length; i++) {
- chunk = chunks[i];
- if (chunk.token) {
- candidate = largeTokenMap[chunk.token.charAt(0)];
- if (candidate) {
- if (!best || candidate.value > best.value) {
- best = candidate;
- }
- }
- }
- }
- if (best) {
- return best.unit;
- }
- return null;
-}
-exports.queryMostGranularFormatUnit = queryMostGranularFormatUnit;
-
-
-/***/ }),
-/* 48 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var Class_1 = __webpack_require__(33);
-var EmitterMixin_1 = __webpack_require__(11);
-var ListenerMixin_1 = __webpack_require__(7);
-var Model = /** @class */ (function (_super) {
- tslib_1.__extends(Model, _super);
- function Model() {
- var _this = _super.call(this) || this;
- _this._watchers = {};
- _this._props = {};
- _this.applyGlobalWatchers();
- _this.constructed();
- return _this;
- }
- Model.watch = function (name) {
- var args = [];
- for (var _i = 1; _i < arguments.length; _i++) {
- args[_i - 1] = arguments[_i];
- }
- // subclasses should make a masked-copy of the superclass's map
- // TODO: write test
- if (!this.prototype.hasOwnProperty('_globalWatchArgs')) {
- this.prototype._globalWatchArgs = Object.create(this.prototype._globalWatchArgs);
- }
- this.prototype._globalWatchArgs[name] = args;
- };
- Model.prototype.constructed = function () {
- // useful for monkeypatching. TODO: BaseClass?
- };
- Model.prototype.applyGlobalWatchers = function () {
- var map = this._globalWatchArgs;
- var name;
- for (name in map) {
- this.watch.apply(this, [name].concat(map[name]));
- }
- };
- Model.prototype.has = function (name) {
- return name in this._props;
- };
- Model.prototype.get = function (name) {
- if (name === undefined) {
- return this._props;
- }
- return this._props[name];
- };
- Model.prototype.set = function (name, val) {
- var newProps;
- if (typeof name === 'string') {
- newProps = {};
- newProps[name] = val === undefined ? null : val;
- }
- else {
- newProps = name;
- }
- this.setProps(newProps);
- };
- Model.prototype.reset = function (newProps) {
- var oldProps = this._props;
- var changeset = {}; // will have undefined's to signal unsets
- var name;
- for (name in oldProps) {
- changeset[name] = undefined;
- }
- for (name in newProps) {
- changeset[name] = newProps[name];
- }
- this.setProps(changeset);
- };
- Model.prototype.unset = function (name) {
- var newProps = {};
- var names;
- var i;
- if (typeof name === 'string') {
- names = [name];
- }
- else {
- names = name;
- }
- for (i = 0; i < names.length; i++) {
- newProps[names[i]] = undefined;
- }
- this.setProps(newProps);
- };
- Model.prototype.setProps = function (newProps) {
- var changedProps = {};
- var changedCnt = 0;
- var name;
- var val;
- for (name in newProps) {
- val = newProps[name];
- // a change in value?
- // if an object, don't check equality, because might have been mutated internally.
- // TODO: eventually enforce immutability.
- if (typeof val === 'object' ||
- val !== this._props[name]) {
- changedProps[name] = val;
- changedCnt++;
- }
- }
- if (changedCnt) {
- this.trigger('before:batchChange', changedProps);
- for (name in changedProps) {
- val = changedProps[name];
- this.trigger('before:change', name, val);
- this.trigger('before:change:' + name, val);
- }
- for (name in changedProps) {
- val = changedProps[name];
- if (val === undefined) {
- delete this._props[name];
- }
- else {
- this._props[name] = val;
- }
- this.trigger('change:' + name, val);
- this.trigger('change', name, val);
- }
- this.trigger('batchChange', changedProps);
- }
- };
- Model.prototype.watch = function (name, depList, startFunc, stopFunc) {
- var _this = this;
- this.unwatch(name);
- this._watchers[name] = this._watchDeps(depList, function (deps) {
- var res = startFunc.call(_this, deps);
- if (res && res.then) {
- _this.unset(name); // put in an unset state while resolving
- res.then(function (val) {
- _this.set(name, val);
- });
- }
- else {
- _this.set(name, res);
- }
- }, function (deps) {
- _this.unset(name);
- if (stopFunc) {
- stopFunc.call(_this, deps);
- }
- });
- };
- Model.prototype.unwatch = function (name) {
- var watcher = this._watchers[name];
- if (watcher) {
- delete this._watchers[name];
- watcher.teardown();
- }
- };
- Model.prototype._watchDeps = function (depList, startFunc, stopFunc) {
- var _this = this;
- var queuedChangeCnt = 0;
- var depCnt = depList.length;
- var satisfyCnt = 0;
- var values = {}; // what's passed as the `deps` arguments
- var bindTuples = []; // array of [ eventName, handlerFunc ] arrays
- var isCallingStop = false;
- var onBeforeDepChange = function (depName, val, isOptional) {
- queuedChangeCnt++;
- if (queuedChangeCnt === 1) {
- if (satisfyCnt === depCnt) {
- isCallingStop = true;
- stopFunc(values);
- isCallingStop = false;
- }
- }
- };
- var onDepChange = function (depName, val, isOptional) {
- if (val === undefined) {
- // required dependency that was previously set?
- if (!isOptional && values[depName] !== undefined) {
- satisfyCnt--;
- }
- delete values[depName];
- }
- else {
- // required dependency that was previously unset?
- if (!isOptional && values[depName] === undefined) {
- satisfyCnt++;
- }
- values[depName] = val;
- }
- queuedChangeCnt--;
- if (!queuedChangeCnt) {
- // now finally satisfied or satisfied all along?
- if (satisfyCnt === depCnt) {
- // if the stopFunc initiated another value change, ignore it.
- // it will be processed by another change event anyway.
- if (!isCallingStop) {
- startFunc(values);
- }
- }
- }
- };
- // intercept for .on() that remembers handlers
- var bind = function (eventName, handler) {
- _this.on(eventName, handler);
- bindTuples.push([eventName, handler]);
- };
- // listen to dependency changes
- depList.forEach(function (depName) {
- var isOptional = false;
- if (depName.charAt(0) === '?') {
- depName = depName.substring(1);
- isOptional = true;
- }
- bind('before:change:' + depName, function (val) {
- onBeforeDepChange(depName, val, isOptional);
- });
- bind('change:' + depName, function (val) {
- onDepChange(depName, val, isOptional);
- });
- });
- // process current dependency values
- depList.forEach(function (depName) {
- var isOptional = false;
- if (depName.charAt(0) === '?') {
- depName = depName.substring(1);
- isOptional = true;
- }
- if (_this.has(depName)) {
- values[depName] = _this.get(depName);
- satisfyCnt++;
- }
- else if (isOptional) {
- satisfyCnt++;
- }
- });
- // initially satisfied
- if (satisfyCnt === depCnt) {
- startFunc(values);
- }
- return {
- teardown: function () {
- // remove all handlers
- for (var i = 0; i < bindTuples.length; i++) {
- _this.off(bindTuples[i][0], bindTuples[i][1]);
- }
- bindTuples = null;
- // was satisfied, so call stopFunc
- if (satisfyCnt === depCnt) {
- stopFunc();
- }
- },
- flash: function () {
- if (satisfyCnt === depCnt) {
- stopFunc();
- startFunc(values);
- }
- }
- };
- };
- Model.prototype.flash = function (name) {
- var watcher = this._watchers[name];
- if (watcher) {
- watcher.flash();
- }
- };
- return Model;
-}(Class_1.default));
-exports.default = Model;
-Model.prototype._globalWatchArgs = {}; // mutation protection in Model.watch
-EmitterMixin_1.default.mixInto(Model);
-ListenerMixin_1.default.mixInto(Model);
-
-
-/***/ }),
-/* 49 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var moment = __webpack_require__(0);
-var util_1 = __webpack_require__(4);
-var SingleEventDef_1 = __webpack_require__(13);
-var RecurringEventDef_1 = __webpack_require__(210);
-exports.default = {
- parse: function (eventInput, source) {
- if (util_1.isTimeString(eventInput.start) || moment.isDuration(eventInput.start) ||
- util_1.isTimeString(eventInput.end) || moment.isDuration(eventInput.end)) {
- return RecurringEventDef_1.default.parse(eventInput, source);
- }
- else {
- return SingleEventDef_1.default.parse(eventInput, source);
- }
- }
-};
-
-
-/***/ }),
-/* 50 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var util_1 = __webpack_require__(4);
-var EventDateProfile_1 = __webpack_require__(17);
-var EventDefDateMutation = /** @class */ (function () {
- function EventDefDateMutation() {
- this.clearEnd = false;
- this.forceTimed = false;
- this.forceAllDay = false;
- }
- EventDefDateMutation.createFromDiff = function (dateProfile0, dateProfile1, largeUnit) {
- var clearEnd = dateProfile0.end && !dateProfile1.end;
- var forceTimed = dateProfile0.isAllDay() && !dateProfile1.isAllDay();
- var forceAllDay = !dateProfile0.isAllDay() && dateProfile1.isAllDay();
- var dateDelta;
- var endDiff;
- var endDelta;
- var mutation;
- // subtracts the dates in the appropriate way, returning a duration
- function subtractDates(date1, date0) {
- if (largeUnit) {
- return util_1.diffByUnit(date1, date0, largeUnit); // poorly named
- }
- else if (dateProfile1.isAllDay()) {
- return util_1.diffDay(date1, date0); // poorly named
- }
- else {
- return util_1.diffDayTime(date1, date0); // poorly named
- }
- }
- dateDelta = subtractDates(dateProfile1.start, dateProfile0.start);
- if (dateProfile1.end) {
- // use unzonedRanges because dateProfile0.end might be null
- endDiff = subtractDates(dateProfile1.unzonedRange.getEnd(), dateProfile0.unzonedRange.getEnd());
- endDelta = endDiff.subtract(dateDelta);
- }
- mutation = new EventDefDateMutation();
- mutation.clearEnd = clearEnd;
- mutation.forceTimed = forceTimed;
- mutation.forceAllDay = forceAllDay;
- mutation.setDateDelta(dateDelta);
- mutation.setEndDelta(endDelta);
- return mutation;
- };
- /*
- returns an undo function.
- */
- EventDefDateMutation.prototype.buildNewDateProfile = function (eventDateProfile, calendar) {
- var start = eventDateProfile.start.clone();
- var end = null;
- var shouldRezone = false;
- if (eventDateProfile.end && !this.clearEnd) {
- end = eventDateProfile.end.clone();
- }
- else if (this.endDelta && !end) {
- end = calendar.getDefaultEventEnd(eventDateProfile.isAllDay(), start);
- }
- if (this.forceTimed) {
- shouldRezone = true;
- if (!start.hasTime()) {
- start.time(0);
- }
- if (end && !end.hasTime()) {
- end.time(0);
- }
- }
- else if (this.forceAllDay) {
- if (start.hasTime()) {
- start.stripTime();
- }
- if (end && end.hasTime()) {
- end.stripTime();
- }
- }
- if (this.dateDelta) {
- shouldRezone = true;
- start.add(this.dateDelta);
- if (end) {
- end.add(this.dateDelta);
- }
- }
- // do this before adding startDelta to start, so we can work off of start
- if (this.endDelta) {
- shouldRezone = true;
- end.add(this.endDelta);
- }
- if (this.startDelta) {
- shouldRezone = true;
- start.add(this.startDelta);
- }
- if (shouldRezone) {
- start = calendar.applyTimezone(start);
- if (end) {
- end = calendar.applyTimezone(end);
- }
- }
- // TODO: okay to access calendar option?
- if (!end && calendar.opt('forceEventDuration')) {
- end = calendar.getDefaultEventEnd(eventDateProfile.isAllDay(), start);
- }
- return new EventDateProfile_1.default(start, end, calendar);
- };
- EventDefDateMutation.prototype.setDateDelta = function (dateDelta) {
- if (dateDelta && dateDelta.valueOf()) {
- this.dateDelta = dateDelta;
- }
- else {
- this.dateDelta = null;
- }
- };
- EventDefDateMutation.prototype.setStartDelta = function (startDelta) {
- if (startDelta && startDelta.valueOf()) {
- this.startDelta = startDelta;
- }
- else {
- this.startDelta = null;
- }
- };
- EventDefDateMutation.prototype.setEndDelta = function (endDelta) {
- if (endDelta && endDelta.valueOf()) {
- this.endDelta = endDelta;
- }
- else {
- this.endDelta = null;
- }
- };
- EventDefDateMutation.prototype.isEmpty = function () {
- return !this.clearEnd && !this.forceTimed && !this.forceAllDay &&
- !this.dateDelta && !this.startDelta && !this.endDelta;
- };
- return EventDefDateMutation;
-}());
-exports.default = EventDefDateMutation;
-
-
-/***/ }),
-/* 51 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var StandardTheme_1 = __webpack_require__(213);
-var JqueryUiTheme_1 = __webpack_require__(214);
-var themeClassHash = {};
-function defineThemeSystem(themeName, themeClass) {
- themeClassHash[themeName] = themeClass;
-}
-exports.defineThemeSystem = defineThemeSystem;
-function getThemeSystemClass(themeSetting) {
- if (!themeSetting) {
- return StandardTheme_1.default;
- }
- else if (themeSetting === true) {
- return JqueryUiTheme_1.default;
- }
- else {
- return themeClassHash[themeSetting];
- }
-}
-exports.getThemeSystemClass = getThemeSystemClass;
-
-
-/***/ }),
-/* 52 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var $ = __webpack_require__(3);
-var util_1 = __webpack_require__(4);
-var Promise_1 = __webpack_require__(20);
-var EventSource_1 = __webpack_require__(6);
-var SingleEventDef_1 = __webpack_require__(13);
-var ArrayEventSource = /** @class */ (function (_super) {
- tslib_1.__extends(ArrayEventSource, _super);
- function ArrayEventSource(calendar) {
- var _this = _super.call(this, calendar) || this;
- _this.eventDefs = []; // for if setRawEventDefs is never called
- return _this;
- }
- ArrayEventSource.parse = function (rawInput, calendar) {
- var rawProps;
- // normalize raw input
- if ($.isArray(rawInput.events)) {
- rawProps = rawInput;
- }
- else if ($.isArray(rawInput)) {
- rawProps = { events: rawInput };
- }
- if (rawProps) {
- return EventSource_1.default.parse.call(this, rawProps, calendar);
- }
- return false;
- };
- ArrayEventSource.prototype.setRawEventDefs = function (rawEventDefs) {
- this.rawEventDefs = rawEventDefs;
- this.eventDefs = this.parseEventDefs(rawEventDefs);
- };
- ArrayEventSource.prototype.fetch = function (start, end, timezone) {
- var eventDefs = this.eventDefs;
- var i;
- if (this.currentTimezone != null &&
- this.currentTimezone !== timezone) {
- for (i = 0; i < eventDefs.length; i++) {
- if (eventDefs[i] instanceof SingleEventDef_1.default) {
- eventDefs[i].rezone();
- }
- }
- }
- this.currentTimezone = timezone;
- return Promise_1.default.resolve(eventDefs);
- };
- ArrayEventSource.prototype.addEventDef = function (eventDef) {
- this.eventDefs.push(eventDef);
- };
- /*
- eventDefId already normalized to a string
- */
- ArrayEventSource.prototype.removeEventDefsById = function (eventDefId) {
- return util_1.removeMatching(this.eventDefs, function (eventDef) {
- return eventDef.id === eventDefId;
- });
- };
- ArrayEventSource.prototype.removeAllEventDefs = function () {
- this.eventDefs = [];
- };
- ArrayEventSource.prototype.getPrimitive = function () {
- return this.rawEventDefs;
- };
- ArrayEventSource.prototype.applyManualStandardProps = function (rawProps) {
- var superSuccess = _super.prototype.applyManualStandardProps.call(this, rawProps);
- this.setRawEventDefs(rawProps.events);
- return superSuccess;
- };
- return ArrayEventSource;
-}(EventSource_1.default));
-exports.default = ArrayEventSource;
-ArrayEventSource.defineStandardProps({
- events: false // don't automatically transfer
-});
-
-
-/***/ }),
-/* 53 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var $ = __webpack_require__(3);
-var util_1 = __webpack_require__(4);
-/*
-A cache for the left/right/top/bottom/width/height values for one or more elements.
-Works with both offset (from topleft document) and position (from offsetParent).
-
-options:
-- els
-- isHorizontal
-- isVertical
-*/
-var CoordCache = /** @class */ (function () {
- function CoordCache(options) {
- this.isHorizontal = false; // whether to query for left/right/width
- this.isVertical = false; // whether to query for top/bottom/height
- this.els = $(options.els);
- this.isHorizontal = options.isHorizontal;
- this.isVertical = options.isVertical;
- this.forcedOffsetParentEl = options.offsetParent ? $(options.offsetParent) : null;
- }
- // Queries the els for coordinates and stores them.
- // Call this method before using and of the get* methods below.
- CoordCache.prototype.build = function () {
- var offsetParentEl = this.forcedOffsetParentEl;
- if (!offsetParentEl && this.els.length > 0) {
- offsetParentEl = this.els.eq(0).offsetParent();
- }
- this.origin = offsetParentEl ?
- offsetParentEl.offset() :
- null;
- this.boundingRect = this.queryBoundingRect();
- if (this.isHorizontal) {
- this.buildElHorizontals();
- }
- if (this.isVertical) {
- this.buildElVerticals();
- }
- };
- // Destroys all internal data about coordinates, freeing memory
- CoordCache.prototype.clear = function () {
- this.origin = null;
- this.boundingRect = null;
- this.lefts = null;
- this.rights = null;
- this.tops = null;
- this.bottoms = null;
- };
- // When called, if coord caches aren't built, builds them
- CoordCache.prototype.ensureBuilt = function () {
- if (!this.origin) {
- this.build();
- }
- };
- // Populates the left/right internal coordinate arrays
- CoordCache.prototype.buildElHorizontals = function () {
- var lefts = [];
- var rights = [];
- this.els.each(function (i, node) {
- var el = $(node);
- var left = el.offset().left;
- var width = el.outerWidth();
- lefts.push(left);
- rights.push(left + width);
- });
- this.lefts = lefts;
- this.rights = rights;
- };
- // Populates the top/bottom internal coordinate arrays
- CoordCache.prototype.buildElVerticals = function () {
- var tops = [];
- var bottoms = [];
- this.els.each(function (i, node) {
- var el = $(node);
- var top = el.offset().top;
- var height = el.outerHeight();
- tops.push(top);
- bottoms.push(top + height);
- });
- 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.
- CoordCache.prototype.getHorizontalIndex = function (leftOffset) {
- this.ensureBuilt();
- var lefts = this.lefts;
- var rights = this.rights;
- var len = lefts.length;
- var i;
- for (i = 0; i < len; i++) {
- if (leftOffset >= lefts[i] && leftOffset < 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.
- CoordCache.prototype.getVerticalIndex = function (topOffset) {
- this.ensureBuilt();
- var tops = this.tops;
- var bottoms = this.bottoms;
- var len = tops.length;
- var i;
- for (i = 0; i < len; i++) {
- if (topOffset >= tops[i] && topOffset < bottoms[i]) {
- return i;
- }
- }
- };
- // Gets the left offset (from document left) of the element at the given index
- CoordCache.prototype.getLeftOffset = function (leftIndex) {
- this.ensureBuilt();
- return this.lefts[leftIndex];
- };
- // Gets the left position (from offsetParent left) of the element at the given index
- CoordCache.prototype.getLeftPosition = function (leftIndex) {
- this.ensureBuilt();
- return this.lefts[leftIndex] - this.origin.left;
- };
- // Gets the right offset (from document left) of the element at the given index.
- // This value is NOT relative to the document's right edge, like the CSS concept of "right" would be.
- CoordCache.prototype.getRightOffset = function (leftIndex) {
- this.ensureBuilt();
- return this.rights[leftIndex];
- };
- // Gets the right position (from offsetParent left) of the element at the given index.
- // This value is NOT relative to the offsetParent's right edge, like the CSS concept of "right" would be.
- CoordCache.prototype.getRightPosition = function (leftIndex) {
- this.ensureBuilt();
- return this.rights[leftIndex] - this.origin.left;
- };
- // Gets the width of the element at the given index
- CoordCache.prototype.getWidth = function (leftIndex) {
- this.ensureBuilt();
- return this.rights[leftIndex] - this.lefts[leftIndex];
- };
- // Gets the top offset (from document top) of the element at the given index
- CoordCache.prototype.getTopOffset = function (topIndex) {
- this.ensureBuilt();
- return this.tops[topIndex];
- };
- // Gets the top position (from offsetParent top) of the element at the given position
- CoordCache.prototype.getTopPosition = function (topIndex) {
- this.ensureBuilt();
- return this.tops[topIndex] - this.origin.top;
- };
- // Gets the bottom offset (from the document top) of the element at the given index.
- // This value is NOT relative to the offsetParent's bottom edge, like the CSS concept of "bottom" would be.
- CoordCache.prototype.getBottomOffset = function (topIndex) {
- this.ensureBuilt();
- return this.bottoms[topIndex];
- };
- // Gets the bottom position (from the offsetParent top) of the element at the given index.
- // This value is NOT relative to the offsetParent's bottom edge, like the CSS concept of "bottom" would be.
- CoordCache.prototype.getBottomPosition = function (topIndex) {
- this.ensureBuilt();
- return this.bottoms[topIndex] - this.origin.top;
- };
- // Gets the height of the element at the given index
- CoordCache.prototype.getHeight = function (topIndex) {
- this.ensureBuilt();
- return this.bottoms[topIndex] - this.tops[topIndex];
- };
- // Bounding Rect
- // TODO: decouple this from CoordCache
- // Compute and return what the elements' bounding rectangle is, from the user's perspective.
- // Right now, only returns a rectangle if constrained by an overflow:scroll element.
- // Returns null if there are no elements
- CoordCache.prototype.queryBoundingRect = function () {
- var scrollParentEl;
- if (this.els.length > 0) {
- scrollParentEl = util_1.getScrollParent(this.els.eq(0));
- if (!scrollParentEl.is(document)) {
- return util_1.getClientRect(scrollParentEl);
- }
- }
- return null;
- };
- CoordCache.prototype.isPointInBounds = function (leftOffset, topOffset) {
- return this.isLeftInBounds(leftOffset) && this.isTopInBounds(topOffset);
- };
- CoordCache.prototype.isLeftInBounds = function (leftOffset) {
- return !this.boundingRect || (leftOffset >= this.boundingRect.left && leftOffset < this.boundingRect.right);
- };
- CoordCache.prototype.isTopInBounds = function (topOffset) {
- return !this.boundingRect || (topOffset >= this.boundingRect.top && topOffset < this.boundingRect.bottom);
- };
- return CoordCache;
-}());
-exports.default = CoordCache;
-
-
-/***/ }),
-/* 54 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var $ = __webpack_require__(3);
-var util_1 = __webpack_require__(4);
-var ListenerMixin_1 = __webpack_require__(7);
-var GlobalEmitter_1 = __webpack_require__(21);
-/* Tracks a drag's mouse movement, firing various handlers
-----------------------------------------------------------------------------------------------------------------------*/
-// TODO: use Emitter
-var DragListener = /** @class */ (function () {
- function DragListener(options) {
- this.isInteracting = false;
- this.isDistanceSurpassed = false;
- this.isDelayEnded = false;
- this.isDragging = false;
- this.isTouch = false;
- this.isGeneric = false; // initiated by 'dragstart' (jqui)
- this.shouldCancelTouchScroll = true;
- this.scrollAlwaysKills = false;
- this.isAutoScroll = false;
- // defaults
- this.scrollSensitivity = 30; // pixels from edge for scrolling to start
- this.scrollSpeed = 200; // pixels per second, at maximum speed
- this.scrollIntervalMs = 50; // millisecond wait between scroll increment
- this.options = options || {};
- }
- // Interaction (high-level)
- // -----------------------------------------------------------------------------------------------------------------
- DragListener.prototype.startInteraction = function (ev, extraOptions) {
- if (extraOptions === void 0) { extraOptions = {}; }
- if (ev.type === 'mousedown') {
- if (GlobalEmitter_1.default.get().shouldIgnoreMouse()) {
- return;
- }
- else if (!util_1.isPrimaryMouseButton(ev)) {
- return;
- }
- else {
- ev.preventDefault(); // prevents native selection in most browsers
- }
- }
- if (!this.isInteracting) {
- // process options
- this.delay = util_1.firstDefined(extraOptions.delay, this.options.delay, 0);
- this.minDistance = util_1.firstDefined(extraOptions.distance, this.options.distance, 0);
- this.subjectEl = this.options.subjectEl;
- util_1.preventSelection($('body'));
- this.isInteracting = true;
- this.isTouch = util_1.getEvIsTouch(ev);
- this.isGeneric = ev.type === 'dragstart';
- this.isDelayEnded = false;
- this.isDistanceSurpassed = false;
- this.originX = util_1.getEvX(ev);
- this.originY = util_1.getEvY(ev);
- this.scrollEl = util_1.getScrollParent($(ev.target));
- this.bindHandlers();
- this.initAutoScroll();
- this.handleInteractionStart(ev);
- this.startDelay(ev);
- if (!this.minDistance) {
- this.handleDistanceSurpassed(ev);
- }
- }
- };
- DragListener.prototype.handleInteractionStart = function (ev) {
- this.trigger('interactionStart', ev);
- };
- DragListener.prototype.endInteraction = function (ev, isCancelled) {
- if (this.isInteracting) {
- this.endDrag(ev);
- if (this.delayTimeoutId) {
- clearTimeout(this.delayTimeoutId);
- this.delayTimeoutId = null;
- }
- this.destroyAutoScroll();
- this.unbindHandlers();
- this.isInteracting = false;
- this.handleInteractionEnd(ev, isCancelled);
- util_1.allowSelection($('body'));
- }
- };
- DragListener.prototype.handleInteractionEnd = function (ev, isCancelled) {
- this.trigger('interactionEnd', ev, isCancelled || false);
- };
- // Binding To DOM
- // -----------------------------------------------------------------------------------------------------------------
- DragListener.prototype.bindHandlers = function () {
- // some browsers (Safari in iOS 10) don't allow preventDefault on touch events that are bound after touchstart,
- // so listen to the GlobalEmitter singleton, which is always bound, instead of the document directly.
- var globalEmitter = GlobalEmitter_1.default.get();
- if (this.isGeneric) {
- this.listenTo($(document), {
- drag: this.handleMove,
- dragstop: this.endInteraction
- });
- }
- else if (this.isTouch) {
- this.listenTo(globalEmitter, {
- touchmove: this.handleTouchMove,
- touchend: this.endInteraction,
- scroll: this.handleTouchScroll
- });
- }
- else {
- this.listenTo(globalEmitter, {
- mousemove: this.handleMouseMove,
- mouseup: this.endInteraction
- });
- }
- this.listenTo(globalEmitter, {
- selectstart: util_1.preventDefault,
- contextmenu: util_1.preventDefault // long taps would open menu on Chrome dev tools
- });
- };
- DragListener.prototype.unbindHandlers = function () {
- this.stopListeningTo(GlobalEmitter_1.default.get());
- this.stopListeningTo($(document)); // for isGeneric
- };
- // Drag (high-level)
- // -----------------------------------------------------------------------------------------------------------------
- // extraOptions ignored if drag already started
- DragListener.prototype.startDrag = function (ev, extraOptions) {
- this.startInteraction(ev, extraOptions); // ensure interaction began
- if (!this.isDragging) {
- this.isDragging = true;
- this.handleDragStart(ev);
- }
- };
- DragListener.prototype.handleDragStart = function (ev) {
- this.trigger('dragStart', ev);
- };
- DragListener.prototype.handleMove = function (ev) {
- var dx = util_1.getEvX(ev) - this.originX;
- var dy = util_1.getEvY(ev) - this.originY;
- var minDistance = this.minDistance;
- var distanceSq; // current distance from the origin, squared
- if (!this.isDistanceSurpassed) {
- distanceSq = dx * dx + dy * dy;
- if (distanceSq >= minDistance * minDistance) {
- this.handleDistanceSurpassed(ev);
- }
- }
- if (this.isDragging) {
- this.handleDrag(dx, dy, ev);
- }
- };
- // Called while the mouse is being moved and when we know a legitimate drag is taking place
- DragListener.prototype.handleDrag = function (dx, dy, ev) {
- this.trigger('drag', dx, dy, ev);
- this.updateAutoScroll(ev); // will possibly cause scrolling
- };
- DragListener.prototype.endDrag = function (ev) {
- if (this.isDragging) {
- this.isDragging = false;
- this.handleDragEnd(ev);
- }
- };
- DragListener.prototype.handleDragEnd = function (ev) {
- this.trigger('dragEnd', ev);
- };
- // Delay
- // -----------------------------------------------------------------------------------------------------------------
- DragListener.prototype.startDelay = function (initialEv) {
- var _this = this;
- if (this.delay) {
- this.delayTimeoutId = setTimeout(function () {
- _this.handleDelayEnd(initialEv);
- }, this.delay);
- }
- else {
- this.handleDelayEnd(initialEv);
- }
- };
- DragListener.prototype.handleDelayEnd = function (initialEv) {
- this.isDelayEnded = true;
- if (this.isDistanceSurpassed) {
- this.startDrag(initialEv);
- }
- };
- // Distance
- // -----------------------------------------------------------------------------------------------------------------
- DragListener.prototype.handleDistanceSurpassed = function (ev) {
- this.isDistanceSurpassed = true;
- if (this.isDelayEnded) {
- this.startDrag(ev);
- }
- };
- // Mouse / Touch
- // -----------------------------------------------------------------------------------------------------------------
- DragListener.prototype.handleTouchMove = function (ev) {
- // prevent inertia and touchmove-scrolling while dragging
- if (this.isDragging && this.shouldCancelTouchScroll) {
- ev.preventDefault();
- }
- this.handleMove(ev);
- };
- DragListener.prototype.handleMouseMove = function (ev) {
- this.handleMove(ev);
- };
- // Scrolling (unrelated to auto-scroll)
- // -----------------------------------------------------------------------------------------------------------------
- DragListener.prototype.handleTouchScroll = function (ev) {
- // if the drag is being initiated by touch, but a scroll happens before
- // the drag-initiating delay is over, cancel the drag
- if (!this.isDragging || this.scrollAlwaysKills) {
- this.endInteraction(ev, true); // isCancelled=true
- }
- };
- // Utils
- // -----------------------------------------------------------------------------------------------------------------
- // Triggers a callback. Calls a function in the option hash of the same name.
- // Arguments beyond the first `name` are forwarded on.
- DragListener.prototype.trigger = function (name) {
- var args = [];
- for (var _i = 1; _i < arguments.length; _i++) {
- args[_i - 1] = arguments[_i];
- }
- if (this.options[name]) {
- this.options[name].apply(this, args);
- }
- // makes _methods callable by event name. TODO: kill this
- if (this['_' + name]) {
- this['_' + name].apply(this, args);
- }
- };
- // Auto-scroll
- // -----------------------------------------------------------------------------------------------------------------
- DragListener.prototype.initAutoScroll = function () {
- var scrollEl = this.scrollEl;
- this.isAutoScroll =
- this.options.scroll &&
- scrollEl &&
- !scrollEl.is(window) &&
- !scrollEl.is(document);
- if (this.isAutoScroll) {
- // debounce makes sure rapid calls don't happen
- this.listenTo(scrollEl, 'scroll', util_1.debounce(this.handleDebouncedScroll, 100));
- }
- };
- DragListener.prototype.destroyAutoScroll = function () {
- this.endAutoScroll(); // kill any animation loop
- // remove the scroll handler if there is a scrollEl
- if (this.isAutoScroll) {
- this.stopListeningTo(this.scrollEl, 'scroll'); // will probably get removed by unbindHandlers too :(
- }
- };
- // Computes and stores the bounding rectangle of scrollEl
- DragListener.prototype.computeScrollBounds = function () {
- if (this.isAutoScroll) {
- this.scrollBounds = util_1.getOuterRect(this.scrollEl);
- // TODO: use getClientRect in future. but prevents auto scrolling when on top of scrollbars
- }
- };
- // Called when the dragging is in progress and scrolling should be updated
- DragListener.prototype.updateAutoScroll = function (ev) {
- var sensitivity = this.scrollSensitivity;
- var bounds = this.scrollBounds;
- var topCloseness;
- var bottomCloseness;
- var leftCloseness;
- var rightCloseness;
- var topVel = 0;
- var leftVel = 0;
- if (bounds) {
- // compute closeness to edges. valid range is from 0.0 - 1.0
- topCloseness = (sensitivity - (util_1.getEvY(ev) - bounds.top)) / sensitivity;
- bottomCloseness = (sensitivity - (bounds.bottom - util_1.getEvY(ev))) / sensitivity;
- leftCloseness = (sensitivity - (util_1.getEvX(ev) - bounds.left)) / sensitivity;
- rightCloseness = (sensitivity - (bounds.right - util_1.getEvX(ev))) / sensitivity;
- // translate vertical closeness into velocity.
- // mouse must be completely in bounds for velocity to happen.
- if (topCloseness >= 0 && topCloseness <= 1) {
- topVel = topCloseness * this.scrollSpeed * -1; // negative. for scrolling up
- }
- else if (bottomCloseness >= 0 && bottomCloseness <= 1) {
- topVel = bottomCloseness * this.scrollSpeed;
- }
- // translate horizontal closeness into velocity
- if (leftCloseness >= 0 && leftCloseness <= 1) {
- leftVel = leftCloseness * this.scrollSpeed * -1; // negative. for scrolling left
- }
- else if (rightCloseness >= 0 && rightCloseness <= 1) {
- leftVel = rightCloseness * this.scrollSpeed;
- }
- }
- this.setScrollVel(topVel, leftVel);
- };
- // Sets the speed-of-scrolling for the scrollEl
- DragListener.prototype.setScrollVel = function (topVel, leftVel) {
- this.scrollTopVel = topVel;
- this.scrollLeftVel = leftVel;
- this.constrainScrollVel(); // massages into realistic values
- // if there is non-zero velocity, and an animation loop hasn't already started, then START
- if ((this.scrollTopVel || this.scrollLeftVel) && !this.scrollIntervalId) {
- this.scrollIntervalId = setInterval(util_1.proxy(this, 'scrollIntervalFunc'), // scope to `this`
- this.scrollIntervalMs);
- }
- };
- // Forces scrollTopVel and scrollLeftVel to be zero if scrolling has already gone all the way
- DragListener.prototype.constrainScrollVel = function () {
- var el = this.scrollEl;
- if (this.scrollTopVel < 0) {
- if (el.scrollTop() <= 0) {
- this.scrollTopVel = 0;
- }
- }
- else if (this.scrollTopVel > 0) {
- if (el.scrollTop() + el[0].clientHeight >= el[0].scrollHeight) {
- this.scrollTopVel = 0;
- }
- }
- if (this.scrollLeftVel < 0) {
- if (el.scrollLeft() <= 0) {
- this.scrollLeftVel = 0;
- }
- }
- else if (this.scrollLeftVel > 0) {
- if (el.scrollLeft() + el[0].clientWidth >= el[0].scrollWidth) {
- this.scrollLeftVel = 0;
- }
- }
- };
- // This function gets called during every iteration of the scrolling animation loop
- DragListener.prototype.scrollIntervalFunc = function () {
- var el = this.scrollEl;
- var frac = this.scrollIntervalMs / 1000; // considering animation frequency, what the vel should be mult'd by
- // change the value of scrollEl's scroll
- if (this.scrollTopVel) {
- el.scrollTop(el.scrollTop() + this.scrollTopVel * frac);
- }
- if (this.scrollLeftVel) {
- el.scrollLeft(el.scrollLeft() + this.scrollLeftVel * frac);
- }
- this.constrainScrollVel(); // since the scroll values changed, recompute the velocities
- // if scrolled all the way, which causes the vels to be zero, stop the animation loop
- if (!this.scrollTopVel && !this.scrollLeftVel) {
- this.endAutoScroll();
- }
- };
- // Kills any existing scrolling animation loop
- DragListener.prototype.endAutoScroll = function () {
- if (this.scrollIntervalId) {
- clearInterval(this.scrollIntervalId);
- this.scrollIntervalId = null;
- this.handleScrollEnd();
- }
- };
- // Get called when the scrollEl is scrolled (NOTE: this is delayed via debounce)
- DragListener.prototype.handleDebouncedScroll = function () {
- // recompute all coordinates, but *only* if this is *not* part of our scrolling animation
- if (!this.scrollIntervalId) {
- this.handleScrollEnd();
- }
- };
- DragListener.prototype.handleScrollEnd = function () {
- // Called when scrolling has stopped, whether through auto scroll, or the user scrolling
- };
- return DragListener;
-}());
-exports.default = DragListener;
-ListenerMixin_1.default.mixInto(DragListener);
-
-
-/***/ }),
-/* 55 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var util_1 = __webpack_require__(4);
-var Mixin_1 = __webpack_require__(14);
-/*
-A set of rendering and date-related methods for a visual component comprised of one or more rows of day columns.
-Prerequisite: the object being mixed into needs to be a *Grid*
-*/
-var DayTableMixin = /** @class */ (function (_super) {
- tslib_1.__extends(DayTableMixin, _super);
- function DayTableMixin() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- // Populates internal variables used for date calculation and rendering
- DayTableMixin.prototype.updateDayTable = function () {
- var t = this;
- var view = t.view;
- var calendar = view.calendar;
- var date = calendar.msToUtcMoment(t.dateProfile.renderUnzonedRange.startMs, true);
- var end = calendar.msToUtcMoment(t.dateProfile.renderUnzonedRange.endMs, true);
- var dayIndex = -1;
- var dayIndices = [];
- var dayDates = [];
- var daysPerRow;
- var firstDay;
- var rowCnt;
- while (date.isBefore(end)) {
- if (view.isHiddenDay(date)) {
- dayIndices.push(dayIndex + 0.5); // mark that it's between indices
- }
- else {
- dayIndex++;
- dayIndices.push(dayIndex);
- dayDates.push(date.clone());
- }
- date.add(1, 'days');
- }
- if (this.breakOnWeeks) {
- // count columns until the day-of-week repeats
- firstDay = dayDates[0].day();
- for (daysPerRow = 1; daysPerRow < dayDates.length; daysPerRow++) {
- if (dayDates[daysPerRow].day() === firstDay) {
- break;
- }
- }
- rowCnt = Math.ceil(dayDates.length / daysPerRow);
- }
- else {
- rowCnt = 1;
- daysPerRow = dayDates.length;
- }
- this.dayDates = dayDates;
- this.dayIndices = dayIndices;
- this.daysPerRow = daysPerRow;
- this.rowCnt = rowCnt;
- this.updateDayTableCols();
- };
- // Computes and assigned the colCnt property and updates any options that may be computed from it
- DayTableMixin.prototype.updateDayTableCols = function () {
- this.colCnt = this.computeColCnt();
- this.colHeadFormat =
- this.opt('columnHeaderFormat') ||
- this.opt('columnFormat') || // deprecated
- this.computeColHeadFormat();
- };
- // Determines how many columns there should be in the table
- DayTableMixin.prototype.computeColCnt = function () {
- return this.daysPerRow;
- };
- // Computes the ambiguously-timed moment for the given cell
- DayTableMixin.prototype.getCellDate = function (row, col) {
- return this.dayDates[this.getCellDayIndex(row, col)].clone();
- };
- // Computes the ambiguously-timed date range for the given cell
- DayTableMixin.prototype.getCellRange = function (row, col) {
- var start = this.getCellDate(row, col);
- var end = start.clone().add(1, 'days');
- return { start: start, end: end };
- };
- // Returns the number of day cells, chronologically, from the first of the grid (0-based)
- DayTableMixin.prototype.getCellDayIndex = function (row, col) {
- return row * this.daysPerRow + this.getColDayIndex(col);
- };
- // Returns the numner of day cells, chronologically, from the first cell in *any given row*
- DayTableMixin.prototype.getColDayIndex = function (col) {
- if (this.isRTL) {
- return this.colCnt - 1 - col;
- }
- else {
- return col;
- }
- };
- // 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.
- DayTableMixin.prototype.getDateDayIndex = function (date) {
- var dayIndices = this.dayIndices;
- var dayOffset = date.diff(this.dayDates[0], 'days');
- if (dayOffset < 0) {
- return dayIndices[0] - 1;
- }
- else if (dayOffset >= dayIndices.length) {
- return dayIndices[dayIndices.length - 1] + 1;
- }
- else {
- return dayIndices[dayOffset];
- }
- };
- /* Options
- ------------------------------------------------------------------------------------------------------------------*/
- // Computes a default column header formatting string if `colFormat` is not explicitly defined
- DayTableMixin.prototype.computeColHeadFormat = function () {
- // 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 (this.rowCnt > 1 || this.colCnt > 10) {
- return 'ddd'; // "Sat"
- }
- else if (this.colCnt > 1) {
- return this.opt('dayOfMonthFormat'); // "Sat 12/10"
- }
- else {
- return 'dddd'; // "Saturday"
- }
- };
- /* Slicing
- ------------------------------------------------------------------------------------------------------------------*/
- // Slices up a date range into a segment for every week-row it intersects with
- DayTableMixin.prototype.sliceRangeByRow = function (unzonedRange) {
- var daysPerRow = this.daysPerRow;
- var normalRange = this.view.computeDayRange(unzonedRange); // make whole-day range, considering nextDayThreshold
- var rangeFirst = this.getDateDayIndex(normalRange.start); // inclusive first index
- var rangeLast = this.getDateDayIndex(normalRange.end.clone().subtract(1, 'days')); // inclusive last index
- var segs = [];
- var row;
- var rowFirst;
- var rowLast; // inclusive day-index range for current row
- var segFirst;
- var segLast; // inclusive day-index range for segment
- for (row = 0; row < this.rowCnt; row++) {
- rowFirst = row * daysPerRow;
- rowLast = rowFirst + daysPerRow - 1;
- // intersect segment's offset range with the row's
- segFirst = Math.max(rangeFirst, rowFirst);
- segLast = Math.min(rangeLast, rowLast);
- // deal with in-between indices
- segFirst = Math.ceil(segFirst); // in-between starts round to next cell
- segLast = Math.floor(segLast); // in-between ends round to prev cell
- if (segFirst <= segLast) {
- segs.push({
- row: row,
- // normalize to start of row
- firstRowDayIndex: segFirst - rowFirst,
- lastRowDayIndex: segLast - rowFirst,
- // must be matching integers to be the segment's start/end
- isStart: segFirst === rangeFirst,
- isEnd: segLast === rangeLast
- });
- }
- }
- return segs;
- };
- // Slices up a date range into a segment for every day-cell it intersects with.
- // TODO: make more DRY with sliceRangeByRow somehow.
- DayTableMixin.prototype.sliceRangeByDay = function (unzonedRange) {
- var daysPerRow = this.daysPerRow;
- var normalRange = this.view.computeDayRange(unzonedRange); // make whole-day range, considering nextDayThreshold
- var rangeFirst = this.getDateDayIndex(normalRange.start); // inclusive first index
- var rangeLast = this.getDateDayIndex(normalRange.end.clone().subtract(1, 'days')); // inclusive last index
- var segs = [];
- var row;
- var rowFirst;
- var rowLast; // inclusive day-index range for current row
- var i;
- var segFirst;
- var segLast; // inclusive day-index range for segment
- for (row = 0; row < this.rowCnt; row++) {
- rowFirst = row * daysPerRow;
- rowLast = rowFirst + daysPerRow - 1;
- for (i = rowFirst; i <= rowLast; i++) {
- // intersect segment's offset range with the row's
- segFirst = Math.max(rangeFirst, i);
- segLast = Math.min(rangeLast, i);
- // deal with in-between indices
- segFirst = Math.ceil(segFirst); // in-between starts round to next cell
- segLast = Math.floor(segLast); // in-between ends round to prev cell
- if (segFirst <= segLast) {
- segs.push({
- row: row,
- // normalize to start of row
- firstRowDayIndex: segFirst - rowFirst,
- lastRowDayIndex: segLast - rowFirst,
- // must be matching integers to be the segment's start/end
- isStart: segFirst === rangeFirst,
- isEnd: segLast === rangeLast
- });
- }
- }
- }
- return segs;
- };
- /* Header Rendering
- ------------------------------------------------------------------------------------------------------------------*/
- DayTableMixin.prototype.renderHeadHtml = function () {
- var theme = this.view.calendar.theme;
- return '' +
- '<div class="fc-row ' + theme.getClass('headerRow') + '">' +
- '<table class="' + theme.getClass('tableGrid') + '">' +
- '<thead>' +
- this.renderHeadTrHtml() +
- '</thead>' +
- '</table>' +
- '</div>';
- };
- DayTableMixin.prototype.renderHeadIntroHtml = function () {
- return this.renderIntroHtml(); // fall back to generic
- };
- DayTableMixin.prototype.renderHeadTrHtml = function () {
- return '' +
- '<tr>' +
- (this.isRTL ? '' : this.renderHeadIntroHtml()) +
- this.renderHeadDateCellsHtml() +
- (this.isRTL ? this.renderHeadIntroHtml() : '') +
- '</tr>';
- };
- DayTableMixin.prototype.renderHeadDateCellsHtml = function () {
- var htmls = [];
- var col;
- var date;
- for (col = 0; col < this.colCnt; col++) {
- date = this.getCellDate(0, col);
- htmls.push(this.renderHeadDateCellHtml(date));
- }
- return htmls.join('');
- };
- // TODO: when internalApiVersion, accept an object for HTML attributes
- // (colspan should be no different)
- DayTableMixin.prototype.renderHeadDateCellHtml = function (date, colspan, otherAttrs) {
- var t = this;
- var view = t.view;
- var isDateValid = t.dateProfile.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow.
- var classNames = [
- 'fc-day-header',
- view.calendar.theme.getClass('widgetHeader')
- ];
- var innerHtml;
- if (typeof t.opt('columnHeaderHtml') === 'function') {
- innerHtml = t.opt('columnHeaderHtml')(date);
- }
- else if (typeof t.opt('columnHeaderText') === 'function') {
- innerHtml = util_1.htmlEscape(t.opt('columnHeaderText')(date));
- }
- else {
- innerHtml = util_1.htmlEscape(date.format(t.colHeadFormat));
- }
- // if only one row of days, the classNames on the header can represent the specific days beneath
- if (t.rowCnt === 1) {
- classNames = classNames.concat(
- // includes the day-of-week class
- // noThemeHighlight=true (don't highlight the header)
- t.getDayClasses(date, true));
- }
- else {
- classNames.push('fc-' + util_1.dayIDs[date.day()]); // only add the day-of-week class
- }
- return '' +
- '<th class="' + classNames.join(' ') + '"' +
- ((isDateValid && t.rowCnt) === 1 ?
- ' data-date="' + date.format('YYYY-MM-DD') + '"' :
- '') +
- (colspan > 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)
- view.buildGotoAnchorHtml({ date: date, forceOff: t.rowCnt > 1 || t.colCnt === 1 }, innerHtml) :
- // if not valid, display text, but no link
- innerHtml) +
- '</th>';
- };
- /* Background Rendering
- ------------------------------------------------------------------------------------------------------------------*/
- DayTableMixin.prototype.renderBgTrHtml = function (row) {
- return '' +
- '<tr>' +
- (this.isRTL ? '' : this.renderBgIntroHtml(row)) +
- this.renderBgCellsHtml(row) +
- (this.isRTL ? this.renderBgIntroHtml(row) : '') +
- '</tr>';
- };
- DayTableMixin.prototype.renderBgIntroHtml = function (row) {
- return this.renderIntroHtml(); // fall back to generic
- };
- DayTableMixin.prototype.renderBgCellsHtml = function (row) {
- var htmls = [];
- var col;
- var date;
- for (col = 0; col < this.colCnt; col++) {
- date = this.getCellDate(row, col);
- htmls.push(this.renderBgCellHtml(date));
- }
- return htmls.join('');
- };
- DayTableMixin.prototype.renderBgCellHtml = function (date, otherAttrs) {
- var t = this;
- var view = t.view;
- var isDateValid = t.dateProfile.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow.
- var classes = t.getDayClasses(date);
- classes.unshift('fc-day', view.calendar.theme.getClass('widgetContent'));
- return '<td class="' + classes.join(' ') + '"' +
- (isDateValid ?
- ' data-date="' + date.format('YYYY-MM-DD') + '"' : // if date has a time, won't format it
- '') +
- (otherAttrs ?
- ' ' + otherAttrs :
- '') +
- '></td>';
- };
- /* Generic
- ------------------------------------------------------------------------------------------------------------------*/
- DayTableMixin.prototype.renderIntroHtml = function () {
- // Generates the default HTML intro for any row. User classes should override
- };
- // TODO: a generic method for dealing with <tr>, RTL, intro
- // when increment internalApiVersion
- // wrapTr (scheduler)
- /* Utils
- ------------------------------------------------------------------------------------------------------------------*/
- // Applies the generic "intro" and "outro" HTML to the given cells.
- // Intro means the leftmost cell when the calendar is LTR and the rightmost cell when RTL. Vice-versa for outro.
- DayTableMixin.prototype.bookendCells = function (trEl) {
- var introHtml = this.renderIntroHtml();
- if (introHtml) {
- if (this.isRTL) {
- trEl.append(introHtml);
- }
- else {
- trEl.prepend(introHtml);
- }
- }
- };
- return DayTableMixin;
-}(Mixin_1.default));
-exports.default = DayTableMixin;
-
-
-/***/ }),
-/* 56 */
-/***/ (function(module, exports) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var BusinessHourRenderer = /** @class */ (function () {
- /*
- component implements:
- - eventRangesToEventFootprints
- - eventFootprintsToSegs
- */
- function BusinessHourRenderer(component, fillRenderer) {
- this.component = component;
- this.fillRenderer = fillRenderer;
- }
- BusinessHourRenderer.prototype.render = function (businessHourGenerator) {
- var component = this.component;
- var unzonedRange = component._getDateProfile().activeUnzonedRange;
- var eventInstanceGroup = businessHourGenerator.buildEventInstanceGroup(component.hasAllDayBusinessHours, unzonedRange);
- var eventFootprints = eventInstanceGroup ?
- component.eventRangesToEventFootprints(eventInstanceGroup.sliceRenderRanges(unzonedRange)) :
- [];
- this.renderEventFootprints(eventFootprints);
- };
- BusinessHourRenderer.prototype.renderEventFootprints = function (eventFootprints) {
- var segs = this.component.eventFootprintsToSegs(eventFootprints);
- this.renderSegs(segs);
- this.segs = segs;
- };
- BusinessHourRenderer.prototype.renderSegs = function (segs) {
- if (this.fillRenderer) {
- this.fillRenderer.renderSegs('businessHours', segs, {
- getClasses: function (seg) {
- return ['fc-nonbusiness', 'fc-bgevent'];
- }
- });
- }
- };
- BusinessHourRenderer.prototype.unrender = function () {
- if (this.fillRenderer) {
- this.fillRenderer.unrender('businessHours');
- }
- this.segs = null;
- };
- BusinessHourRenderer.prototype.getSegs = function () {
- return this.segs || [];
- };
- return BusinessHourRenderer;
-}());
-exports.default = BusinessHourRenderer;
-
-
-/***/ }),
-/* 57 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var $ = __webpack_require__(3);
-var util_1 = __webpack_require__(4);
-var FillRenderer = /** @class */ (function () {
- function FillRenderer(component) {
- this.fillSegTag = 'div';
- this.component = component;
- this.elsByFill = {};
- }
- FillRenderer.prototype.renderFootprint = function (type, componentFootprint, props) {
- this.renderSegs(type, this.component.componentFootprintToSegs(componentFootprint), props);
- };
- FillRenderer.prototype.renderSegs = function (type, segs, props) {
- var els;
- segs = this.buildSegEls(type, segs, props); // assignes `.el` to each seg. returns successfully rendered segs
- els = this.attachSegEls(type, segs);
- if (els) {
- this.reportEls(type, els);
- }
- return segs;
- };
- // Unrenders a specific type of fill that is currently rendered on the grid
- FillRenderer.prototype.unrender = function (type) {
- var el = this.elsByFill[type];
- if (el) {
- el.remove();
- delete this.elsByFill[type];
- }
- };
- // 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.buildSegEls = function (type, segs, props) {
- var _this = this;
- var html = '';
- var renderedSegs = [];
- var i;
- if (segs.length) {
- // build a large concatenation of segment HTML
- for (i = 0; i < segs.length; i++) {
- html += this.buildSegHtml(type, segs[i], props);
- }
- // Grab individual elements from the combined HTML string. Use each as the default rendering.
- // Then, compute the 'el' for each segment.
- $(html).each(function (i, node) {
- var seg = segs[i];
- var el = $(node);
- // allow custom filter methods per-type
- if (props.filterEl) {
- el = props.filterEl(seg, el);
- }
- if (el) {
- el = $(el); // allow custom filter to return raw DOM node
- // correct element type? (would be bad if a non-TD were inserted into a table for example)
- if (el.is(_this.fillSegTag)) {
- seg.el = el;
- renderedSegs.push(seg);
- }
- }
- });
- }
- return renderedSegs;
- };
- // Builds the HTML needed for one fill segment. Generic enough to work with different types.
- FillRenderer.prototype.buildSegHtml = function (type, seg, props) {
- // custom hooks per-type
- var classes = props.getClasses ? props.getClasses(seg) : [];
- var css = util_1.cssToStr(props.getCss ? props.getCss(seg) : {});
- return '<' + this.fillSegTag +
- (classes.length ? ' class="' + classes.join(' ') + '"' : '') +
- (css ? ' style="' + css + '"' : '') +
- ' />';
- };
- // Should return wrapping DOM structure
- FillRenderer.prototype.attachSegEls = function (type, segs) {
- // subclasses must implement
- };
- FillRenderer.prototype.reportEls = function (type, nodes) {
- if (this.elsByFill[type]) {
- this.elsByFill[type] = this.elsByFill[type].add(nodes);
- }
- else {
- this.elsByFill[type] = $(nodes);
- }
- };
- return FillRenderer;
-}());
-exports.default = FillRenderer;
-
-
-/***/ }),
-/* 58 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var SingleEventDef_1 = __webpack_require__(13);
-var EventFootprint_1 = __webpack_require__(36);
-var EventSource_1 = __webpack_require__(6);
-var HelperRenderer = /** @class */ (function () {
- function HelperRenderer(component, eventRenderer) {
- this.view = component._getView();
- this.component = component;
- this.eventRenderer = eventRenderer;
- }
- HelperRenderer.prototype.renderComponentFootprint = function (componentFootprint) {
- this.renderEventFootprints([
- this.fabricateEventFootprint(componentFootprint)
- ]);
- };
- HelperRenderer.prototype.renderEventDraggingFootprints = function (eventFootprints, sourceSeg, isTouch) {
- this.renderEventFootprints(eventFootprints, sourceSeg, 'fc-dragging', isTouch ? null : this.view.opt('dragOpacity'));
- };
- HelperRenderer.prototype.renderEventResizingFootprints = function (eventFootprints, sourceSeg, isTouch) {
- this.renderEventFootprints(eventFootprints, sourceSeg, 'fc-resizing');
- };
- HelperRenderer.prototype.renderEventFootprints = function (eventFootprints, sourceSeg, extraClassNames, opacity) {
- var segs = this.component.eventFootprintsToSegs(eventFootprints);
- var classNames = 'fc-helper ' + (extraClassNames || '');
- var i;
- // assigns each seg's el and returns a subset of segs that were rendered
- segs = this.eventRenderer.renderFgSegEls(segs);
- for (i = 0; i < segs.length; i++) {
- segs[i].el.addClass(classNames);
- }
- if (opacity != null) {
- for (i = 0; i < segs.length; i++) {
- segs[i].el.css('opacity', opacity);
- }
- }
- this.helperEls = this.renderSegs(segs, sourceSeg);
- };
- /*
- Must return all mock event elements
- */
- HelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {
- // Subclasses must implement
- };
- HelperRenderer.prototype.unrender = function () {
- if (this.helperEls) {
- this.helperEls.remove();
- this.helperEls = null;
- }
- };
- HelperRenderer.prototype.fabricateEventFootprint = function (componentFootprint) {
- var calendar = this.view.calendar;
- var eventDateProfile = calendar.footprintToDateProfile(componentFootprint);
- var dummyEvent = new SingleEventDef_1.default(new EventSource_1.default(calendar));
- var dummyInstance;
- dummyEvent.dateProfile = eventDateProfile;
- dummyInstance = dummyEvent.buildInstance();
- return new EventFootprint_1.default(componentFootprint, dummyEvent, dummyInstance);
- };
- return HelperRenderer;
-}());
-exports.default = HelperRenderer;
-
-
-/***/ }),
-/* 59 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var GlobalEmitter_1 = __webpack_require__(21);
-var Interaction_1 = __webpack_require__(15);
-var EventPointing = /** @class */ (function (_super) {
- tslib_1.__extends(EventPointing, _super);
- function EventPointing() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- /*
- component must implement:
- - publiclyTrigger
- */
- EventPointing.prototype.bindToEl = function (el) {
- var component = this.component;
- component.bindSegHandlerToEl(el, 'click', this.handleClick.bind(this));
- component.bindSegHandlerToEl(el, 'mouseenter', this.handleMouseover.bind(this));
- component.bindSegHandlerToEl(el, 'mouseleave', this.handleMouseout.bind(this));
- };
- EventPointing.prototype.handleClick = function (seg, ev) {
- var res = this.component.publiclyTrigger('eventClick', {
- context: seg.el[0],
- args: [seg.footprint.getEventLegacy(), ev, this.view]
- });
- if (res === false) {
- ev.preventDefault();
- }
- };
- // Updates internal state and triggers handlers for when an event element is moused over
- EventPointing.prototype.handleMouseover = function (seg, ev) {
- if (!GlobalEmitter_1.default.get().shouldIgnoreMouse() &&
- !this.mousedOverSeg) {
- this.mousedOverSeg = seg;
- // TODO: move to EventSelecting's responsibility
- if (this.view.isEventDefResizable(seg.footprint.eventDef)) {
- seg.el.addClass('fc-allow-mouse-resize');
- }
- this.component.publiclyTrigger('eventMouseover', {
- context: seg.el[0],
- args: [seg.footprint.getEventLegacy(), ev, this.view]
- });
- }
- };
- // Updates internal state and triggers handlers for when an event element is moused out.
- // Can be given no arguments, in which case it will mouseout the segment that was previously moused over.
- EventPointing.prototype.handleMouseout = function (seg, ev) {
- if (this.mousedOverSeg) {
- this.mousedOverSeg = null;
- // TODO: move to EventSelecting's responsibility
- if (this.view.isEventDefResizable(seg.footprint.eventDef)) {
- seg.el.removeClass('fc-allow-mouse-resize');
- }
- this.component.publiclyTrigger('eventMouseout', {
- context: seg.el[0],
- args: [
- seg.footprint.getEventLegacy(),
- ev || {},
- this.view
- ]
- });
- }
- };
- EventPointing.prototype.end = function () {
- if (this.mousedOverSeg) {
- this.handleMouseout(this.mousedOverSeg);
- }
- };
- return EventPointing;
-}(Interaction_1.default));
-exports.default = EventPointing;
-
-
-/***/ }),
-/* 60 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var Mixin_1 = __webpack_require__(14);
-var DateClicking_1 = __webpack_require__(245);
-var DateSelecting_1 = __webpack_require__(225);
-var EventPointing_1 = __webpack_require__(59);
-var EventDragging_1 = __webpack_require__(224);
-var EventResizing_1 = __webpack_require__(223);
-var ExternalDropping_1 = __webpack_require__(222);
-var StandardInteractionsMixin = /** @class */ (function (_super) {
- tslib_1.__extends(StandardInteractionsMixin, _super);
- function StandardInteractionsMixin() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- return StandardInteractionsMixin;
-}(Mixin_1.default));
-exports.default = StandardInteractionsMixin;
-StandardInteractionsMixin.prototype.dateClickingClass = DateClicking_1.default;
-StandardInteractionsMixin.prototype.dateSelectingClass = DateSelecting_1.default;
-StandardInteractionsMixin.prototype.eventPointingClass = EventPointing_1.default;
-StandardInteractionsMixin.prototype.eventDraggingClass = EventDragging_1.default;
-StandardInteractionsMixin.prototype.eventResizingClass = EventResizing_1.default;
-StandardInteractionsMixin.prototype.externalDroppingClass = ExternalDropping_1.default;
-
-
-/***/ }),
-/* 61 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var $ = __webpack_require__(3);
-var util_1 = __webpack_require__(4);
-var CoordCache_1 = __webpack_require__(53);
-var Popover_1 = __webpack_require__(249);
-var UnzonedRange_1 = __webpack_require__(5);
-var ComponentFootprint_1 = __webpack_require__(12);
-var EventFootprint_1 = __webpack_require__(36);
-var BusinessHourRenderer_1 = __webpack_require__(56);
-var StandardInteractionsMixin_1 = __webpack_require__(60);
-var InteractiveDateComponent_1 = __webpack_require__(40);
-var DayTableMixin_1 = __webpack_require__(55);
-var DayGridEventRenderer_1 = __webpack_require__(250);
-var DayGridHelperRenderer_1 = __webpack_require__(251);
-var DayGridFillRenderer_1 = __webpack_require__(252);
-/* A component that renders a grid of whole-days that runs horizontally. There can be multiple rows, one per week.
-----------------------------------------------------------------------------------------------------------------------*/
-var DayGrid = /** @class */ (function (_super) {
- tslib_1.__extends(DayGrid, _super);
- function DayGrid(view) {
- var _this = _super.call(this, view) || this;
- _this.cellWeekNumbersVisible = false; // display week numbers in day cell?
- _this.bottomCoordPadding = 0; // hack for extending the hit area for the last row of the coordinate grid
- // isRigid determines whether the individual rows should ignore the contents and be a constant height.
- // Relies on the view's colCnt and rowCnt. In the future, this component should probably be self-sufficient.
- _this.isRigid = false;
- _this.hasAllDayBusinessHours = true;
- return _this;
- }
- // Slices up the given span (unzoned start/end with other misc data) into an array of segments
- DayGrid.prototype.componentFootprintToSegs = function (componentFootprint) {
- var segs = this.sliceRangeByRow(componentFootprint.unzonedRange);
- var i;
- var seg;
- for (i = 0; i < segs.length; i++) {
- seg = segs[i];
- if (this.isRTL) {
- seg.leftCol = this.daysPerRow - 1 - seg.lastRowDayIndex;
- seg.rightCol = this.daysPerRow - 1 - seg.firstRowDayIndex;
- }
- else {
- seg.leftCol = seg.firstRowDayIndex;
- seg.rightCol = seg.lastRowDayIndex;
- }
- }
- return segs;
- };
- /* Date Rendering
- ------------------------------------------------------------------------------------------------------------------*/
- DayGrid.prototype.renderDates = function (dateProfile) {
- this.dateProfile = dateProfile;
- this.updateDayTable();
- this.renderGrid();
- };
- DayGrid.prototype.unrenderDates = function () {
- this.removeSegPopover();
- };
- // Renders the rows and columns into the component's `this.el`, which should already be assigned.
- DayGrid.prototype.renderGrid = function () {
- var view = this.view;
- var rowCnt = this.rowCnt;
- var colCnt = this.colCnt;
- var html = '';
- var row;
- var col;
- if (this.headContainerEl) {
- this.headContainerEl.html(this.renderHeadHtml());
- }
- for (row = 0; row < rowCnt; row++) {
- html += this.renderDayRowHtml(row, this.isRigid);
- }
- this.el.html(html);
- this.rowEls = this.el.find('.fc-row');
- this.cellEls = this.el.find('.fc-day, .fc-disabled-day');
- this.rowCoordCache = new CoordCache_1.default({
- els: this.rowEls,
- isVertical: true
- });
- this.colCoordCache = new CoordCache_1.default({
- els: this.cellEls.slice(0, this.colCnt),
- isHorizontal: true
- });
- // trigger dayRender with each cell's element
- for (row = 0; row < rowCnt; row++) {
- for (col = 0; col < colCnt; col++) {
- this.publiclyTrigger('dayRender', {
- context: view,
- args: [
- this.getCellDate(row, col),
- this.getCellEl(row, col),
- view
- ]
- });
- }
- }
- };
- // 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.view.calendar.theme;
- var classes = ['fc-row', 'fc-week', theme.getClass('dayRow')];
- if (isRigid) {
- classes.push('fc-rigid');
- }
- return '' +
- '<div class="' + classes.join(' ') + '">' +
- '<div class="fc-bg">' +
- '<table class="' + theme.getClass('tableGrid') + '">' +
- this.renderBgTrHtml(row) +
- '</table>' +
- '</div>' +
- '<div class="fc-content-skeleton">' +
- '<table>' +
- (this.getIsNumbersVisible() ?
- '<thead>' +
- this.renderNumberTrHtml(row) +
- '</thead>' :
- '') +
- '</table>' +
- '</div>' +
- '</div>';
- };
- DayGrid.prototype.getIsNumbersVisible = function () {
- return this.getIsDayNumbersVisible() || this.cellWeekNumbersVisible;
- };
- DayGrid.prototype.getIsDayNumbersVisible = function () {
- return this.rowCnt > 1;
- };
- /* Grid Number Rendering
- ------------------------------------------------------------------------------------------------------------------*/
- DayGrid.prototype.renderNumberTrHtml = function (row) {
- return '' +
- '<tr>' +
- (this.isRTL ? '' : this.renderNumberIntroHtml(row)) +
- this.renderNumberCellsHtml(row) +
- (this.isRTL ? this.renderNumberIntroHtml(row) : '') +
- '</tr>';
- };
- DayGrid.prototype.renderNumberIntroHtml = function (row) {
- return this.renderIntroHtml();
- };
- DayGrid.prototype.renderNumberCellsHtml = function (row) {
- var htmls = [];
- var col;
- var date;
- for (col = 0; col < this.colCnt; col++) {
- date = this.getCellDate(row, col);
- htmls.push(this.renderNumberCellHtml(date));
- }
- return htmls.join('');
- };
- // Generates the HTML for the <td>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 view = this.view;
- var html = '';
- var isDateValid = this.dateProfile.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow.
- var isDayNumberVisible = this.getIsDayNumbersVisible() && isDateValid;
- var classes;
- var weekCalcFirstDoW;
- if (!isDayNumberVisible && !this.cellWeekNumbersVisible) {
- // no numbers in day cell (week number must be along the side)
- return '<td/>'; // will create an empty space above events :(
- }
- classes = this.getDayClasses(date);
- classes.unshift('fc-day-top');
- if (this.cellWeekNumbersVisible) {
- // To determine the day of week number change under ISO, we cannot
- // rely on moment.js methods such as firstDayOfWeek() or weekday(),
- // because they rely on the locale's dow (possibly overridden by
- // our firstDay option), which may not be Monday. We cannot change
- // dow, because that would affect the calendar start day as well.
- if (date._locale._fullCalendar_weekCalc === 'ISO') {
- weekCalcFirstDoW = 1; // Monday by ISO 8601 definition
- }
- else {
- weekCalcFirstDoW = date._locale.firstDayOfWeek();
- }
- }
- html += '<td class="' + classes.join(' ') + '"' +
- (isDateValid ?
- ' data-date="' + date.format() + '"' :
- '') +
- '>';
- if (this.cellWeekNumbersVisible && (date.day() === weekCalcFirstDoW)) {
- html += view.buildGotoAnchorHtml({ date: date, type: 'week' }, { 'class': 'fc-week-number' }, date.format('w') // inner HTML
- );
- }
- if (isDayNumberVisible) {
- html += view.buildGotoAnchorHtml(date, { 'class': 'fc-day-number' }, date.format('D') // inner HTML
- );
- }
- html += '</td>';
- return html;
- };
- /* Hit System
- ------------------------------------------------------------------------------------------------------------------*/
- DayGrid.prototype.prepareHits = function () {
- this.colCoordCache.build();
- this.rowCoordCache.build();
- this.rowCoordCache.bottoms[this.rowCnt - 1] += this.bottomCoordPadding; // hack
- };
- DayGrid.prototype.releaseHits = function () {
- this.colCoordCache.clear();
- this.rowCoordCache.clear();
- };
- DayGrid.prototype.queryHit = function (leftOffset, topOffset) {
- if (this.colCoordCache.isLeftInBounds(leftOffset) && this.rowCoordCache.isTopInBounds(topOffset)) {
- var col = this.colCoordCache.getHorizontalIndex(leftOffset);
- var row = this.rowCoordCache.getVerticalIndex(topOffset);
- if (row != null && col != null) {
- return this.getCellHit(row, col);
- }
- }
- };
- DayGrid.prototype.getHitFootprint = function (hit) {
- var range = this.getCellRange(hit.row, hit.col);
- return new ComponentFootprint_1.default(new UnzonedRange_1.default(range.start, range.end), true // all-day?
- );
- };
- DayGrid.prototype.getHitEl = function (hit) {
- return this.getCellEl(hit.row, hit.col);
- };
- /* Cell System
- ------------------------------------------------------------------------------------------------------------------*/
- // FYI: the first column is the leftmost column, regardless of date
- DayGrid.prototype.getCellHit = function (row, col) {
- return {
- row: row,
- col: col,
- component: this,
- left: this.colCoordCache.getLeftOffset(col),
- right: this.colCoordCache.getRightOffset(col),
- top: this.rowCoordCache.getTopOffset(row),
- bottom: this.rowCoordCache.getBottomOffset(row)
- };
- };
- DayGrid.prototype.getCellEl = function (row, col) {
- return this.cellEls.eq(row * this.colCnt + col);
- };
- /* Event Rendering
- ------------------------------------------------------------------------------------------------------------------*/
- // Unrenders all events currently rendered on the grid
- DayGrid.prototype.executeEventUnrender = function () {
- this.removeSegPopover(); // removes the "more.." events popover
- _super.prototype.executeEventUnrender.call(this);
- };
- // Retrieves all rendered segment objects currently rendered on the grid
- DayGrid.prototype.getOwnEventSegs = function () {
- // append the segments from the "more..." popover
- return _super.prototype.getOwnEventSegs.call(this).concat(this.popoverSegs || []);
- };
- /* Event Drag Visualization
- ------------------------------------------------------------------------------------------------------------------*/
- // Renders a visual indication of an event or external element being dragged.
- // `eventLocation` has zoned start and end (optional)
- DayGrid.prototype.renderDrag = function (eventFootprints, seg, isTouch) {
- var i;
- for (i = 0; i < eventFootprints.length; i++) {
- this.renderHighlight(eventFootprints[i].componentFootprint);
- }
- // render drags from OTHER components as helpers
- if (eventFootprints.length && seg && seg.component !== this) {
- this.helperRenderer.renderEventDraggingFootprints(eventFootprints, seg, isTouch);
- return true; // signal helpers rendered
- }
- };
- // Unrenders any visual indication of a hovering event
- DayGrid.prototype.unrenderDrag = function () {
- this.unrenderHighlight();
- this.helperRenderer.unrender();
- };
- /* Event Resize Visualization
- ------------------------------------------------------------------------------------------------------------------*/
- // Renders a visual indication of an event being resized
- DayGrid.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {
- var i;
- for (i = 0; i < eventFootprints.length; i++) {
- this.renderHighlight(eventFootprints[i].componentFootprint);
- }
- this.helperRenderer.renderEventResizingFootprints(eventFootprints, seg, isTouch);
- };
- // Unrenders a visual indication of an event being resized
- DayGrid.prototype.unrenderEventResize = function () {
- this.unrenderHighlight();
- this.helperRenderer.unrender();
- };
- /* 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.eq(row); // the containing "fake" row div
- var rowHeight = rowEl.height(); // TODO: cache somehow?
- var trEls = this.eventRenderer.rowStructs[row].tbodyEl.children();
- var i;
- var trEl;
- var trHeight;
- function iterInnerHeights(i, childNode) {
- trHeight = Math.max(trHeight, $(childNode).outerHeight());
- }
- // Reveal one level <tr> at a time and stop when we find one out of bounds
- for (i = 0; i < trEls.length; i++) {
- trEl = trEls.eq(i).removeClass('fc-limited'); // reset to original state (reveal)
- // with rowspans>1 and IE8, trEl.outerHeight() would return the height of the largest cell,
- // so instead, find the tallest inner content element.
- trHeight = 0;
- trEl.find('> td > :first-child').each(iterInnerHeights);
- if (trEl.position().top + trHeight > rowHeight) {
- 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 rowStruct = this.eventRenderer.rowStructs[row];
- var moreNodes = []; // array of "more" <a> links and <td> 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 <td> jQuery elements in the row
- var limitedNodes; // array of temporarily hidden level <tr> and segment <td> 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" <td> 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 = $('<div/>').append(moreLink);
- td.append(moreWrap);
- moreNodes.push(moreWrap[0]);
- }
- col++;
- }
- };
- if (levelLimit && levelLimit < rowStruct.segLevels.length) {
- levelSegs = rowStruct.segLevels[levelLimit - 1];
- cellMatrix = rowStruct.cellMatrix;
- limitedNodes = rowStruct.tbodyEl.children().slice(levelLimit) // get level <tr> elements past the limit
- .addClass('fc-limited').get(); // 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];
- emptyCellsUntil(seg.leftCol); // process empty cells before the segment
- // determine *all* segments below `seg` that occupy the same columns
- colSegsBelow = [];
- totalSegsBelow = 0;
- while (col <= seg.rightCol) {
- segsBelow = this.getCellSegs(row, col, levelLimit);
- colSegsBelow.push(segsBelow);
- totalSegsBelow += segsBelow.length;
- col++;
- }
- if (totalSegsBelow) {
- td = cellMatrix[levelLimit - 1][seg.leftCol]; // the segment's parent cell
- rowspan = td.attr('rowspan') || 1;
- segMoreNodes = [];
- // make a replacement <td> for each column the segment occupies. will be one for each colspan
- for (j = 0; j < colSegsBelow.length; j++) {
- moreTd = $('<td class="fc-more-cell"/>').attr('rowspan', rowspan);
- segsBelow = colSegsBelow[j];
- moreLink = this.renderMoreLink(row, seg.leftCol + j, [seg].concat(segsBelow) // count seg as hidden too
- );
- moreWrap = $('<div/>').append(moreLink);
- moreTd.append(moreWrap);
- segMoreNodes.push(moreTd[0]);
- moreNodes.push(moreTd[0]);
- }
- td.addClass('fc-limited').after($(segMoreNodes)); // hide original <td> and inject replacements
- limitedNodes.push(td[0]);
- }
- }
- 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.remove();
- rowStruct.moreEls = null;
- }
- if (rowStruct.limitedEls) {
- rowStruct.limitedEls.removeClass('fc-limited');
- rowStruct.limitedEls = null;
- }
- };
- // Renders an <a> 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 view = this.view;
- return $('<a class="fc-more"/>')
- .text(this.getMoreLinkText(hiddenSegs.length))
- .on('click', function (ev) {
- var clickOption = _this.opt('eventLimitClick');
- var date = _this.getCellDate(row, col);
- 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 = _this.publiclyTrigger('eventLimitClick', {
- context: view,
- args: [
- {
- date: date.clone(),
- dayEl: dayEl,
- moreEl: moreEl,
- segs: reslicedAllSegs,
- hiddenSegs: reslicedHiddenSegs
- },
- ev,
- view
- ]
- });
- }
- if (clickOption === 'popover') {
- _this.showSegPopover(row, col, moreEl, reslicedAllSegs);
- }
- else if (typeof clickOption === 'string') {
- view.calendar.zoomTo(date, clickOption);
- }
- });
- };
- // Reveals the popover that displays all events within a cell
- DayGrid.prototype.showSegPopover = function (row, col, moreLink, segs) {
- var _this = this;
- var view = this.view;
- var moreWrap = moreLink.parent(); // the <div> wrapper around the <a>
- 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.eq(row); // will align with top of row
- }
- options = {
- className: 'fc-more-popover ' + view.calendar.theme.getClass('popover'),
- content: this.renderSegPopoverContent(row, col, segs),
- parentEl: view.el,
- top: topEl.offset().top,
- autoHide: true,
- viewportConstrain: this.opt('popoverViewportConstrain'),
- hide: function () {
- // kill everything when the popover is hidden
- // notify events to be removed
- if (_this.popoverSegs) {
- _this.triggerBeforeEventSegsDestroyed(_this.popoverSegs);
- }
- _this.segPopover.removeElement();
- _this.segPopover = null;
- _this.popoverSegs = null;
- }
- };
- // Determine horizontal coordinate.
- // We use the moreWrap instead of the <td> to avoid border confusion.
- if (this.isRTL) {
- options.right = moreWrap.offset().left + moreWrap.outerWidth() + 1; // +1 to be over cell border
- }
- else {
- options.left = moreWrap.offset().left - 1; // -1 to be over cell border
- }
- this.segPopover = new Popover_1.default(options);
- this.segPopover.show();
- // the popover doesn't live within the grid's container element, and thus won't get the event
- // delegated-handlers for free. attach event-related handlers to the popover.
- this.bindAllSegHandlersToEl(this.segPopover.el);
- this.triggerAfterEventSegsRendered(segs);
- };
- // Builds the inner DOM contents of the segment popover
- DayGrid.prototype.renderSegPopoverContent = function (row, col, segs) {
- var view = this.view;
- var theme = view.calendar.theme;
- var title = this.getCellDate(row, col).format(this.opt('dayPopoverFormat'));
- var content = $('<div class="fc-header ' + theme.getClass('popoverHeader') + '">' +
- '<span class="fc-close ' + theme.getIconClass('close') + '"></span>' +
- '<span class="fc-title">' +
- util_1.htmlEscape(title) +
- '</span>' +
- '<div class="fc-clear"/>' +
- '</div>' +
- '<div class="fc-body ' + theme.getClass('popoverContent') + '">' +
- '<div class="fc-event-container"></div>' +
- '</div>');
- var segContainer = content.find('.fc-event-container');
- var i;
- // render each seg's `el` and only return the visible segs
- segs = this.eventRenderer.renderFgSegEls(segs, true); // disableResizing=true
- this.popoverSegs = segs;
- for (i = 0; i < segs.length; i++) {
- // because segments in the popover are not part of a grid coordinate system, provide a hint to any
- // grids that want to do drag-n-drop about which cell it came from
- this.hitsNeeded();
- segs[i].hit = this.getCellHit(row, col);
- this.hitsNotNeeded();
- segContainer.append(segs[i].el);
- }
- return content;
- };
- // 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.clone();
- var dayEnd = dayStart.clone().add(1, 'days');
- var dayRange = new UnzonedRange_1.default(dayStart, dayEnd);
- var newSegs = [];
- var i;
- var seg;
- var slicedRange;
- for (i = 0; i < segs.length; i++) {
- seg = segs[i];
- slicedRange = seg.footprint.componentFootprint.unzonedRange.intersect(dayRange);
- if (slicedRange) {
- newSegs.push($.extend({}, seg, {
- footprint: new EventFootprint_1.default(new ComponentFootprint_1.default(slicedRange, seg.footprint.componentFootprint.isAllDay), seg.footprint.eventDef, seg.footprint.eventInstance),
- isStart: seg.isStart && slicedRange.isStart,
- isEnd: seg.isEnd && slicedRange.isEnd
- }));
- }
- }
- // force an order because eventsToSegs doesn't guarantee one
- // TODO: research if still needed
- this.eventRenderer.sortEventSegs(newSegs);
- 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.opt('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;
-}(InteractiveDateComponent_1.default));
-exports.default = DayGrid;
-DayGrid.prototype.eventRendererClass = DayGridEventRenderer_1.default;
-DayGrid.prototype.businessHourRendererClass = BusinessHourRenderer_1.default;
-DayGrid.prototype.helperRendererClass = DayGridHelperRenderer_1.default;
-DayGrid.prototype.fillRendererClass = DayGridFillRenderer_1.default;
-StandardInteractionsMixin_1.default.mixInto(DayGrid);
-DayTableMixin_1.default.mixInto(DayGrid);
-
-
-/***/ }),
-/* 62 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var $ = __webpack_require__(3);
-var util_1 = __webpack_require__(4);
-var Scroller_1 = __webpack_require__(39);
-var View_1 = __webpack_require__(41);
-var BasicViewDateProfileGenerator_1 = __webpack_require__(228);
-var DayGrid_1 = __webpack_require__(61);
-/* An abstract class for the "basic" 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 BasicView = /** @class */ (function (_super) {
- tslib_1.__extends(BasicView, _super);
- function BasicView(calendar, viewSpec) {
- var _this = _super.call(this, calendar, viewSpec) || this;
- _this.dayGrid = _this.instantiateDayGrid();
- _this.dayGrid.isRigid = _this.hasRigidRows();
- if (_this.opt('weekNumbers')) {
- if (_this.opt('weekNumbersWithinDays')) {
- _this.dayGrid.cellWeekNumbersVisible = true;
- _this.dayGrid.colWeekNumbersVisible = false;
- }
- else {
- _this.dayGrid.cellWeekNumbersVisible = false;
- _this.dayGrid.colWeekNumbersVisible = true;
- }
- }
- _this.addChild(_this.dayGrid);
- _this.scroller = new Scroller_1.default({
- overflowX: 'hidden',
- overflowY: 'auto'
- });
- return _this;
- }
- // Generates the DayGrid object this view needs. Draws from this.dayGridClass
- BasicView.prototype.instantiateDayGrid = function () {
- // generate a subclass on the fly with BasicView-specific behavior
- // TODO: cache this subclass
- var subclass = makeDayGridSubclass(this.dayGridClass);
- return new subclass(this);
- };
- BasicView.prototype.executeDateRender = function (dateProfile) {
- this.dayGrid.breakOnWeeks = /year|month|week/.test(dateProfile.currentRangeUnit);
- _super.prototype.executeDateRender.call(this, dateProfile);
- };
- BasicView.prototype.renderSkeleton = function () {
- var dayGridContainerEl;
- var dayGridEl;
- this.el.addClass('fc-basic-view').html(this.renderSkeletonHtml());
- this.scroller.render();
- dayGridContainerEl = this.scroller.el.addClass('fc-day-grid-container');
- dayGridEl = $('<div class="fc-day-grid" />').appendTo(dayGridContainerEl);
- this.el.find('.fc-body > tr > td').append(dayGridContainerEl);
- this.dayGrid.headContainerEl = this.el.find('.fc-head-container');
- this.dayGrid.setElement(dayGridEl);
- };
- BasicView.prototype.unrenderSkeleton = function () {
- this.dayGrid.removeElement();
- this.scroller.destroy();
- };
- // Builds the HTML skeleton for the view.
- // The day-grid component will render inside of a container defined by this HTML.
- BasicView.prototype.renderSkeletonHtml = function () {
- var theme = this.calendar.theme;
- return '' +
- '<table class="' + theme.getClass('tableGrid') + '">' +
- (this.opt('columnHeader') ?
- '<thead class="fc-head">' +
- '<tr>' +
- '<td class="fc-head-container ' + theme.getClass('widgetHeader') + '"> </td>' +
- '</tr>' +
- '</thead>' :
- '') +
- '<tbody class="fc-body">' +
- '<tr>' +
- '<td class="' + theme.getClass('widgetContent') + '"></td>' +
- '</tr>' +
- '</tbody>' +
- '</table>';
- };
- // Generates an HTML attribute string for setting the width of the week number column, if it is known
- BasicView.prototype.weekNumberStyleAttr = function () {
- if (this.weekNumberWidth != null) {
- return 'style="width:' + this.weekNumberWidth + 'px"';
- }
- return '';
- };
- // Determines whether each row should have a constant height
- BasicView.prototype.hasRigidRows = function () {
- var eventLimit = this.opt('eventLimit');
- return eventLimit && typeof eventLimit !== 'number';
- };
- /* Dimensions
- ------------------------------------------------------------------------------------------------------------------*/
- // Refreshes the horizontal dimensions of the view
- BasicView.prototype.updateSize = function (totalHeight, isAuto, isResize) {
- var eventLimit = this.opt('eventLimit');
- var headRowEl = this.dayGrid.headContainerEl.find('.fc-row');
- 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 (!this.dayGrid.rowEls) {
- if (!isAuto) {
- scrollerHeight = this.computeScrollerHeight(totalHeight);
- this.scroller.setHeight(scrollerHeight);
- }
- return;
- }
- _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);
- if (this.dayGrid.colWeekNumbersVisible) {
- // Make sure all week number cells running down the side have the same width.
- // Record the width for cells created later.
- this.weekNumberWidth = util_1.matchCellWidths(this.el.find('.fc-week-number'));
- }
- // reset all heights to be natural
- this.scroller.clear();
- util_1.uncompensateScroll(headRowEl);
- this.dayGrid.removeSegPopover(); // kill the "more" popover if displayed
- // is the event limit a constant level number?
- if (eventLimit && typeof eventLimit === 'number') {
- this.dayGrid.limitRows(eventLimit); // limit the levels first so the height can redistribute after
- }
- // distribute the height to the rows
- // (totalHeight is a "recommended" value if isAuto)
- scrollerHeight = this.computeScrollerHeight(totalHeight);
- this.setGridHeight(scrollerHeight, isAuto);
- // is the event limit dynamically calculated?
- if (eventLimit && typeof eventLimit !== 'number') {
- this.dayGrid.limitRows(eventLimit); // limit the levels after the grid's row heights have been set
- }
- if (!isAuto) {
- this.scroller.setHeight(scrollerHeight);
- scrollbarWidths = this.scroller.getScrollbarWidths();
- if (scrollbarWidths.left || scrollbarWidths.right) {
- util_1.compensateScroll(headRowEl, scrollbarWidths);
- // doing the scrollbar compensation might have created text overflow which created more height. redo
- scrollerHeight = this.computeScrollerHeight(totalHeight);
- 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
- BasicView.prototype.computeScrollerHeight = function (totalHeight) {
- return totalHeight -
- util_1.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller
- };
- // Sets the height of just the DayGrid component in this view
- BasicView.prototype.setGridHeight = function (height, isAuto) {
- if (isAuto) {
- util_1.undistributeHeight(this.dayGrid.rowEls); // let the rows be their natural height with no expanding
- }
- else {
- util_1.distributeHeight(this.dayGrid.rowEls, height, true); // true = compensate for height-hogging rows
- }
- };
- /* Scroll
- ------------------------------------------------------------------------------------------------------------------*/
- BasicView.prototype.computeInitialDateScroll = function () {
- return { top: 0 };
- };
- BasicView.prototype.queryDateScroll = function () {
- return { top: this.scroller.getScrollTop() };
- };
- BasicView.prototype.applyDateScroll = function (scroll) {
- if (scroll.top !== undefined) {
- this.scroller.setScrollTop(scroll.top);
- }
- };
- return BasicView;
-}(View_1.default));
-exports.default = BasicView;
-BasicView.prototype.dateProfileGeneratorClass = BasicViewDateProfileGenerator_1.default;
-BasicView.prototype.dayGridClass = DayGrid_1.default;
-// customize the rendering behavior of BasicView's dayGrid
-function makeDayGridSubclass(SuperClass) {
- return /** @class */ (function (_super) {
- tslib_1.__extends(SubClass, _super);
- function SubClass() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.colWeekNumbersVisible = false; // display week numbers along the side?
- return _this;
- }
- // Generates the HTML that will go before the day-of week header cells
- SubClass.prototype.renderHeadIntroHtml = function () {
- var view = this.view;
- if (this.colWeekNumbersVisible) {
- return '' +
- '<th class="fc-week-number ' + view.calendar.theme.getClass('widgetHeader') + '" ' + view.weekNumberStyleAttr() + '>' +
- '<span>' + // needed for matchCellWidths
- util_1.htmlEscape(this.opt('weekNumberTitle')) +
- '</span>' +
- '</th>';
- }
- return '';
- };
- // Generates the HTML that will go before content-skeleton cells that display the day/week numbers
- SubClass.prototype.renderNumberIntroHtml = function (row) {
- var view = this.view;
- var weekStart = this.getCellDate(row, 0);
- if (this.colWeekNumbersVisible) {
- return '' +
- '<td class="fc-week-number" ' + view.weekNumberStyleAttr() + '>' +
- view.buildGotoAnchorHtml(// aside from link, important for matchCellWidths
- { date: weekStart, type: 'week', forceOff: this.colCnt === 1 }, weekStart.format('w') // inner HTML
- ) +
- '</td>';
- }
- return '';
- };
- // Generates the HTML that goes before the day bg cells for each day-row
- SubClass.prototype.renderBgIntroHtml = function () {
- var view = this.view;
- if (this.colWeekNumbersVisible) {
- return '<td class="fc-week-number ' + view.calendar.theme.getClass('widgetContent') + '" ' +
- view.weekNumberStyleAttr() + '></td>';
- }
- return '';
- };
- // Generates the HTML that goes before every other type of row generated by DayGrid.
- // Affects helper-skeleton and highlight-skeleton rows.
- SubClass.prototype.renderIntroHtml = function () {
- var view = this.view;
- if (this.colWeekNumbersVisible) {
- return '<td class="fc-week-number" ' + view.weekNumberStyleAttr() + '></td>';
- }
- return '';
- };
- SubClass.prototype.getIsNumbersVisible = function () {
- return DayGrid_1.default.prototype.getIsNumbersVisible.apply(this, arguments) || this.colWeekNumbersVisible;
- };
- return SubClass;
- }(SuperClass));
-}
-
-
-/***/ }),
-/* 63 */,
-/* 64 */,
-/* 65 */,
-/* 66 */,
-/* 67 */,
-/* 68 */,
-/* 69 */,
-/* 70 */,
-/* 71 */,
-/* 72 */,
-/* 73 */,
-/* 74 */,
-/* 75 */,
-/* 76 */,
-/* 77 */,
-/* 78 */,
-/* 79 */,
-/* 80 */,
-/* 81 */,
-/* 82 */,
-/* 83 */,
-/* 84 */,
-/* 85 */,
-/* 86 */,
-/* 87 */,
-/* 88 */,
-/* 89 */,
-/* 90 */,
-/* 91 */,
-/* 92 */,
-/* 93 */,
-/* 94 */,
-/* 95 */,
-/* 96 */,
-/* 97 */,
-/* 98 */,
-/* 99 */,
-/* 100 */,
-/* 101 */,
-/* 102 */,
-/* 103 */,
-/* 104 */,
-/* 105 */,
-/* 106 */,
-/* 107 */,
-/* 108 */,
-/* 109 */,
-/* 110 */,
-/* 111 */,
-/* 112 */,
-/* 113 */,
-/* 114 */,
-/* 115 */,
-/* 116 */,
-/* 117 */,
-/* 118 */,
-/* 119 */,
-/* 120 */,
-/* 121 */,
-/* 122 */,
-/* 123 */,
-/* 124 */,
-/* 125 */,
-/* 126 */,
-/* 127 */,
-/* 128 */,
-/* 129 */,
-/* 130 */,
-/* 131 */,
-/* 132 */,
-/* 133 */,
-/* 134 */,
-/* 135 */,
-/* 136 */,
-/* 137 */,
-/* 138 */,
-/* 139 */,
-/* 140 */,
-/* 141 */,
-/* 142 */,
-/* 143 */,
-/* 144 */,
-/* 145 */,
-/* 146 */,
-/* 147 */,
-/* 148 */,
-/* 149 */,
-/* 150 */,
-/* 151 */,
-/* 152 */,
-/* 153 */,
-/* 154 */,
-/* 155 */,
-/* 156 */,
-/* 157 */,
-/* 158 */,
-/* 159 */,
-/* 160 */,
-/* 161 */,
-/* 162 */,
-/* 163 */,
-/* 164 */,
-/* 165 */,
-/* 166 */,
-/* 167 */,
-/* 168 */,
-/* 169 */,
-/* 170 */,
-/* 171 */,
-/* 172 */,
-/* 173 */,
-/* 174 */,
-/* 175 */,
-/* 176 */,
-/* 177 */,
-/* 178 */,
-/* 179 */,
-/* 180 */,
-/* 181 */,
-/* 182 */,
-/* 183 */,
-/* 184 */,
-/* 185 */,
-/* 186 */,
-/* 187 */,
-/* 188 */,
-/* 189 */,
-/* 190 */,
-/* 191 */,
-/* 192 */,
-/* 193 */,
-/* 194 */,
-/* 195 */,
-/* 196 */,
-/* 197 */,
-/* 198 */,
-/* 199 */,
-/* 200 */,
-/* 201 */,
-/* 202 */,
-/* 203 */,
-/* 204 */,
-/* 205 */,
-/* 206 */,
-/* 207 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var UnzonedRange_1 = __webpack_require__(5);
-var ComponentFootprint_1 = __webpack_require__(12);
-var EventDefParser_1 = __webpack_require__(49);
-var EventSource_1 = __webpack_require__(6);
-var util_1 = __webpack_require__(35);
-var Constraints = /** @class */ (function () {
- function Constraints(eventManager, _calendar) {
- this.eventManager = eventManager;
- this._calendar = _calendar;
- }
- Constraints.prototype.opt = function (name) {
- return this._calendar.opt(name);
- };
- /*
- determines if eventInstanceGroup is allowed,
- in relation to other EVENTS and business hours.
- */
- Constraints.prototype.isEventInstanceGroupAllowed = function (eventInstanceGroup) {
- var eventDef = eventInstanceGroup.getEventDef();
- var eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());
- var i;
- var peerEventInstances = this.getPeerEventInstances(eventDef);
- var peerEventRanges = peerEventInstances.map(util_1.eventInstanceToEventRange);
- var peerEventFootprints = this.eventRangesToEventFootprints(peerEventRanges);
- var constraintVal = eventDef.getConstraint();
- var overlapVal = eventDef.getOverlap();
- var eventAllowFunc = this.opt('eventAllow');
- for (i = 0; i < eventFootprints.length; i++) {
- if (!this.isFootprintAllowed(eventFootprints[i].componentFootprint, peerEventFootprints, constraintVal, overlapVal, eventFootprints[i].eventInstance)) {
- return false;
- }
- }
- if (eventAllowFunc) {
- for (i = 0; i < eventFootprints.length; i++) {
- if (eventAllowFunc(eventFootprints[i].componentFootprint.toLegacy(this._calendar), eventFootprints[i].getEventLegacy()) === false) {
- return false;
- }
- }
- }
- return true;
- };
- Constraints.prototype.getPeerEventInstances = function (eventDef) {
- return this.eventManager.getEventInstancesWithoutId(eventDef.id);
- };
- Constraints.prototype.isSelectionFootprintAllowed = function (componentFootprint) {
- var peerEventInstances = this.eventManager.getEventInstances();
- var peerEventRanges = peerEventInstances.map(util_1.eventInstanceToEventRange);
- var peerEventFootprints = this.eventRangesToEventFootprints(peerEventRanges);
- var selectAllowFunc;
- if (this.isFootprintAllowed(componentFootprint, peerEventFootprints, this.opt('selectConstraint'), this.opt('selectOverlap'))) {
- selectAllowFunc = this.opt('selectAllow');
- if (selectAllowFunc) {
- return selectAllowFunc(componentFootprint.toLegacy(this._calendar)) !== false;
- }
- else {
- return true;
- }
- }
- return false;
- };
- Constraints.prototype.isFootprintAllowed = function (componentFootprint, peerEventFootprints, constraintVal, overlapVal, subjectEventInstance // optional
- ) {
- var constraintFootprints; // ComponentFootprint[]
- var overlapEventFootprints; // EventFootprint[]
- if (constraintVal != null) {
- constraintFootprints = this.constraintValToFootprints(constraintVal, componentFootprint.isAllDay);
- if (!this.isFootprintWithinConstraints(componentFootprint, constraintFootprints)) {
- return false;
- }
- }
- overlapEventFootprints = this.collectOverlapEventFootprints(peerEventFootprints, componentFootprint);
- if (overlapVal === false) {
- if (overlapEventFootprints.length) {
- return false;
- }
- }
- else if (typeof overlapVal === 'function') {
- if (!isOverlapsAllowedByFunc(overlapEventFootprints, overlapVal, subjectEventInstance)) {
- return false;
- }
- }
- if (subjectEventInstance) {
- if (!isOverlapEventInstancesAllowed(overlapEventFootprints, subjectEventInstance)) {
- return false;
- }
- }
- return true;
- };
- // Constraint
- // ------------------------------------------------------------------------------------------------
- Constraints.prototype.isFootprintWithinConstraints = function (componentFootprint, constraintFootprints) {
- var i;
- for (i = 0; i < constraintFootprints.length; i++) {
- if (this.footprintContainsFootprint(constraintFootprints[i], componentFootprint)) {
- return true;
- }
- }
- return false;
- };
- Constraints.prototype.constraintValToFootprints = function (constraintVal, isAllDay) {
- var eventInstances;
- if (constraintVal === 'businessHours') {
- return this.buildCurrentBusinessFootprints(isAllDay);
- }
- else if (typeof constraintVal === 'object') {
- eventInstances = this.parseEventDefToInstances(constraintVal); // handles recurring events
- if (!eventInstances) {
- return this.parseFootprints(constraintVal);
- }
- else {
- return this.eventInstancesToFootprints(eventInstances);
- }
- }
- else if (constraintVal != null) {
- eventInstances = this.eventManager.getEventInstancesWithId(constraintVal);
- return this.eventInstancesToFootprints(eventInstances);
- }
- };
- // returns ComponentFootprint[]
- // uses current view's range
- Constraints.prototype.buildCurrentBusinessFootprints = function (isAllDay) {
- var view = this._calendar.view;
- var businessHourGenerator = view.get('businessHourGenerator');
- var unzonedRange = view.dateProfile.activeUnzonedRange;
- var eventInstanceGroup = businessHourGenerator.buildEventInstanceGroup(isAllDay, unzonedRange);
- if (eventInstanceGroup) {
- return this.eventInstancesToFootprints(eventInstanceGroup.eventInstances);
- }
- else {
- return [];
- }
- };
- // conversion util
- Constraints.prototype.eventInstancesToFootprints = function (eventInstances) {
- var eventRanges = eventInstances.map(util_1.eventInstanceToEventRange);
- var eventFootprints = this.eventRangesToEventFootprints(eventRanges);
- return eventFootprints.map(util_1.eventFootprintToComponentFootprint);
- };
- // Overlap
- // ------------------------------------------------------------------------------------------------
- Constraints.prototype.collectOverlapEventFootprints = function (peerEventFootprints, targetFootprint) {
- var overlapEventFootprints = [];
- var i;
- for (i = 0; i < peerEventFootprints.length; i++) {
- if (this.footprintsIntersect(targetFootprint, peerEventFootprints[i].componentFootprint)) {
- overlapEventFootprints.push(peerEventFootprints[i]);
- }
- }
- return overlapEventFootprints;
- };
- // Conversion: eventDefs -> eventInstances -> eventRanges -> eventFootprints -> componentFootprints
- // ------------------------------------------------------------------------------------------------
- // NOTE: this might seem like repetitive code with the Grid class, however, this code is related to
- // constraints whereas the Grid code is related to rendering. Each approach might want to convert
- // eventRanges -> eventFootprints in a different way. Regardless, there are opportunities to make
- // this more DRY.
- /*
- Returns false on invalid input.
- */
- Constraints.prototype.parseEventDefToInstances = function (eventInput) {
- var eventManager = this.eventManager;
- var eventDef = EventDefParser_1.default.parse(eventInput, new EventSource_1.default(this._calendar));
- if (!eventDef) {
- return false;
- }
- return eventDef.buildInstances(eventManager.currentPeriod.unzonedRange);
- };
- Constraints.prototype.eventRangesToEventFootprints = function (eventRanges) {
- var i;
- var eventFootprints = [];
- for (i = 0; i < eventRanges.length; i++) {
- eventFootprints.push.apply(// footprints
- eventFootprints, this.eventRangeToEventFootprints(eventRanges[i]));
- }
- return eventFootprints;
- };
- Constraints.prototype.eventRangeToEventFootprints = function (eventRange) {
- return [util_1.eventRangeToEventFootprint(eventRange)];
- };
- /*
- Parses footprints directly.
- Very similar to EventDateProfile::parse :(
- */
- Constraints.prototype.parseFootprints = function (rawInput) {
- var start;
- var end;
- if (rawInput.start) {
- start = this._calendar.moment(rawInput.start);
- if (!start.isValid()) {
- start = null;
- }
- }
- if (rawInput.end) {
- end = this._calendar.moment(rawInput.end);
- if (!end.isValid()) {
- end = null;
- }
- }
- return [
- new ComponentFootprint_1.default(new UnzonedRange_1.default(start, end), (start && !start.hasTime()) || (end && !end.hasTime()) // isAllDay
- )
- ];
- };
- // Footprint Utils
- // ----------------------------------------------------------------------------------------
- Constraints.prototype.footprintContainsFootprint = function (outerFootprint, innerFootprint) {
- return outerFootprint.unzonedRange.containsRange(innerFootprint.unzonedRange);
- };
- Constraints.prototype.footprintsIntersect = function (footprint0, footprint1) {
- return footprint0.unzonedRange.intersectsWith(footprint1.unzonedRange);
- };
- return Constraints;
-}());
-exports.default = Constraints;
-// optional subjectEventInstance
-function isOverlapsAllowedByFunc(overlapEventFootprints, overlapFunc, subjectEventInstance) {
- var i;
- for (i = 0; i < overlapEventFootprints.length; i++) {
- if (!overlapFunc(overlapEventFootprints[i].eventInstance.toLegacy(), subjectEventInstance ? subjectEventInstance.toLegacy() : null)) {
- return false;
- }
- }
- return true;
-}
-function isOverlapEventInstancesAllowed(overlapEventFootprints, subjectEventInstance) {
- var subjectLegacyInstance = subjectEventInstance.toLegacy();
- var i;
- var overlapEventInstance;
- var overlapEventDef;
- var overlapVal;
- for (i = 0; i < overlapEventFootprints.length; i++) {
- overlapEventInstance = overlapEventFootprints[i].eventInstance;
- overlapEventDef = overlapEventInstance.def;
- // don't need to pass in calendar, because don't want to consider global eventOverlap property,
- // because we already considered that earlier in the process.
- overlapVal = overlapEventDef.getOverlap();
- if (overlapVal === false) {
- return false;
- }
- else if (typeof overlapVal === 'function') {
- if (!overlapVal(overlapEventInstance.toLegacy(), subjectLegacyInstance)) {
- return false;
- }
- }
- }
- return true;
-}
-
-
-/***/ }),
-/* 208 */
-/***/ (function(module, exports, __webpack_require__) {
-
-/*
-USAGE:
- import { default as ParsableModelMixin, ParsableModelInterface } from './ParsableModelMixin'
-in class:
- applyProps: ParsableModelInterface['applyProps']
- applyManualStandardProps: ParsableModelInterface['applyManualStandardProps']
- applyMiscProps: ParsableModelInterface['applyMiscProps']
- isStandardProp: ParsableModelInterface['isStandardProp']
- static defineStandardProps = ParsableModelMixin.defineStandardProps
- static copyVerbatimStandardProps = ParsableModelMixin.copyVerbatimStandardProps
-after class:
- ParsableModelMixin.mixInto(TheClass)
-*/
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var util_1 = __webpack_require__(4);
-var Mixin_1 = __webpack_require__(14);
-var ParsableModelMixin = /** @class */ (function (_super) {
- tslib_1.__extends(ParsableModelMixin, _super);
- function ParsableModelMixin() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- ParsableModelMixin.defineStandardProps = function (propDefs) {
- var proto = this.prototype;
- if (!proto.hasOwnProperty('standardPropMap')) {
- proto.standardPropMap = Object.create(proto.standardPropMap);
- }
- util_1.copyOwnProps(propDefs, proto.standardPropMap);
- };
- ParsableModelMixin.copyVerbatimStandardProps = function (src, dest) {
- var map = this.prototype.standardPropMap;
- var propName;
- for (propName in map) {
- if (src[propName] != null && // in the src object?
- map[propName] === true // false means "copy verbatim"
- ) {
- dest[propName] = src[propName];
- }
- }
- };
- /*
- Returns true/false for success.
- Meant to be only called ONCE, at object creation.
- */
- ParsableModelMixin.prototype.applyProps = function (rawProps) {
- var standardPropMap = this.standardPropMap;
- var manualProps = {};
- var miscProps = {};
- var propName;
- for (propName in rawProps) {
- if (standardPropMap[propName] === true) {
- this[propName] = rawProps[propName];
- }
- else if (standardPropMap[propName] === false) {
- manualProps[propName] = rawProps[propName];
- }
- else {
- miscProps[propName] = rawProps[propName];
- }
- }
- this.applyMiscProps(miscProps);
- return this.applyManualStandardProps(manualProps);
- };
- /*
- If subclasses override, they must call this supermethod and return the boolean response.
- Meant to be only called ONCE, at object creation.
- */
- ParsableModelMixin.prototype.applyManualStandardProps = function (rawProps) {
- return true;
- };
- /*
- Can be called even after initial object creation.
- */
- ParsableModelMixin.prototype.applyMiscProps = function (rawProps) {
- // subclasses can implement
- };
- /*
- TODO: why is this a method when defineStandardProps is static
- */
- ParsableModelMixin.prototype.isStandardProp = function (propName) {
- return propName in this.standardPropMap;
- };
- return ParsableModelMixin;
-}(Mixin_1.default));
-exports.default = ParsableModelMixin;
-ParsableModelMixin.prototype.standardPropMap = {}; // will be cloned by defineStandardProps
-
-
-/***/ }),
-/* 209 */
-/***/ (function(module, exports) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var EventInstance = /** @class */ (function () {
- function EventInstance(def, dateProfile) {
- this.def = def;
- this.dateProfile = dateProfile;
- }
- EventInstance.prototype.toLegacy = function () {
- var dateProfile = this.dateProfile;
- var obj = this.def.toLegacy();
- obj.start = dateProfile.start.clone();
- obj.end = dateProfile.end ? dateProfile.end.clone() : null;
- return obj;
- };
- return EventInstance;
-}());
-exports.default = EventInstance;
-
-
-/***/ }),
-/* 210 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var $ = __webpack_require__(3);
-var moment = __webpack_require__(0);
-var EventDef_1 = __webpack_require__(34);
-var EventInstance_1 = __webpack_require__(209);
-var EventDateProfile_1 = __webpack_require__(17);
-var RecurringEventDef = /** @class */ (function (_super) {
- tslib_1.__extends(RecurringEventDef, _super);
- function RecurringEventDef() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- RecurringEventDef.prototype.isAllDay = function () {
- return !this.startTime && !this.endTime;
- };
- RecurringEventDef.prototype.buildInstances = function (unzonedRange) {
- var calendar = this.source.calendar;
- var unzonedDate = unzonedRange.getStart();
- var unzonedEnd = unzonedRange.getEnd();
- var zonedDayStart;
- var instanceStart;
- var instanceEnd;
- var instances = [];
- while (unzonedDate.isBefore(unzonedEnd)) {
- // if everyday, or this particular day-of-week
- if (!this.dowHash || this.dowHash[unzonedDate.day()]) {
- zonedDayStart = calendar.applyTimezone(unzonedDate);
- instanceStart = zonedDayStart.clone();
- instanceEnd = null;
- if (this.startTime) {
- instanceStart.time(this.startTime);
- }
- else {
- instanceStart.stripTime();
- }
- if (this.endTime) {
- instanceEnd = zonedDayStart.clone().time(this.endTime);
- }
- instances.push(new EventInstance_1.default(this, // definition
- new EventDateProfile_1.default(instanceStart, instanceEnd, calendar)));
- }
- unzonedDate.add(1, 'days');
- }
- return instances;
- };
- RecurringEventDef.prototype.setDow = function (dowNumbers) {
- if (!this.dowHash) {
- this.dowHash = {};
- }
- for (var i = 0; i < dowNumbers.length; i++) {
- this.dowHash[dowNumbers[i]] = true;
- }
- };
- RecurringEventDef.prototype.clone = function () {
- var def = _super.prototype.clone.call(this);
- if (def.startTime) {
- def.startTime = moment.duration(this.startTime);
- }
- if (def.endTime) {
- def.endTime = moment.duration(this.endTime);
- }
- if (this.dowHash) {
- def.dowHash = $.extend({}, this.dowHash);
- }
- return def;
- };
- return RecurringEventDef;
-}(EventDef_1.default));
-exports.default = RecurringEventDef;
-/*
-HACK to work with TypeScript mixins
-NOTE: if super-method fails, should still attempt to apply
-*/
-RecurringEventDef.prototype.applyProps = function (rawProps) {
- var superSuccess = EventDef_1.default.prototype.applyProps.call(this, rawProps);
- if (rawProps.start) {
- this.startTime = moment.duration(rawProps.start);
- }
- if (rawProps.end) {
- this.endTime = moment.duration(rawProps.end);
- }
- if (rawProps.dow) {
- this.setDow(rawProps.dow);
- }
- return superSuccess;
-};
-// Parsing
-// ---------------------------------------------------------------------------------------------------------------------
-RecurringEventDef.defineStandardProps({
- start: false,
- end: false,
- dow: false
-});
-
-
-/***/ }),
-/* 211 */
-/***/ (function(module, exports) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var EventRange = /** @class */ (function () {
- function EventRange(unzonedRange, eventDef, eventInstance) {
- this.unzonedRange = unzonedRange;
- this.eventDef = eventDef;
- if (eventInstance) {
- this.eventInstance = eventInstance;
- }
- }
- return EventRange;
-}());
-exports.default = EventRange;
-
-
-/***/ }),
-/* 212 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var $ = __webpack_require__(3);
-var util_1 = __webpack_require__(35);
-var EventInstanceGroup_1 = __webpack_require__(18);
-var RecurringEventDef_1 = __webpack_require__(210);
-var EventSource_1 = __webpack_require__(6);
-var BUSINESS_HOUR_EVENT_DEFAULTS = {
- start: '09:00',
- end: '17:00',
- dow: [1, 2, 3, 4, 5],
- rendering: 'inverse-background'
- // classNames are defined in businessHoursSegClasses
-};
-var BusinessHourGenerator = /** @class */ (function () {
- function BusinessHourGenerator(rawComplexDef, calendar) {
- this.rawComplexDef = rawComplexDef;
- this.calendar = calendar;
- }
- BusinessHourGenerator.prototype.buildEventInstanceGroup = function (isAllDay, unzonedRange) {
- var eventDefs = this.buildEventDefs(isAllDay);
- var eventInstanceGroup;
- if (eventDefs.length) {
- eventInstanceGroup = new EventInstanceGroup_1.default(util_1.eventDefsToEventInstances(eventDefs, unzonedRange));
- // so that inverse-background rendering can happen even when no eventRanges in view
- eventInstanceGroup.explicitEventDef = eventDefs[0];
- return eventInstanceGroup;
- }
- };
- BusinessHourGenerator.prototype.buildEventDefs = function (isAllDay) {
- var rawComplexDef = this.rawComplexDef;
- var rawDefs = [];
- var requireDow = false;
- var i;
- var defs = [];
- if (rawComplexDef === true) {
- rawDefs = [{}]; // will get BUSINESS_HOUR_EVENT_DEFAULTS verbatim
- }
- else if ($.isPlainObject(rawComplexDef)) {
- rawDefs = [rawComplexDef];
- }
- else if ($.isArray(rawComplexDef)) {
- rawDefs = rawComplexDef;
- requireDow = true; // every sub-definition NEEDS a day-of-week
- }
- for (i = 0; i < rawDefs.length; i++) {
- if (!requireDow || rawDefs[i].dow) {
- defs.push(this.buildEventDef(isAllDay, rawDefs[i]));
- }
- }
- return defs;
- };
- BusinessHourGenerator.prototype.buildEventDef = function (isAllDay, rawDef) {
- var fullRawDef = $.extend({}, BUSINESS_HOUR_EVENT_DEFAULTS, rawDef);
- if (isAllDay) {
- fullRawDef.start = null;
- fullRawDef.end = null;
- }
- return RecurringEventDef_1.default.parse(fullRawDef, new EventSource_1.default(this.calendar) // dummy source
- );
- };
- return BusinessHourGenerator;
-}());
-exports.default = BusinessHourGenerator;
-
-
-/***/ }),
-/* 213 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var Theme_1 = __webpack_require__(19);
-var StandardTheme = /** @class */ (function (_super) {
- tslib_1.__extends(StandardTheme, _super);
- function StandardTheme() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- return StandardTheme;
-}(Theme_1.default));
-exports.default = StandardTheme;
-StandardTheme.prototype.classes = {
- widget: 'fc-unthemed',
- widgetHeader: 'fc-widget-header',
- widgetContent: 'fc-widget-content',
- buttonGroup: 'fc-button-group',
- button: 'fc-button',
- cornerLeft: 'fc-corner-left',
- cornerRight: 'fc-corner-right',
- stateDefault: 'fc-state-default',
- stateActive: 'fc-state-active',
- stateDisabled: 'fc-state-disabled',
- stateHover: 'fc-state-hover',
- stateDown: 'fc-state-down',
- 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-left-single-arrow',
- next: 'fc-icon-right-single-arrow',
- prevYear: 'fc-icon-left-double-arrow',
- nextYear: 'fc-icon-right-double-arrow'
-};
-StandardTheme.prototype.iconOverrideOption = 'buttonIcons';
-StandardTheme.prototype.iconOverrideCustomButtonOption = 'icon';
-StandardTheme.prototype.iconOverridePrefix = 'fc-icon-';
-
-
-/***/ }),
-/* 214 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var Theme_1 = __webpack_require__(19);
-var JqueryUiTheme = /** @class */ (function (_super) {
- tslib_1.__extends(JqueryUiTheme, _super);
- function JqueryUiTheme() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- return JqueryUiTheme;
-}(Theme_1.default));
-exports.default = JqueryUiTheme;
-JqueryUiTheme.prototype.classes = {
- widget: 'ui-widget',
- widgetHeader: 'ui-widget-header',
- widgetContent: 'ui-widget-content',
- buttonGroup: 'fc-button-group',
- button: 'ui-button',
- cornerLeft: 'ui-corner-left',
- cornerRight: 'ui-corner-right',
- stateDefault: 'ui-state-default',
- stateActive: 'ui-state-active',
- stateDisabled: 'ui-state-disabled',
- stateHover: 'ui-state-hover',
- stateDown: 'ui-state-down',
- today: 'ui-state-highlight',
- popoverHeader: 'ui-widget-header',
- popoverContent: 'ui-widget-content',
- // day grid
- headerRow: 'ui-widget-header',
- dayRow: 'ui-widget-content',
- // list view
- listView: 'ui-widget-content'
-};
-JqueryUiTheme.prototype.baseIconClass = 'ui-icon';
-JqueryUiTheme.prototype.iconClasses = {
- close: 'ui-icon-closethick',
- prev: 'ui-icon-circle-triangle-w',
- next: 'ui-icon-circle-triangle-e',
- prevYear: 'ui-icon-seek-prev',
- nextYear: 'ui-icon-seek-next'
-};
-JqueryUiTheme.prototype.iconOverrideOption = 'themeButtonIcons';
-JqueryUiTheme.prototype.iconOverrideCustomButtonOption = 'themeIcon';
-JqueryUiTheme.prototype.iconOverridePrefix = 'ui-icon-';
-
-
-/***/ }),
-/* 215 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var $ = __webpack_require__(3);
-var Promise_1 = __webpack_require__(20);
-var EventSource_1 = __webpack_require__(6);
-var FuncEventSource = /** @class */ (function (_super) {
- tslib_1.__extends(FuncEventSource, _super);
- function FuncEventSource() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- FuncEventSource.parse = function (rawInput, calendar) {
- var rawProps;
- // normalize raw input
- if ($.isFunction(rawInput.events)) {
- rawProps = rawInput;
- }
- else if ($.isFunction(rawInput)) {
- rawProps = { events: rawInput };
- }
- if (rawProps) {
- return EventSource_1.default.parse.call(this, rawProps, calendar);
- }
- return false;
- };
- FuncEventSource.prototype.fetch = function (start, end, timezone) {
- var _this = this;
- this.calendar.pushLoading();
- return Promise_1.default.construct(function (onResolve) {
- _this.func.call(_this.calendar, start.clone(), end.clone(), timezone, function (rawEventDefs) {
- _this.calendar.popLoading();
- onResolve(_this.parseEventDefs(rawEventDefs));
- });
- });
- };
- FuncEventSource.prototype.getPrimitive = function () {
- return this.func;
- };
- FuncEventSource.prototype.applyManualStandardProps = function (rawProps) {
- var superSuccess = _super.prototype.applyManualStandardProps.call(this, rawProps);
- this.func = rawProps.events;
- return superSuccess;
- };
- return FuncEventSource;
-}(EventSource_1.default));
-exports.default = FuncEventSource;
-FuncEventSource.defineStandardProps({
- events: false // don't automatically transfer
-});
-
-
-/***/ }),
-/* 216 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var $ = __webpack_require__(3);
-var util_1 = __webpack_require__(4);
-var Promise_1 = __webpack_require__(20);
-var EventSource_1 = __webpack_require__(6);
-var JsonFeedEventSource = /** @class */ (function (_super) {
- tslib_1.__extends(JsonFeedEventSource, _super);
- function JsonFeedEventSource() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- JsonFeedEventSource.parse = function (rawInput, calendar) {
- var rawProps;
- // normalize raw input
- if (typeof rawInput.url === 'string') {
- rawProps = rawInput;
- }
- else if (typeof rawInput === 'string') {
- rawProps = { url: rawInput };
- }
- if (rawProps) {
- return EventSource_1.default.parse.call(this, rawProps, calendar);
- }
- return false;
- };
- JsonFeedEventSource.prototype.fetch = function (start, end, timezone) {
- var _this = this;
- var ajaxSettings = this.ajaxSettings;
- var onSuccess = ajaxSettings.success;
- var onError = ajaxSettings.error;
- var requestParams = this.buildRequestParams(start, end, timezone);
- // todo: eventually handle the promise's then,
- // don't intercept success/error
- // tho will be a breaking API change
- this.calendar.pushLoading();
- return Promise_1.default.construct(function (onResolve, onReject) {
- $.ajax($.extend({}, // destination
- JsonFeedEventSource.AJAX_DEFAULTS, ajaxSettings, {
- url: _this.url,
- data: requestParams,
- success: function (rawEventDefs, status, xhr) {
- var callbackRes;
- _this.calendar.popLoading();
- if (rawEventDefs) {
- callbackRes = util_1.applyAll(onSuccess, _this, [rawEventDefs, status, xhr]); // redirect `this`
- if ($.isArray(callbackRes)) {
- rawEventDefs = callbackRes;
- }
- onResolve(_this.parseEventDefs(rawEventDefs));
- }
- else {
- onReject();
- }
- },
- error: function (xhr, statusText, errorThrown) {
- _this.calendar.popLoading();
- util_1.applyAll(onError, _this, [xhr, statusText, errorThrown]); // redirect `this`
- onReject();
- }
- }));
- });
- };
- JsonFeedEventSource.prototype.buildRequestParams = function (start, end, timezone) {
- var calendar = this.calendar;
- var ajaxSettings = this.ajaxSettings;
- var startParam;
- var endParam;
- var timezoneParam;
- var customRequestParams;
- var params = {};
- startParam = this.startParam;
- if (startParam == null) {
- startParam = calendar.opt('startParam');
- }
- endParam = this.endParam;
- if (endParam == null) {
- endParam = calendar.opt('endParam');
- }
- timezoneParam = this.timezoneParam;
- if (timezoneParam == null) {
- timezoneParam = calendar.opt('timezoneParam');
- }
- // retrieve any outbound GET/POST $.ajax data from the options
- if ($.isFunction(ajaxSettings.data)) {
- // supplied as a function that returns a key/value object
- customRequestParams = ajaxSettings.data();
- }
- else {
- // probably supplied as a straight key/value object
- customRequestParams = ajaxSettings.data || {};
- }
- $.extend(params, customRequestParams);
- params[startParam] = start.format();
- params[endParam] = end.format();
- if (timezone && timezone !== 'local') {
- params[timezoneParam] = timezone;
- }
- return params;
- };
- JsonFeedEventSource.prototype.getPrimitive = function () {
- return this.url;
- };
- JsonFeedEventSource.prototype.applyMiscProps = function (rawProps) {
- this.ajaxSettings = rawProps;
- };
- JsonFeedEventSource.AJAX_DEFAULTS = {
- dataType: 'json',
- cache: false
- };
- return JsonFeedEventSource;
-}(EventSource_1.default));
-exports.default = JsonFeedEventSource;
-JsonFeedEventSource.defineStandardProps({
- // automatically transfer (true)...
- url: true,
- startParam: true,
- endParam: true,
- timezoneParam: true
-});
-
-
-/***/ }),
-/* 217 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var EmitterMixin_1 = __webpack_require__(11);
-var TaskQueue = /** @class */ (function () {
- function TaskQueue() {
- this.q = [];
- this.isPaused = false;
- this.isRunning = false;
- }
- TaskQueue.prototype.queue = function () {
- var args = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- args[_i] = arguments[_i];
- }
- this.q.push.apply(this.q, args); // append
- this.tryStart();
- };
- TaskQueue.prototype.pause = function () {
- this.isPaused = true;
- };
- TaskQueue.prototype.resume = function () {
- this.isPaused = false;
- this.tryStart();
- };
- TaskQueue.prototype.getIsIdle = function () {
- return !this.isRunning && !this.isPaused;
- };
- TaskQueue.prototype.tryStart = function () {
- if (!this.isRunning && this.canRunNext()) {
- this.isRunning = true;
- this.trigger('start');
- this.runRemaining();
- }
- };
- TaskQueue.prototype.canRunNext = function () {
- return !this.isPaused && this.q.length;
- };
- TaskQueue.prototype.runRemaining = function () {
- var _this = this;
- var task;
- var res;
- do {
- task = this.q.shift(); // always freshly reference q. might have been reassigned.
- res = this.runTask(task);
- if (res && res.then) {
- res.then(function () {
- if (_this.canRunNext()) {
- _this.runRemaining();
- }
- });
- return; // prevent marking as stopped
- }
- } while (this.canRunNext());
- this.trigger('stop'); // not really a 'stop' ... more of a 'drained'
- this.isRunning = false;
- // if 'stop' handler added more tasks.... TODO: write test for this
- this.tryStart();
- };
- TaskQueue.prototype.runTask = function (task) {
- return task(); // task *is* the function, but subclasses can change the format of a task
- };
- return TaskQueue;
-}());
-exports.default = TaskQueue;
-EmitterMixin_1.default.mixInto(TaskQueue);
-
-
-/***/ }),
-/* 218 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var TaskQueue_1 = __webpack_require__(217);
-var RenderQueue = /** @class */ (function (_super) {
- tslib_1.__extends(RenderQueue, _super);
- function RenderQueue(waitsByNamespace) {
- var _this = _super.call(this) || this;
- _this.waitsByNamespace = waitsByNamespace || {};
- return _this;
- }
- RenderQueue.prototype.queue = function (taskFunc, namespace, type) {
- var task = {
- func: taskFunc,
- namespace: namespace,
- type: type
- };
- var waitMs;
- if (namespace) {
- waitMs = this.waitsByNamespace[namespace];
- }
- if (this.waitNamespace) {
- if (namespace === this.waitNamespace && waitMs != null) {
- this.delayWait(waitMs);
- }
- else {
- this.clearWait();
- this.tryStart();
- }
- }
- if (this.compoundTask(task)) {
- if (!this.waitNamespace && waitMs != null) {
- this.startWait(namespace, waitMs);
- }
- else {
- this.tryStart();
- }
- }
- };
- RenderQueue.prototype.startWait = function (namespace, waitMs) {
- this.waitNamespace = namespace;
- this.spawnWait(waitMs);
- };
- RenderQueue.prototype.delayWait = function (waitMs) {
- clearTimeout(this.waitId);
- this.spawnWait(waitMs);
- };
- RenderQueue.prototype.spawnWait = function (waitMs) {
- var _this = this;
- this.waitId = setTimeout(function () {
- _this.waitNamespace = null;
- _this.tryStart();
- }, waitMs);
- };
- RenderQueue.prototype.clearWait = function () {
- if (this.waitNamespace) {
- clearTimeout(this.waitId);
- this.waitId = null;
- this.waitNamespace = null;
- }
- };
- RenderQueue.prototype.canRunNext = function () {
- if (!_super.prototype.canRunNext.call(this)) {
- return false;
- }
- // waiting for a certain namespace to stop receiving tasks?
- if (this.waitNamespace) {
- var q = this.q;
- // if there was a different namespace task in the meantime,
- // that forces all previously-waiting tasks to suddenly execute.
- // TODO: find a way to do this in constant time.
- for (var i = 0; i < q.length; i++) {
- if (q[i].namespace !== this.waitNamespace) {
- return true; // allow execution
- }
- }
- return false;
- }
- return true;
- };
- RenderQueue.prototype.runTask = function (task) {
- task.func();
- };
- RenderQueue.prototype.compoundTask = function (newTask) {
- var q = this.q;
- var shouldAppend = true;
- var i;
- var task;
- if (newTask.namespace && newTask.type === 'destroy') {
- // remove all init/add/remove ops with same namespace, regardless of order
- for (i = q.length - 1; i >= 0; i--) {
- task = q[i];
- switch (task.type) {
- case 'init':
- shouldAppend = false;
- // the latest destroy is cancelled out by not doing the init
- /* falls through */
- case 'add':
- /* falls through */
- case 'remove':
- q.splice(i, 1); // remove task
- }
- }
- }
- if (shouldAppend) {
- q.push(newTask);
- }
- return shouldAppend;
- };
- return RenderQueue;
-}(TaskQueue_1.default));
-exports.default = RenderQueue;
-
-
-/***/ }),
-/* 219 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var $ = __webpack_require__(3);
-var moment = __webpack_require__(0);
-var util_1 = __webpack_require__(4);
-var moment_ext_1 = __webpack_require__(10);
-var date_formatting_1 = __webpack_require__(47);
-var Component_1 = __webpack_require__(237);
-var util_2 = __webpack_require__(35);
-var DateComponent = /** @class */ (function (_super) {
- tslib_1.__extends(DateComponent, _super);
- function DateComponent(_view, _options) {
- var _this = _super.call(this) || this;
- _this.isRTL = false; // frequently accessed options
- _this.hitsNeededDepth = 0; // necessary because multiple callers might need the same hits
- _this.hasAllDayBusinessHours = false; // TODO: unify with largeUnit and isTimeScale?
- _this.isDatesRendered = false;
- // hack to set options prior to the this.opt calls
- if (_view) {
- _this['view'] = _view;
- }
- if (_options) {
- _this['options'] = _options;
- }
- _this.uid = String(DateComponent.guid++);
- _this.childrenByUid = {};
- _this.nextDayThreshold = moment.duration(_this.opt('nextDayThreshold'));
- _this.isRTL = _this.opt('isRTL');
- if (_this.fillRendererClass) {
- _this.fillRenderer = new _this.fillRendererClass(_this);
- }
- if (_this.eventRendererClass) {
- _this.eventRenderer = new _this.eventRendererClass(_this, _this.fillRenderer);
- }
- if (_this.helperRendererClass && _this.eventRenderer) {
- _this.helperRenderer = new _this.helperRendererClass(_this, _this.eventRenderer);
- }
- if (_this.businessHourRendererClass && _this.fillRenderer) {
- _this.businessHourRenderer = new _this.businessHourRendererClass(_this, _this.fillRenderer);
- }
- return _this;
- }
- DateComponent.prototype.addChild = function (child) {
- if (!this.childrenByUid[child.uid]) {
- this.childrenByUid[child.uid] = child;
- return true;
- }
- return false;
- };
- DateComponent.prototype.removeChild = function (child) {
- if (this.childrenByUid[child.uid]) {
- delete this.childrenByUid[child.uid];
- return true;
- }
- return false;
- };
- // TODO: only do if isInDom?
- // TODO: make part of Component, along with children/batch-render system?
- DateComponent.prototype.updateSize = function (totalHeight, isAuto, isResize) {
- this.callChildren('updateSize', arguments);
- };
- // Options
- // -----------------------------------------------------------------------------------------------------------------
- DateComponent.prototype.opt = function (name) {
- return this._getView().opt(name); // default implementation
- };
- DateComponent.prototype.publiclyTrigger = function () {
- var args = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- args[_i] = arguments[_i];
- }
- var calendar = this._getCalendar();
- return calendar.publiclyTrigger.apply(calendar, args);
- };
- DateComponent.prototype.hasPublicHandlers = function () {
- var args = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- args[_i] = arguments[_i];
- }
- var calendar = this._getCalendar();
- return calendar.hasPublicHandlers.apply(calendar, args);
- };
- // Date
- // -----------------------------------------------------------------------------------------------------------------
- DateComponent.prototype.executeDateRender = function (dateProfile) {
- this.dateProfile = dateProfile; // for rendering
- this.renderDates(dateProfile);
- this.isDatesRendered = true;
- this.callChildren('executeDateRender', arguments);
- };
- DateComponent.prototype.executeDateUnrender = function () {
- this.callChildren('executeDateUnrender', arguments);
- this.dateProfile = null;
- this.unrenderDates();
- this.isDatesRendered = false;
- };
- // date-cell content only
- DateComponent.prototype.renderDates = function (dateProfile) {
- // subclasses should implement
- };
- // date-cell content only
- DateComponent.prototype.unrenderDates = function () {
- // subclasses should override
- };
- // Now-Indicator
- // -----------------------------------------------------------------------------------------------------------------
- // Returns a string unit, like 'second' or 'minute' that defined how often the current time indicator
- // should be refreshed. If something falsy is returned, no time indicator is rendered at all.
- DateComponent.prototype.getNowIndicatorUnit = function () {
- // subclasses should implement
- };
- // Renders a current time indicator at the given datetime
- DateComponent.prototype.renderNowIndicator = function (date) {
- this.callChildren('renderNowIndicator', arguments);
- };
- // Undoes the rendering actions from renderNowIndicator
- DateComponent.prototype.unrenderNowIndicator = function () {
- this.callChildren('unrenderNowIndicator', arguments);
- };
- // Business Hours
- // ---------------------------------------------------------------------------------------------------------------
- DateComponent.prototype.renderBusinessHours = function (businessHourGenerator) {
- if (this.businessHourRenderer) {
- this.businessHourRenderer.render(businessHourGenerator);
- }
- this.callChildren('renderBusinessHours', arguments);
- };
- // Unrenders previously-rendered business-hours
- DateComponent.prototype.unrenderBusinessHours = function () {
- this.callChildren('unrenderBusinessHours', arguments);
- if (this.businessHourRenderer) {
- this.businessHourRenderer.unrender();
- }
- };
- // Event Displaying
- // -----------------------------------------------------------------------------------------------------------------
- DateComponent.prototype.executeEventRender = function (eventsPayload) {
- if (this.eventRenderer) {
- this.eventRenderer.rangeUpdated(); // poorly named now
- this.eventRenderer.render(eventsPayload);
- }
- else if (this['renderEvents']) {
- this['renderEvents'](convertEventsPayloadToLegacyArray(eventsPayload));
- }
- this.callChildren('executeEventRender', arguments);
- };
- DateComponent.prototype.executeEventUnrender = function () {
- this.callChildren('executeEventUnrender', arguments);
- if (this.eventRenderer) {
- this.eventRenderer.unrender();
- }
- else if (this['destroyEvents']) {
- this['destroyEvents']();
- }
- };
- DateComponent.prototype.getBusinessHourSegs = function () {
- var segs = this.getOwnBusinessHourSegs();
- this.iterChildren(function (child) {
- segs.push.apply(segs, child.getBusinessHourSegs());
- });
- return segs;
- };
- DateComponent.prototype.getOwnBusinessHourSegs = function () {
- if (this.businessHourRenderer) {
- return this.businessHourRenderer.getSegs();
- }
- return [];
- };
- DateComponent.prototype.getEventSegs = function () {
- var segs = this.getOwnEventSegs();
- this.iterChildren(function (child) {
- segs.push.apply(segs, child.getEventSegs());
- });
- return segs;
- };
- DateComponent.prototype.getOwnEventSegs = function () {
- if (this.eventRenderer) {
- return this.eventRenderer.getSegs();
- }
- return [];
- };
- // Event Rendering Triggering
- // -----------------------------------------------------------------------------------------------------------------
- DateComponent.prototype.triggerAfterEventsRendered = function () {
- this.triggerAfterEventSegsRendered(this.getEventSegs());
- this.publiclyTrigger('eventAfterAllRender', {
- context: this,
- args: [this]
- });
- };
- DateComponent.prototype.triggerAfterEventSegsRendered = function (segs) {
- var _this = this;
- // an optimization, because getEventLegacy is expensive
- if (this.hasPublicHandlers('eventAfterRender')) {
- segs.forEach(function (seg) {
- var legacy;
- if (seg.el) {
- legacy = seg.footprint.getEventLegacy();
- _this.publiclyTrigger('eventAfterRender', {
- context: legacy,
- args: [legacy, seg.el, _this]
- });
- }
- });
- }
- };
- DateComponent.prototype.triggerBeforeEventsDestroyed = function () {
- this.triggerBeforeEventSegsDestroyed(this.getEventSegs());
- };
- DateComponent.prototype.triggerBeforeEventSegsDestroyed = function (segs) {
- var _this = this;
- if (this.hasPublicHandlers('eventDestroy')) {
- segs.forEach(function (seg) {
- var legacy;
- if (seg.el) {
- legacy = seg.footprint.getEventLegacy();
- _this.publiclyTrigger('eventDestroy', {
- context: legacy,
- args: [legacy, seg.el, _this]
- });
- }
- });
- }
- };
- // Event Rendering Utils
- // -----------------------------------------------------------------------------------------------------------------
- // Hides all rendered event segments linked to the given event
- // RECURSIVE with subcomponents
- DateComponent.prototype.showEventsWithId = function (eventDefId) {
- this.getEventSegs().forEach(function (seg) {
- if (seg.footprint.eventDef.id === eventDefId &&
- seg.el // necessary?
- ) {
- seg.el.css('visibility', '');
- }
- });
- this.callChildren('showEventsWithId', arguments);
- };
- // Shows all rendered event segments linked to the given event
- // RECURSIVE with subcomponents
- DateComponent.prototype.hideEventsWithId = function (eventDefId) {
- this.getEventSegs().forEach(function (seg) {
- if (seg.footprint.eventDef.id === eventDefId &&
- seg.el // necessary?
- ) {
- seg.el.css('visibility', 'hidden');
- }
- });
- this.callChildren('hideEventsWithId', arguments);
- };
- // Drag-n-Drop Rendering (for both events and external elements)
- // ---------------------------------------------------------------------------------------------------------------
- // Renders a visual indication of a event or external-element drag over the given drop zone.
- // If an external-element, seg will be `null`.
- // Must return elements used for any mock events.
- DateComponent.prototype.renderDrag = function (eventFootprints, seg, isTouch) {
- var renderedHelper = false;
- this.iterChildren(function (child) {
- if (child.renderDrag(eventFootprints, seg, isTouch)) {
- renderedHelper = true;
- }
- });
- return renderedHelper;
- };
- // Unrenders a visual indication of an event or external-element being dragged.
- DateComponent.prototype.unrenderDrag = function () {
- this.callChildren('unrenderDrag', arguments);
- };
- // Event Resizing
- // ---------------------------------------------------------------------------------------------------------------
- // Renders a visual indication of an event being resized.
- DateComponent.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {
- this.callChildren('renderEventResize', arguments);
- };
- // Unrenders a visual indication of an event being resized.
- DateComponent.prototype.unrenderEventResize = function () {
- this.callChildren('unrenderEventResize', arguments);
- };
- // Selection
- // ---------------------------------------------------------------------------------------------------------------
- // Renders a visual indication of the selection
- // TODO: rename to `renderSelection` after legacy is gone
- DateComponent.prototype.renderSelectionFootprint = function (componentFootprint) {
- this.renderHighlight(componentFootprint);
- this.callChildren('renderSelectionFootprint', arguments);
- };
- // Unrenders a visual indication of selection
- DateComponent.prototype.unrenderSelection = function () {
- this.unrenderHighlight();
- this.callChildren('unrenderSelection', arguments);
- };
- // Highlight
- // ---------------------------------------------------------------------------------------------------------------
- // Renders an emphasis on the given date range. Given a span (unzoned start/end and other misc data)
- DateComponent.prototype.renderHighlight = function (componentFootprint) {
- if (this.fillRenderer) {
- this.fillRenderer.renderFootprint('highlight', componentFootprint, {
- getClasses: function () {
- return ['fc-highlight'];
- }
- });
- }
- this.callChildren('renderHighlight', arguments);
- };
- // Unrenders the emphasis on a date range
- DateComponent.prototype.unrenderHighlight = function () {
- if (this.fillRenderer) {
- this.fillRenderer.unrender('highlight');
- }
- this.callChildren('unrenderHighlight', arguments);
- };
- // Hit Areas
- // ---------------------------------------------------------------------------------------------------------------
- // just because all DateComponents support this interface
- // doesn't mean they need to have their own internal coord system. they can defer to sub-components.
- DateComponent.prototype.hitsNeeded = function () {
- if (!(this.hitsNeededDepth++)) {
- this.prepareHits();
- }
- this.callChildren('hitsNeeded', arguments);
- };
- DateComponent.prototype.hitsNotNeeded = function () {
- if (this.hitsNeededDepth && !(--this.hitsNeededDepth)) {
- this.releaseHits();
- }
- this.callChildren('hitsNotNeeded', arguments);
- };
- DateComponent.prototype.prepareHits = function () {
- // subclasses can implement
- };
- DateComponent.prototype.releaseHits = function () {
- // subclasses can implement
- };
- // Given coordinates from the topleft of the document, return data about the date-related area underneath.
- // Can return an object with arbitrary properties (although top/right/left/bottom are encouraged).
- // Must have a `grid` property, a reference to this current grid. TODO: avoid this
- // The returned object will be processed by getHitFootprint and getHitEl.
- DateComponent.prototype.queryHit = function (leftOffset, topOffset) {
- var childrenByUid = this.childrenByUid;
- var uid;
- var hit;
- for (uid in childrenByUid) {
- hit = childrenByUid[uid].queryHit(leftOffset, topOffset);
- if (hit) {
- break;
- }
- }
- return hit;
- };
- DateComponent.prototype.getSafeHitFootprint = function (hit) {
- var footprint = this.getHitFootprint(hit);
- if (!this.dateProfile.activeUnzonedRange.containsRange(footprint.unzonedRange)) {
- return null;
- }
- return footprint;
- };
- DateComponent.prototype.getHitFootprint = function (hit) {
- // what about being abstract!?
- };
- // Given position-level information about a date-related area within the grid,
- // should return a jQuery element that best represents it. passed to dayClick callback.
- DateComponent.prototype.getHitEl = function (hit) {
- // what about being abstract!?
- };
- /* Converting eventRange -> eventFootprint
- ------------------------------------------------------------------------------------------------------------------*/
- DateComponent.prototype.eventRangesToEventFootprints = function (eventRanges) {
- var eventFootprints = [];
- var i;
- for (i = 0; i < eventRanges.length; i++) {
- eventFootprints.push.apply(// append
- eventFootprints, this.eventRangeToEventFootprints(eventRanges[i]));
- }
- return eventFootprints;
- };
- DateComponent.prototype.eventRangeToEventFootprints = function (eventRange) {
- return [util_2.eventRangeToEventFootprint(eventRange)];
- };
- /* Converting componentFootprint/eventFootprint -> segs
- ------------------------------------------------------------------------------------------------------------------*/
- DateComponent.prototype.eventFootprintsToSegs = function (eventFootprints) {
- var segs = [];
- var i;
- for (i = 0; i < eventFootprints.length; i++) {
- segs.push.apply(segs, this.eventFootprintToSegs(eventFootprints[i]));
- }
- return segs;
- };
- // Given an event's span (unzoned start/end and other misc data), and the event itself,
- // slices into segments and attaches event-derived properties to them.
- // eventSpan - { start, end, isStart, isEnd, otherthings... }
- DateComponent.prototype.eventFootprintToSegs = function (eventFootprint) {
- var unzonedRange = eventFootprint.componentFootprint.unzonedRange;
- var segs;
- var i;
- var seg;
- segs = this.componentFootprintToSegs(eventFootprint.componentFootprint);
- for (i = 0; i < segs.length; i++) {
- seg = segs[i];
- if (!unzonedRange.isStart) {
- seg.isStart = false;
- }
- if (!unzonedRange.isEnd) {
- seg.isEnd = false;
- }
- seg.footprint = eventFootprint;
- // TODO: rename to seg.eventFootprint
- }
- return segs;
- };
- DateComponent.prototype.componentFootprintToSegs = function (componentFootprint) {
- return [];
- };
- // Utils
- // ---------------------------------------------------------------------------------------------------------------
- DateComponent.prototype.callChildren = function (methodName, args) {
- this.iterChildren(function (child) {
- child[methodName].apply(child, args);
- });
- };
- DateComponent.prototype.iterChildren = function (func) {
- var childrenByUid = this.childrenByUid;
- var uid;
- for (uid in childrenByUid) {
- func(childrenByUid[uid]);
- }
- };
- DateComponent.prototype._getCalendar = function () {
- var t = this;
- return t.calendar || t.view.calendar;
- };
- DateComponent.prototype._getView = function () {
- return this.view;
- };
- DateComponent.prototype._getDateProfile = function () {
- return this._getView().get('dateProfile');
- };
- // Generates HTML for an anchor to another view into the calendar.
- // Will either generate an <a> tag or a non-clickable <span> tag, depending on enabled settings.
- // `gotoOptions` can either be a moment input, 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.
- DateComponent.prototype.buildGotoAnchorHtml = function (gotoOptions, attrs, innerHtml) {
- var date;
- var type;
- var forceOff;
- var finalOptions;
- if ($.isPlainObject(gotoOptions)) {
- date = gotoOptions.date;
- type = gotoOptions.type;
- forceOff = gotoOptions.forceOff;
- }
- else {
- date = gotoOptions; // a single moment input
- }
- date = moment_ext_1.default(date); // if a string, parse it
- finalOptions = {
- date: date.format('YYYY-MM-DD'),
- type: type || 'day'
- };
- if (typeof attrs === 'string') {
- innerHtml = attrs;
- attrs = null;
- }
- attrs = attrs ? ' ' + util_1.attrsToStr(attrs) : ''; // will have a leading space
- innerHtml = innerHtml || '';
- if (!forceOff && this.opt('navLinks')) {
- return '<a' + attrs +
- ' data-goto="' + util_1.htmlEscape(JSON.stringify(finalOptions)) + '">' +
- innerHtml +
- '</a>';
- }
- else {
- return '<span' + attrs + '>' +
- innerHtml +
- '</span>';
- }
- };
- DateComponent.prototype.getAllDayHtml = function () {
- return this.opt('allDayHtml') || util_1.htmlEscape(this.opt('allDayText'));
- };
- // Computes HTML classNames for a single-day element
- DateComponent.prototype.getDayClasses = function (date, noThemeHighlight) {
- var view = this._getView();
- var classes = [];
- var today;
- if (!this.dateProfile.activeUnzonedRange.containsDate(date)) {
- classes.push('fc-disabled-day'); // TODO: jQuery UI theme?
- }
- else {
- classes.push('fc-' + util_1.dayIDs[date.day()]);
- if (view.isDateInOtherMonth(date, this.dateProfile)) {
- classes.push('fc-other-month');
- }
- today = view.calendar.getNow();
- if (date.isSame(today, 'day')) {
- classes.push('fc-today');
- if (noThemeHighlight !== true) {
- classes.push(view.calendar.theme.getClass('today'));
- }
- }
- else if (date < today) {
- classes.push('fc-past');
- }
- else {
- classes.push('fc-future');
- }
- }
- return classes;
- };
- // Utility for formatting a range. Accepts a range object, formatting string, and optional separator.
- // Displays all-day ranges naturally, with an inclusive end. Takes the current isRTL into account.
- // The timezones of the dates within `range` will be respected.
- DateComponent.prototype.formatRange = function (range, isAllDay, formatStr, separator) {
- var end = range.end;
- if (isAllDay) {
- end = end.clone().subtract(1); // convert to inclusive. last ms of previous day
- }
- return date_formatting_1.formatRange(range.start, end, formatStr, separator, this.isRTL);
- };
- // Compute the number of the give units in the "current" range.
- // Will return a floating-point number. Won't round.
- DateComponent.prototype.currentRangeAs = function (unit) {
- return this._getDateProfile().currentUnzonedRange.as(unit);
- };
- // Returns the date range of the full days the given range visually appears to occupy.
- // Returns a plain object with start/end, NOT an UnzonedRange!
- DateComponent.prototype.computeDayRange = function (unzonedRange) {
- var calendar = this._getCalendar();
- var startDay = calendar.msToUtcMoment(unzonedRange.startMs, true); // the beginning of the day the range starts
- var end = calendar.msToUtcMoment(unzonedRange.endMs);
- var endTimeMS = +end.time(); // # of milliseconds into `endDay`
- var endDay = end.clone().stripTime(); // the beginning of the day the range exclusively ends
- // 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 >= this.nextDayThreshold) {
- endDay.add(1, 'days');
- }
- // If end is within `startDay` but not past nextDayThreshold, assign the default duration of one day.
- if (endDay <= startDay) {
- endDay = startDay.clone().add(1, 'days');
- }
- return { start: startDay, end: endDay };
- };
- // Does the given range visually appear to occupy more than one day?
- DateComponent.prototype.isMultiDayRange = function (unzonedRange) {
- var dayRange = this.computeDayRange(unzonedRange);
- return dayRange.end.diff(dayRange.start, 'days') > 1;
- };
- DateComponent.guid = 0; // TODO: better system for this?
- return DateComponent;
-}(Component_1.default));
-exports.default = DateComponent;
-// legacy
-function convertEventsPayloadToLegacyArray(eventsPayload) {
- var eventDefId;
- var eventInstances;
- var legacyEvents = [];
- var i;
- for (eventDefId in eventsPayload) {
- eventInstances = eventsPayload[eventDefId].eventInstances;
- for (i = 0; i < eventInstances.length; i++) {
- legacyEvents.push(eventInstances[i].toLegacy());
- }
- }
- return legacyEvents;
-}
-
-
-/***/ }),
-/* 220 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var $ = __webpack_require__(3);
-var moment = __webpack_require__(0);
-var util_1 = __webpack_require__(4);
-var options_1 = __webpack_require__(32);
-var Iterator_1 = __webpack_require__(238);
-var GlobalEmitter_1 = __webpack_require__(21);
-var EmitterMixin_1 = __webpack_require__(11);
-var ListenerMixin_1 = __webpack_require__(7);
-var Toolbar_1 = __webpack_require__(239);
-var OptionsManager_1 = __webpack_require__(240);
-var ViewSpecManager_1 = __webpack_require__(241);
-var Constraints_1 = __webpack_require__(207);
-var locale_1 = __webpack_require__(31);
-var moment_ext_1 = __webpack_require__(10);
-var UnzonedRange_1 = __webpack_require__(5);
-var ComponentFootprint_1 = __webpack_require__(12);
-var EventDateProfile_1 = __webpack_require__(17);
-var EventManager_1 = __webpack_require__(242);
-var BusinessHourGenerator_1 = __webpack_require__(212);
-var EventSourceParser_1 = __webpack_require__(38);
-var EventDefParser_1 = __webpack_require__(49);
-var SingleEventDef_1 = __webpack_require__(13);
-var EventDefMutation_1 = __webpack_require__(37);
-var EventSource_1 = __webpack_require__(6);
-var ThemeRegistry_1 = __webpack_require__(51);
-var Calendar = /** @class */ (function () {
- function Calendar(el, overrides) {
- this.loadingLevel = 0; // number of simultaneous loading tasks
- this.ignoreUpdateViewSize = 0;
- this.freezeContentHeightDepth = 0;
- // declare the current calendar instance relies on GlobalEmitter. needed for garbage collection.
- // unneeded() is called in destroy.
- GlobalEmitter_1.default.needed();
- this.el = el;
- this.viewsByType = {};
- this.optionsManager = new OptionsManager_1.default(this, overrides);
- this.viewSpecManager = new ViewSpecManager_1.default(this.optionsManager, this);
- this.initMomentInternals(); // needs to happen after options hash initialized
- this.initCurrentDate();
- this.initEventManager();
- this.constraints = new Constraints_1.default(this.eventManager, this);
- this.constructed();
- }
- Calendar.prototype.constructed = function () {
- // useful for monkeypatching. used?
- };
- Calendar.prototype.getView = function () {
- return this.view;
- };
- Calendar.prototype.publiclyTrigger = function (name, triggerInfo) {
- var optHandler = this.opt(name);
- var context;
- var args;
- if ($.isPlainObject(triggerInfo)) {
- context = triggerInfo.context;
- args = triggerInfo.args;
- }
- else if ($.isArray(triggerInfo)) {
- args = triggerInfo;
- }
- if (context == null) {
- context = this.el[0]; // fallback context
- }
- if (!args) {
- args = [];
- }
- this.triggerWith(name, context, args); // Emitter's method
- if (optHandler) {
- return optHandler.apply(context, args);
- }
- };
- Calendar.prototype.hasPublicHandlers = function (name) {
- return this.hasHandlers(name) ||
- this.opt(name); // handler specified in options
- };
- // Options Public API
- // -----------------------------------------------------------------------------------------------------------------
- // public getter/setter
- Calendar.prototype.option = function (name, value) {
- var newOptionHash;
- if (typeof name === 'string') {
- if (value === undefined) {
- return this.optionsManager.get(name);
- }
- else {
- newOptionHash = {};
- newOptionHash[name] = value;
- this.optionsManager.add(newOptionHash);
- }
- }
- else if (typeof name === 'object') {
- this.optionsManager.add(name);
- }
- };
- // private getter
- Calendar.prototype.opt = function (name) {
- return this.optionsManager.get(name);
- };
- // View
- // -----------------------------------------------------------------------------------------------------------------
- // Given a view name for a custom view or a standard view, creates a ready-to-go View object
- Calendar.prototype.instantiateView = function (viewType) {
- var spec = this.viewSpecManager.getViewSpec(viewType);
- if (!spec) {
- throw new Error("View type \"" + viewType + "\" is not valid");
- }
- return new spec['class'](this, spec);
- };
- // Returns a boolean about whether the view is okay to instantiate at some point
- Calendar.prototype.isValidViewType = function (viewType) {
- return Boolean(this.viewSpecManager.getViewSpec(viewType));
- };
- Calendar.prototype.changeView = function (viewName, dateOrRange) {
- if (dateOrRange) {
- if (dateOrRange.start && dateOrRange.end) {
- this.optionsManager.recordOverrides({
- visibleRange: dateOrRange
- });
- }
- else {
- this.currentDate = this.moment(dateOrRange).stripZone(); // just like gotoDate
- }
- }
- this.renderView(viewName);
- };
- // Forces navigation to a view for the given date.
- // `viewType` can be a specific view name or a generic one like "week" or "day".
- Calendar.prototype.zoomTo = function (newDate, viewType) {
- var spec;
- viewType = viewType || 'day'; // day is default zoom
- spec = this.viewSpecManager.getViewSpec(viewType) ||
- this.viewSpecManager.getUnitViewSpec(viewType);
- this.currentDate = newDate.clone();
- this.renderView(spec ? spec.type : null);
- };
- // Current Date
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.initCurrentDate = function () {
- var defaultDateInput = this.opt('defaultDate');
- // compute the initial ambig-timezone date
- if (defaultDateInput != null) {
- this.currentDate = this.moment(defaultDateInput).stripZone();
- }
- else {
- this.currentDate = this.getNow(); // getNow already returns unzoned
- }
- };
- Calendar.prototype.prev = function () {
- var view = this.view;
- var prevInfo = view.dateProfileGenerator.buildPrev(view.get('dateProfile'));
- if (prevInfo.isValid) {
- this.currentDate = prevInfo.date;
- this.renderView();
- }
- };
- Calendar.prototype.next = function () {
- var view = this.view;
- var nextInfo = view.dateProfileGenerator.buildNext(view.get('dateProfile'));
- if (nextInfo.isValid) {
- this.currentDate = nextInfo.date;
- this.renderView();
- }
- };
- Calendar.prototype.prevYear = function () {
- this.currentDate.add(-1, 'years');
- this.renderView();
- };
- Calendar.prototype.nextYear = function () {
- this.currentDate.add(1, 'years');
- this.renderView();
- };
- Calendar.prototype.today = function () {
- this.currentDate = this.getNow(); // should deny like prev/next?
- this.renderView();
- };
- Calendar.prototype.gotoDate = function (zonedDateInput) {
- this.currentDate = this.moment(zonedDateInput).stripZone();
- this.renderView();
- };
- Calendar.prototype.incrementDate = function (delta) {
- this.currentDate.add(moment.duration(delta));
- this.renderView();
- };
- // for external API
- Calendar.prototype.getDate = function () {
- return this.applyTimezone(this.currentDate); // infuse the calendar's timezone
- };
- // Loading Triggering
- // -----------------------------------------------------------------------------------------------------------------
- // Should be called when any type of async data fetching begins
- Calendar.prototype.pushLoading = function () {
- if (!(this.loadingLevel++)) {
- this.publiclyTrigger('loading', [true, this.view]);
- }
- };
- // Should be called when any type of async data fetching completes
- Calendar.prototype.popLoading = function () {
- if (!(--this.loadingLevel)) {
- this.publiclyTrigger('loading', [false, this.view]);
- }
- };
- // High-level Rendering
- // -----------------------------------------------------------------------------------
- Calendar.prototype.render = function () {
- if (!this.contentEl) {
- this.initialRender();
- }
- else if (this.elementVisible()) {
- // mainly for the public API
- this.calcSize();
- this.updateViewSize();
- }
- };
- Calendar.prototype.initialRender = function () {
- var _this = this;
- var el = this.el;
- el.addClass('fc');
- // event delegation for nav links
- el.on('click.fc', 'a[data-goto]', function (ev) {
- var anchorEl = $(ev.currentTarget);
- var gotoOptions = anchorEl.data('goto'); // will automatically parse JSON
- var date = _this.moment(gotoOptions.date);
- var viewType = gotoOptions.type;
- // property like "navLinkDayClick". might be a string or a function
- var customAction = _this.view.opt('navLink' + util_1.capitaliseFirstLetter(viewType) + 'Click');
- if (typeof customAction === 'function') {
- customAction(date, ev);
- }
- else {
- if (typeof customAction === 'string') {
- viewType = customAction;
- }
- _this.zoomTo(date, viewType);
- }
- });
- // called immediately, and upon option change
- this.optionsManager.watch('settingTheme', ['?theme', '?themeSystem'], function (opts) {
- var themeClass = ThemeRegistry_1.getThemeSystemClass(opts.themeSystem || opts.theme);
- var theme = new themeClass(_this.optionsManager);
- var widgetClass = theme.getClass('widget');
- _this.theme = theme;
- if (widgetClass) {
- el.addClass(widgetClass);
- }
- }, function () {
- var widgetClass = _this.theme.getClass('widget');
- _this.theme = null;
- if (widgetClass) {
- el.removeClass(widgetClass);
- }
- });
- this.optionsManager.watch('settingBusinessHourGenerator', ['?businessHours'], function (deps) {
- _this.businessHourGenerator = new BusinessHourGenerator_1.default(deps.businessHours, _this);
- if (_this.view) {
- _this.view.set('businessHourGenerator', _this.businessHourGenerator);
- }
- }, function () {
- _this.businessHourGenerator = null;
- });
- // called immediately, and upon option change.
- // HACK: locale often affects isRTL, so we explicitly listen to that too.
- this.optionsManager.watch('applyingDirClasses', ['?isRTL', '?locale'], function (opts) {
- el.toggleClass('fc-ltr', !opts.isRTL);
- el.toggleClass('fc-rtl', opts.isRTL);
- });
- this.contentEl = $("<div class='fc-view-container'/>").prependTo(el);
- this.initToolbars();
- this.renderHeader();
- this.renderFooter();
- this.renderView(this.opt('defaultView'));
- if (this.opt('handleWindowResize')) {
- $(window).resize(this.windowResizeProxy = util_1.debounce(// prevents rapid calls
- this.windowResize.bind(this), this.opt('windowResizeDelay')));
- }
- };
- Calendar.prototype.destroy = function () {
- if (this.view) {
- this.clearView();
- }
- this.toolbarsManager.proxyCall('removeElement');
- this.contentEl.remove();
- this.el.removeClass('fc fc-ltr fc-rtl');
- // removes theme-related root className
- this.optionsManager.unwatch('settingTheme');
- this.optionsManager.unwatch('settingBusinessHourGenerator');
- this.el.off('.fc'); // unbind nav link handlers
- if (this.windowResizeProxy) {
- $(window).unbind('resize', this.windowResizeProxy);
- this.windowResizeProxy = null;
- }
- GlobalEmitter_1.default.unneeded();
- };
- Calendar.prototype.elementVisible = function () {
- return this.el.is(':visible');
- };
- // Render Queue
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.bindViewHandlers = function (view) {
- var _this = this;
- view.watch('titleForCalendar', ['title'], function (deps) {
- if (view === _this.view) {
- _this.setToolbarsTitle(deps.title);
- }
- });
- view.watch('dateProfileForCalendar', ['dateProfile'], function (deps) {
- if (view === _this.view) {
- _this.currentDate = deps.dateProfile.date; // might have been constrained by view dates
- _this.updateToolbarButtons(deps.dateProfile);
- }
- });
- };
- Calendar.prototype.unbindViewHandlers = function (view) {
- view.unwatch('titleForCalendar');
- view.unwatch('dateProfileForCalendar');
- };
- // View Rendering
- // -----------------------------------------------------------------------------------
- // Renders a view because of a date change, view-type change, or for the first time.
- // If not given a viewType, keep the current view but render different dates.
- // Accepts an optional scroll state to restore to.
- Calendar.prototype.renderView = function (viewType) {
- var oldView = this.view;
- var newView;
- this.freezeContentHeight();
- if (oldView && viewType && oldView.type !== viewType) {
- this.clearView();
- }
- // if viewType changed, or the view was never created, create a fresh view
- if (!this.view && viewType) {
- newView = this.view =
- this.viewsByType[viewType] ||
- (this.viewsByType[viewType] = this.instantiateView(viewType));
- this.bindViewHandlers(newView);
- newView.startBatchRender(); // so that setElement+setDate rendering are joined
- newView.setElement($("<div class='fc-view fc-" + viewType + "-view' />").appendTo(this.contentEl));
- this.toolbarsManager.proxyCall('activateButton', viewType);
- }
- if (this.view) {
- // prevent unnecessary change firing
- if (this.view.get('businessHourGenerator') !== this.businessHourGenerator) {
- this.view.set('businessHourGenerator', this.businessHourGenerator);
- }
- this.view.setDate(this.currentDate);
- if (newView) {
- newView.stopBatchRender();
- }
- }
- this.thawContentHeight();
- };
- // Unrenders the current view and reflects this change in the Header.
- // Unregsiters the `view`, but does not remove from viewByType hash.
- Calendar.prototype.clearView = function () {
- var currentView = this.view;
- this.toolbarsManager.proxyCall('deactivateButton', currentView.type);
- this.unbindViewHandlers(currentView);
- currentView.removeElement();
- currentView.unsetDate(); // so bindViewHandlers doesn't fire with old values next time
- this.view = null;
- };
- // Destroys the view, including the view object. Then, re-instantiates it and renders it.
- // Maintains the same scroll state.
- // TODO: maintain any other user-manipulated state.
- Calendar.prototype.reinitView = function () {
- var oldView = this.view;
- var scroll = oldView.queryScroll(); // wouldn't be so complicated if Calendar owned the scroll
- this.freezeContentHeight();
- this.clearView();
- this.calcSize();
- this.renderView(oldView.type); // needs the type to freshly render
- this.view.applyScroll(scroll);
- this.thawContentHeight();
- };
- // Resizing
- // -----------------------------------------------------------------------------------
- Calendar.prototype.getSuggestedViewHeight = function () {
- if (this.suggestedViewHeight == null) {
- this.calcSize();
- }
- return this.suggestedViewHeight;
- };
- Calendar.prototype.isHeightAuto = function () {
- return this.opt('contentHeight') === 'auto' || this.opt('height') === 'auto';
- };
- Calendar.prototype.updateViewSize = function (isResize) {
- if (isResize === void 0) { isResize = false; }
- var view = this.view;
- var scroll;
- if (!this.ignoreUpdateViewSize && view) {
- if (isResize) {
- this.calcSize();
- scroll = view.queryScroll();
- }
- this.ignoreUpdateViewSize++;
- view.updateSize(this.getSuggestedViewHeight(), this.isHeightAuto(), isResize);
- this.ignoreUpdateViewSize--;
- if (isResize) {
- view.applyScroll(scroll);
- }
- return true; // signal success
- }
- };
- Calendar.prototype.calcSize = function () {
- if (this.elementVisible()) {
- this._calcSize();
- }
- };
- Calendar.prototype._calcSize = function () {
- var contentHeightInput = this.opt('contentHeight');
- var heightInput = this.opt('height');
- if (typeof contentHeightInput === 'number') {
- this.suggestedViewHeight = contentHeightInput;
- }
- else if (typeof contentHeightInput === 'function') {
- this.suggestedViewHeight = contentHeightInput();
- }
- else if (typeof heightInput === 'number') {
- this.suggestedViewHeight = heightInput - this.queryToolbarsHeight();
- }
- else if (typeof heightInput === 'function') {
- this.suggestedViewHeight = heightInput() - this.queryToolbarsHeight();
- }
- else if (heightInput === 'parent') {
- this.suggestedViewHeight = this.el.parent().height() - this.queryToolbarsHeight();
- }
- else {
- this.suggestedViewHeight = Math.round(this.contentEl.width() /
- Math.max(this.opt('aspectRatio'), .5));
- }
- };
- Calendar.prototype.windowResize = function (ev) {
- if (
- // the purpose: so we don't process jqui "resize" events that have bubbled up
- // cast to any because .target, which is Element, can't be compared to window for some reason.
- ev.target === window &&
- this.view &&
- this.view.isDatesRendered) {
- if (this.updateViewSize(true)) {
- this.publiclyTrigger('windowResize', [this.view]);
- }
- }
- };
- /* Height "Freezing"
- -----------------------------------------------------------------------------*/
- Calendar.prototype.freezeContentHeight = function () {
- if (!(this.freezeContentHeightDepth++)) {
- this.forceFreezeContentHeight();
- }
- };
- Calendar.prototype.forceFreezeContentHeight = function () {
- this.contentEl.css({
- width: '100%',
- height: this.contentEl.height(),
- overflow: 'hidden'
- });
- };
- Calendar.prototype.thawContentHeight = function () {
- this.freezeContentHeightDepth--;
- // always bring back to natural height
- this.contentEl.css({
- width: '',
- height: '',
- overflow: ''
- });
- // but if there are future thaws, re-freeze
- if (this.freezeContentHeightDepth) {
- this.forceFreezeContentHeight();
- }
- };
- // Toolbar
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.initToolbars = function () {
- this.header = new Toolbar_1.default(this, this.computeHeaderOptions());
- this.footer = new Toolbar_1.default(this, this.computeFooterOptions());
- this.toolbarsManager = new Iterator_1.default([this.header, this.footer]);
- };
- Calendar.prototype.computeHeaderOptions = function () {
- return {
- extraClasses: 'fc-header-toolbar',
- layout: this.opt('header')
- };
- };
- Calendar.prototype.computeFooterOptions = function () {
- return {
- extraClasses: 'fc-footer-toolbar',
- layout: this.opt('footer')
- };
- };
- // can be called repeatedly and Header will rerender
- Calendar.prototype.renderHeader = function () {
- var header = this.header;
- header.setToolbarOptions(this.computeHeaderOptions());
- header.render();
- if (header.el) {
- this.el.prepend(header.el);
- }
- };
- // can be called repeatedly and Footer will rerender
- Calendar.prototype.renderFooter = function () {
- var footer = this.footer;
- footer.setToolbarOptions(this.computeFooterOptions());
- footer.render();
- if (footer.el) {
- this.el.append(footer.el);
- }
- };
- Calendar.prototype.setToolbarsTitle = function (title) {
- this.toolbarsManager.proxyCall('updateTitle', title);
- };
- Calendar.prototype.updateToolbarButtons = function (dateProfile) {
- var now = this.getNow();
- var view = this.view;
- var todayInfo = view.dateProfileGenerator.build(now);
- var prevInfo = view.dateProfileGenerator.buildPrev(view.get('dateProfile'));
- var nextInfo = view.dateProfileGenerator.buildNext(view.get('dateProfile'));
- this.toolbarsManager.proxyCall((todayInfo.isValid && !dateProfile.currentUnzonedRange.containsDate(now)) ?
- 'enableButton' :
- 'disableButton', 'today');
- this.toolbarsManager.proxyCall(prevInfo.isValid ?
- 'enableButton' :
- 'disableButton', 'prev');
- this.toolbarsManager.proxyCall(nextInfo.isValid ?
- 'enableButton' :
- 'disableButton', 'next');
- };
- Calendar.prototype.queryToolbarsHeight = function () {
- return this.toolbarsManager.items.reduce(function (accumulator, toolbar) {
- var toolbarHeight = toolbar.el ? toolbar.el.outerHeight(true) : 0; // includes margin
- return accumulator + toolbarHeight;
- }, 0);
- };
- // Selection
- // -----------------------------------------------------------------------------------------------------------------
- // this public method receives start/end dates in any format, with any timezone
- Calendar.prototype.select = function (zonedStartInput, zonedEndInput) {
- this.view.select(this.buildSelectFootprint.apply(this, arguments));
- };
- Calendar.prototype.unselect = function () {
- if (this.view) {
- this.view.unselect();
- }
- };
- // Given arguments to the select method in the API, returns a span (unzoned start/end and other info)
- Calendar.prototype.buildSelectFootprint = function (zonedStartInput, zonedEndInput) {
- var start = this.moment(zonedStartInput).stripZone();
- var end;
- if (zonedEndInput) {
- end = this.moment(zonedEndInput).stripZone();
- }
- else if (start.hasTime()) {
- end = start.clone().add(this.defaultTimedEventDuration);
- }
- else {
- end = start.clone().add(this.defaultAllDayEventDuration);
- }
- return new ComponentFootprint_1.default(new UnzonedRange_1.default(start, end), !start.hasTime());
- };
- // Date Utils
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.initMomentInternals = function () {
- var _this = this;
- this.defaultAllDayEventDuration = moment.duration(this.opt('defaultAllDayEventDuration'));
- this.defaultTimedEventDuration = moment.duration(this.opt('defaultTimedEventDuration'));
- // Called immediately, and when any of the options change.
- // Happens before any internal objects rebuild or rerender, because this is very core.
- this.optionsManager.watch('buildingMomentLocale', [
- '?locale', '?monthNames', '?monthNamesShort', '?dayNames', '?dayNamesShort',
- '?firstDay', '?weekNumberCalculation'
- ], function (opts) {
- var weekNumberCalculation = opts.weekNumberCalculation;
- var firstDay = opts.firstDay;
- var _week;
- // normalize
- if (weekNumberCalculation === 'iso') {
- weekNumberCalculation = 'ISO'; // normalize
- }
- var localeData = Object.create(// make a cheap copy
- locale_1.getMomentLocaleData(opts.locale) // will fall back to en
- );
- if (opts.monthNames) {
- localeData._months = opts.monthNames;
- }
- if (opts.monthNamesShort) {
- localeData._monthsShort = opts.monthNamesShort;
- }
- if (opts.dayNames) {
- localeData._weekdays = opts.dayNames;
- }
- if (opts.dayNamesShort) {
- localeData._weekdaysShort = opts.dayNamesShort;
- }
- if (firstDay == null && weekNumberCalculation === 'ISO') {
- firstDay = 1;
- }
- if (firstDay != null) {
- _week = Object.create(localeData._week); // _week: { dow: # }
- _week.dow = firstDay;
- localeData._week = _week;
- }
- if (weekNumberCalculation === 'ISO' ||
- weekNumberCalculation === 'local' ||
- typeof weekNumberCalculation === 'function') {
- localeData._fullCalendar_weekCalc = weekNumberCalculation; // moment-ext will know what to do with it
- }
- _this.localeData = localeData;
- // If the internal current date object already exists, move to new locale.
- // We do NOT need to do this technique for event dates, because this happens when converting to "segments".
- if (_this.currentDate) {
- _this.localizeMoment(_this.currentDate); // sets to localeData
- }
- });
- };
- // Builds a moment using the settings of the current calendar: timezone and locale.
- // Accepts anything the vanilla moment() constructor accepts.
- Calendar.prototype.moment = function () {
- var args = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- args[_i] = arguments[_i];
- }
- var mom;
- if (this.opt('timezone') === 'local') {
- mom = moment_ext_1.default.apply(null, args);
- // Force the moment to be local, because momentExt doesn't guarantee it.
- if (mom.hasTime()) {
- mom.local();
- }
- }
- else if (this.opt('timezone') === 'UTC') {
- mom = moment_ext_1.default.utc.apply(null, args); // process as UTC
- }
- else {
- mom = moment_ext_1.default.parseZone.apply(null, args); // let the input decide the zone
- }
- this.localizeMoment(mom); // TODO
- return mom;
- };
- Calendar.prototype.msToMoment = function (ms, forceAllDay) {
- var mom = moment_ext_1.default.utc(ms); // TODO: optimize by using Date.UTC
- if (forceAllDay) {
- mom.stripTime();
- }
- else {
- mom = this.applyTimezone(mom); // may or may not apply locale
- }
- this.localizeMoment(mom);
- return mom;
- };
- Calendar.prototype.msToUtcMoment = function (ms, forceAllDay) {
- var mom = moment_ext_1.default.utc(ms); // TODO: optimize by using Date.UTC
- if (forceAllDay) {
- mom.stripTime();
- }
- this.localizeMoment(mom);
- return mom;
- };
- // Updates the given moment's locale settings to the current calendar locale settings.
- Calendar.prototype.localizeMoment = function (mom) {
- mom._locale = this.localeData;
- };
- // Returns a boolean about whether or not the calendar knows how to calculate
- // the timezone offset of arbitrary dates in the current timezone.
- Calendar.prototype.getIsAmbigTimezone = function () {
- return this.opt('timezone') !== 'local' && this.opt('timezone') !== 'UTC';
- };
- // Returns a copy of the given date in the current timezone. Has no effect on dates without times.
- Calendar.prototype.applyTimezone = function (date) {
- if (!date.hasTime()) {
- return date.clone();
- }
- var zonedDate = this.moment(date.toArray());
- var timeAdjust = date.time().asMilliseconds() - zonedDate.time().asMilliseconds();
- var adjustedZonedDate;
- // Safari sometimes has problems with this coersion when near DST. Adjust if necessary. (bug #2396)
- if (timeAdjust) {
- adjustedZonedDate = zonedDate.clone().add(timeAdjust); // add milliseconds
- if (date.time().asMilliseconds() - adjustedZonedDate.time().asMilliseconds() === 0) {
- zonedDate = adjustedZonedDate;
- }
- }
- return zonedDate;
- };
- /*
- Assumes the footprint is non-open-ended.
- */
- Calendar.prototype.footprintToDateProfile = function (componentFootprint, ignoreEnd) {
- if (ignoreEnd === void 0) { ignoreEnd = false; }
- var start = moment_ext_1.default.utc(componentFootprint.unzonedRange.startMs);
- var end;
- if (!ignoreEnd) {
- end = moment_ext_1.default.utc(componentFootprint.unzonedRange.endMs);
- }
- if (componentFootprint.isAllDay) {
- start.stripTime();
- if (end) {
- end.stripTime();
- }
- }
- else {
- start = this.applyTimezone(start);
- if (end) {
- end = this.applyTimezone(end);
- }
- }
- return new EventDateProfile_1.default(start, end, this);
- };
- // Returns a moment for the current date, as defined by the client's computer or from the `now` option.
- // Will return an moment with an ambiguous timezone.
- Calendar.prototype.getNow = function () {
- var now = this.opt('now');
- if (typeof now === 'function') {
- now = now();
- }
- return this.moment(now).stripZone();
- };
- // Produces a human-readable string for the given duration.
- // Side-effect: changes the locale of the given duration.
- Calendar.prototype.humanizeDuration = function (duration) {
- return duration.locale(this.opt('locale')).humanize();
- };
- // will return `null` if invalid range
- Calendar.prototype.parseUnzonedRange = function (rangeInput) {
- var start = null;
- var end = null;
- if (rangeInput.start) {
- start = this.moment(rangeInput.start).stripZone();
- }
- if (rangeInput.end) {
- end = this.moment(rangeInput.end).stripZone();
- }
- if (!start && !end) {
- return null;
- }
- if (start && end && end.isBefore(start)) {
- return null;
- }
- return new UnzonedRange_1.default(start, end);
- };
- // Event-Date Utilities
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.initEventManager = function () {
- var _this = this;
- var eventManager = new EventManager_1.default(this);
- var rawSources = this.opt('eventSources') || [];
- var singleRawSource = this.opt('events');
- this.eventManager = eventManager;
- if (singleRawSource) {
- rawSources.unshift(singleRawSource);
- }
- eventManager.on('release', function (eventsPayload) {
- _this.trigger('eventsReset', eventsPayload);
- });
- eventManager.freeze();
- rawSources.forEach(function (rawSource) {
- var source = EventSourceParser_1.default.parse(rawSource, _this);
- if (source) {
- eventManager.addSource(source);
- }
- });
- eventManager.thaw();
- };
- Calendar.prototype.requestEvents = function (start, end) {
- return this.eventManager.requestEvents(start, end, this.opt('timezone'), !this.opt('lazyFetching'));
- };
- // Get an event's normalized end date. If not present, calculate it from the defaults.
- Calendar.prototype.getEventEnd = function (event) {
- if (event.end) {
- return event.end.clone();
- }
- else {
- return this.getDefaultEventEnd(event.allDay, event.start);
- }
- };
- // 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, zonedStart) {
- var end = zonedStart.clone();
- if (allDay) {
- end.stripTime().add(this.defaultAllDayEventDuration);
- }
- else {
- end.add(this.defaultTimedEventDuration);
- }
- if (this.getIsAmbigTimezone()) {
- end.stripZone(); // we don't know what the tzo should be
- }
- return end;
- };
- // Public Events API
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.rerenderEvents = function () {
- this.view.flash('displayingEvents');
- };
- Calendar.prototype.refetchEvents = function () {
- this.eventManager.refetchAllSources();
- };
- Calendar.prototype.renderEvents = function (eventInputs, isSticky) {
- this.eventManager.freeze();
- for (var i = 0; i < eventInputs.length; i++) {
- this.renderEvent(eventInputs[i], isSticky);
- }
- this.eventManager.thaw();
- };
- Calendar.prototype.renderEvent = function (eventInput, isSticky) {
- if (isSticky === void 0) { isSticky = false; }
- var eventManager = this.eventManager;
- var eventDef = EventDefParser_1.default.parse(eventInput, eventInput.source || eventManager.stickySource);
- if (eventDef) {
- eventManager.addEventDef(eventDef, isSticky);
- }
- };
- // legacyQuery operates on legacy event instance objects
- Calendar.prototype.removeEvents = function (legacyQuery) {
- var eventManager = this.eventManager;
- var legacyInstances = [];
- var idMap = {};
- var eventDef;
- var i;
- if (legacyQuery == null) {
- eventManager.removeAllEventDefs(); // persist=true
- }
- else {
- eventManager.getEventInstances().forEach(function (eventInstance) {
- legacyInstances.push(eventInstance.toLegacy());
- });
- legacyInstances = filterLegacyEventInstances(legacyInstances, legacyQuery);
- // compute unique IDs
- for (i = 0; i < legacyInstances.length; i++) {
- eventDef = this.eventManager.getEventDefByUid(legacyInstances[i]._id);
- idMap[eventDef.id] = true;
- }
- eventManager.freeze();
- for (i in idMap) {
- eventManager.removeEventDefsById(i); // persist=true
- }
- eventManager.thaw();
- }
- };
- // legacyQuery operates on legacy event instance objects
- Calendar.prototype.clientEvents = function (legacyQuery) {
- var legacyEventInstances = [];
- this.eventManager.getEventInstances().forEach(function (eventInstance) {
- legacyEventInstances.push(eventInstance.toLegacy());
- });
- return filterLegacyEventInstances(legacyEventInstances, legacyQuery);
- };
- Calendar.prototype.updateEvents = function (eventPropsArray) {
- this.eventManager.freeze();
- for (var i = 0; i < eventPropsArray.length; i++) {
- this.updateEvent(eventPropsArray[i]);
- }
- this.eventManager.thaw();
- };
- Calendar.prototype.updateEvent = function (eventProps) {
- var eventDef = this.eventManager.getEventDefByUid(eventProps._id);
- var eventInstance;
- var eventDefMutation;
- if (eventDef instanceof SingleEventDef_1.default) {
- eventInstance = eventDef.buildInstance();
- eventDefMutation = EventDefMutation_1.default.createFromRawProps(eventInstance, eventProps, // raw props
- null // largeUnit -- who uses it?
- );
- this.eventManager.mutateEventsWithId(eventDef.id, eventDefMutation); // will release
- }
- };
- // Public Event Sources API
- // ------------------------------------------------------------------------------------
- Calendar.prototype.getEventSources = function () {
- return this.eventManager.otherSources.slice(); // clone
- };
- Calendar.prototype.getEventSourceById = function (id) {
- return this.eventManager.getSourceById(EventSource_1.default.normalizeId(id));
- };
- Calendar.prototype.addEventSource = function (sourceInput) {
- var source = EventSourceParser_1.default.parse(sourceInput, this);
- if (source) {
- this.eventManager.addSource(source);
- }
- };
- Calendar.prototype.removeEventSources = function (sourceMultiQuery) {
- var eventManager = this.eventManager;
- var sources;
- var i;
- if (sourceMultiQuery == null) {
- this.eventManager.removeAllSources();
- }
- else {
- sources = eventManager.multiQuerySources(sourceMultiQuery);
- eventManager.freeze();
- for (i = 0; i < sources.length; i++) {
- eventManager.removeSource(sources[i]);
- }
- eventManager.thaw();
- }
- };
- Calendar.prototype.removeEventSource = function (sourceQuery) {
- var eventManager = this.eventManager;
- var sources = eventManager.querySources(sourceQuery);
- var i;
- eventManager.freeze();
- for (i = 0; i < sources.length; i++) {
- eventManager.removeSource(sources[i]);
- }
- eventManager.thaw();
- };
- Calendar.prototype.refetchEventSources = function (sourceMultiQuery) {
- var eventManager = this.eventManager;
- var sources = eventManager.multiQuerySources(sourceMultiQuery);
- var i;
- eventManager.freeze();
- for (i = 0; i < sources.length; i++) {
- eventManager.refetchSource(sources[i]);
- }
- eventManager.thaw();
- };
- // not for internal use. use options module directly instead.
- Calendar.defaults = options_1.globalDefaults;
- Calendar.englishDefaults = options_1.englishDefaults;
- Calendar.rtlDefaults = options_1.rtlDefaults;
- return Calendar;
-}());
-exports.default = Calendar;
-EmitterMixin_1.default.mixInto(Calendar);
-ListenerMixin_1.default.mixInto(Calendar);
-function filterLegacyEventInstances(legacyEventInstances, legacyQuery) {
- if (legacyQuery == null) {
- return legacyEventInstances;
- }
- else if ($.isFunction(legacyQuery)) {
- return legacyEventInstances.filter(legacyQuery);
- }
- else {
- legacyQuery += ''; // normalize to string
- return legacyEventInstances.filter(function (legacyEventInstance) {
- // soft comparison because id not be normalized to string
- // tslint:disable-next-line
- return legacyEventInstance.id == legacyQuery ||
- legacyEventInstance._id === legacyQuery; // can specify internal id, but must exactly match
- });
- }
-}
-
-
-/***/ }),
-/* 221 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var moment = __webpack_require__(0);
-var util_1 = __webpack_require__(4);
-var UnzonedRange_1 = __webpack_require__(5);
-var DateProfileGenerator = /** @class */ (function () {
- function DateProfileGenerator(_view) {
- this._view = _view;
- }
- DateProfileGenerator.prototype.opt = function (name) {
- return this._view.opt(name);
- };
- DateProfileGenerator.prototype.trimHiddenDays = function (unzonedRange) {
- return this._view.trimHiddenDays(unzonedRange);
- };
- DateProfileGenerator.prototype.msToUtcMoment = function (ms, forceAllDay) {
- return this._view.calendar.msToUtcMoment(ms, forceAllDay);
- };
- /* Date Range Computation
- ------------------------------------------------------------------------------------------------------------------*/
- // Builds a structure with info about what the dates/ranges will be for the "prev" view.
- DateProfileGenerator.prototype.buildPrev = function (currentDateProfile) {
- var prevDate = currentDateProfile.date.clone()
- .startOf(currentDateProfile.currentRangeUnit)
- .subtract(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) {
- var nextDate = currentDateProfile.date.clone()
- .startOf(currentDateProfile.currentRangeUnit)
- .add(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 (date, direction, forceToValid) {
- if (forceToValid === void 0) { forceToValid = false; }
- var isDateAllDay = !date.hasTime();
- var validUnzonedRange;
- var minTime = null;
- var maxTime = null;
- var currentInfo;
- var isRangeAllDay;
- var renderUnzonedRange;
- var activeUnzonedRange;
- var isValid;
- validUnzonedRange = this.buildValidRange();
- validUnzonedRange = this.trimHiddenDays(validUnzonedRange);
- if (forceToValid) {
- date = this.msToUtcMoment(validUnzonedRange.constrainDate(date), // returns MS
- isDateAllDay);
- }
- currentInfo = this.buildCurrentRangeInfo(date, direction);
- isRangeAllDay = /^(year|month|week|day)$/.test(currentInfo.unit);
- renderUnzonedRange = this.buildRenderRange(this.trimHiddenDays(currentInfo.unzonedRange), currentInfo.unit, isRangeAllDay);
- renderUnzonedRange = this.trimHiddenDays(renderUnzonedRange);
- activeUnzonedRange = renderUnzonedRange.clone();
- if (!this.opt('showNonCurrentDates')) {
- activeUnzonedRange = activeUnzonedRange.intersect(currentInfo.unzonedRange);
- }
- minTime = moment.duration(this.opt('minTime'));
- maxTime = moment.duration(this.opt('maxTime'));
- activeUnzonedRange = this.adjustActiveRange(activeUnzonedRange, minTime, maxTime);
- activeUnzonedRange = activeUnzonedRange.intersect(validUnzonedRange); // might return null
- if (activeUnzonedRange) {
- date = this.msToUtcMoment(activeUnzonedRange.constrainDate(date), // returns MS
- isDateAllDay);
- }
- // it's invalid if the originally requested date is not contained,
- // or if the range is completely outside of the valid range.
- isValid = currentInfo.unzonedRange.intersectsWith(validUnzonedRange);
- 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.
- validUnzonedRange: validUnzonedRange,
- // range the view is formally responsible for.
- // for example, a month view might have 1st-31st, excluding padded dates
- currentUnzonedRange: currentInfo.unzonedRange,
- // 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
- activeUnzonedRange: activeUnzonedRange,
- // date range with a rendered skeleton
- // includes not-active days that need some sort of DOM
- renderUnzonedRange: renderUnzonedRange,
- // 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,
- date: date,
- // 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._view.getUnzonedRangeOption('validRange', this._view.calendar.getNow()) ||
- new UnzonedRange_1.default(); // 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.
- // TODO: accept a MS-time instead of a moment `date`?
- DateProfileGenerator.prototype.buildCurrentRangeInfo = function (date, direction) {
- var viewSpec = this._view.viewSpec;
- var duration = null;
- var unit = null;
- var unzonedRange = null;
- var dayCount;
- if (viewSpec.duration) {
- duration = viewSpec.duration;
- unit = viewSpec.durationUnit;
- unzonedRange = this.buildRangeFromDuration(date, direction, duration, unit);
- }
- else if ((dayCount = this.opt('dayCount'))) {
- unit = 'day';
- unzonedRange = this.buildRangeFromDayCount(date, direction, dayCount);
- }
- else if ((unzonedRange = this.buildCustomVisibleRange(date))) {
- unit = util_1.computeGreatestUnit(unzonedRange.getStart(), unzonedRange.getEnd());
- }
- else {
- duration = this.getFallbackDuration();
- unit = util_1.computeGreatestUnit(duration);
- unzonedRange = this.buildRangeFromDuration(date, direction, duration, unit);
- }
- return { duration: duration, unit: unit, unzonedRange: unzonedRange };
- };
- DateProfileGenerator.prototype.getFallbackDuration = function () {
- return moment.duration({ days: 1 });
- };
- // Returns a new activeUnzonedRange to have time values (un-ambiguate)
- // minTime or maxTime causes the range to expand.
- DateProfileGenerator.prototype.adjustActiveRange = function (unzonedRange, minTime, maxTime) {
- var start = unzonedRange.getStart();
- var end = unzonedRange.getEnd();
- if (this._view.usesMinMaxTime) {
- if (minTime < 0) {
- start.time(0).add(minTime);
- }
- if (maxTime > 24 * 60 * 60 * 1000) {
- end.time(maxTime - (24 * 60 * 60 * 1000));
- }
- }
- return new UnzonedRange_1.default(start, end);
- };
- // Builds the "current" range when it is specified as an explicit duration.
- // `unit` is the already-computed computeGreatestUnit value of duration.
- // TODO: accept a MS-time instead of a moment `date`?
- DateProfileGenerator.prototype.buildRangeFromDuration = function (date, direction, duration, unit) {
- var alignment = this.opt('dateAlignment');
- var dateIncrementInput;
- var dateIncrementDuration;
- var start;
- var end;
- var res;
- // compute what the alignment should be
- if (!alignment) {
- dateIncrementInput = this.opt('dateIncrement');
- if (dateIncrementInput) {
- dateIncrementDuration = moment.duration(dateIncrementInput);
- // use the smaller of the two units
- if (dateIncrementDuration < duration) {
- alignment = util_1.computeDurationGreatestUnit(dateIncrementDuration, dateIncrementInput);
- }
- else {
- alignment = unit;
- }
- }
- else {
- alignment = unit;
- }
- }
- // if the view displays a single day or smaller
- if (duration.as('days') <= 1) {
- if (this._view.isHiddenDay(start)) {
- start = this._view.skipHiddenDays(start, direction);
- start.startOf('day');
- }
- }
- function computeRes() {
- start = date.clone().startOf(alignment);
- end = start.clone().add(duration);
- res = new UnzonedRange_1.default(start, end);
- }
- computeRes();
- // if range is completely enveloped by hidden days, go past the hidden days
- if (!this.trimHiddenDays(res)) {
- date = this._view.skipHiddenDays(date, direction);
- computeRes();
- }
- return res;
- };
- // Builds the "current" range when a dayCount is specified.
- // TODO: accept a MS-time instead of a moment `date`?
- DateProfileGenerator.prototype.buildRangeFromDayCount = function (date, direction, dayCount) {
- var customAlignment = this.opt('dateAlignment');
- var runningCount = 0;
- var start = date.clone();
- var end;
- if (customAlignment) {
- start.startOf(customAlignment);
- }
- start.startOf('day');
- start = this._view.skipHiddenDays(start, direction);
- end = start.clone();
- do {
- end.add(1, 'day');
- if (!this._view.isHiddenDay(end)) {
- runningCount++;
- }
- } while (runningCount < dayCount);
- return new UnzonedRange_1.default(start, end);
- };
- // Builds a normalized range object for the "visible" range,
- // which is a way to define the currentUnzonedRange and activeUnzonedRange at the same time.
- // TODO: accept a MS-time instead of a moment `date`?
- DateProfileGenerator.prototype.buildCustomVisibleRange = function (date) {
- var visibleUnzonedRange = this._view.getUnzonedRangeOption('visibleRange', this._view.calendar.applyTimezone(date) // correct zone. also generates new obj that avoids mutations
- );
- if (visibleUnzonedRange && (visibleUnzonedRange.startMs == null || visibleUnzonedRange.endMs == null)) {
- return null;
- }
- return visibleUnzonedRange;
- };
- // 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 (currentUnzonedRange, currentRangeUnit, isRangeAllDay) {
- return currentUnzonedRange.clone();
- };
- // 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.opt('dateIncrement');
- var customAlignment;
- if (dateIncrementInput) {
- return moment.duration(dateIncrementInput);
- }
- else if ((customAlignment = this.opt('dateAlignment'))) {
- return moment.duration(1, customAlignment);
- }
- else if (fallback) {
- return fallback;
- }
- else {
- return moment.duration({ days: 1 });
- }
- };
- return DateProfileGenerator;
-}());
-exports.default = DateProfileGenerator;
-
-
-/***/ }),
-/* 222 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var $ = __webpack_require__(3);
-var moment = __webpack_require__(0);
-var exportHooks = __webpack_require__(16);
-var util_1 = __webpack_require__(4);
-var moment_ext_1 = __webpack_require__(10);
-var ListenerMixin_1 = __webpack_require__(7);
-var HitDragListener_1 = __webpack_require__(23);
-var SingleEventDef_1 = __webpack_require__(13);
-var EventInstanceGroup_1 = __webpack_require__(18);
-var EventSource_1 = __webpack_require__(6);
-var Interaction_1 = __webpack_require__(15);
-var ExternalDropping = /** @class */ (function (_super) {
- tslib_1.__extends(ExternalDropping, _super);
- function ExternalDropping() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.isDragging = false; // jqui-dragging an external element? boolean
- return _this;
- }
- /*
- component impements:
- - eventRangesToEventFootprints
- - isEventInstanceGroupAllowed
- - isExternalInstanceGroupAllowed
- - renderDrag
- - unrenderDrag
- */
- ExternalDropping.prototype.end = function () {
- if (this.dragListener) {
- this.dragListener.endInteraction();
- }
- };
- ExternalDropping.prototype.bindToDocument = function () {
- this.listenTo($(document), {
- dragstart: this.handleDragStart,
- sortstart: this.handleDragStart // jqui
- });
- };
- ExternalDropping.prototype.unbindFromDocument = function () {
- this.stopListeningTo($(document));
- };
- // Called when a jQuery UI drag is initiated anywhere in the DOM
- ExternalDropping.prototype.handleDragStart = function (ev, ui) {
- var el;
- var accept;
- if (this.opt('droppable')) {
- el = $((ui ? ui.item : null) || ev.target);
- // Test that the dragged element passes the dropAccept selector or filter function.
- // FYI, the default is "*" (matches all)
- accept = this.opt('dropAccept');
- if ($.isFunction(accept) ? accept.call(el[0], el) : el.is(accept)) {
- if (!this.isDragging) {
- this.listenToExternalDrag(el, ev, ui);
- }
- }
- }
- };
- // Called when a jQuery UI drag starts and it needs to be monitored for dropping
- ExternalDropping.prototype.listenToExternalDrag = function (el, ev, ui) {
- var _this = this;
- var component = this.component;
- var view = this.view;
- var meta = getDraggedElMeta(el); // extra data about event drop, including possible event to create
- var singleEventDef; // a null value signals an unsuccessful drag
- // listener that tracks mouse movement over date-associated pixel regions
- var dragListener = this.dragListener = new HitDragListener_1.default(component, {
- interactionStart: function () {
- _this.isDragging = true;
- },
- hitOver: function (hit) {
- var isAllowed = true;
- var hitFootprint = hit.component.getSafeHitFootprint(hit); // hit might not belong to this grid
- var mutatedEventInstanceGroup;
- if (hitFootprint) {
- singleEventDef = _this.computeExternalDrop(hitFootprint, meta);
- if (singleEventDef) {
- mutatedEventInstanceGroup = new EventInstanceGroup_1.default(singleEventDef.buildInstances());
- isAllowed = meta.eventProps ? // isEvent?
- component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup) :
- component.isExternalInstanceGroupAllowed(mutatedEventInstanceGroup);
- }
- else {
- isAllowed = false;
- }
- }
- else {
- isAllowed = false;
- }
- if (!isAllowed) {
- singleEventDef = null;
- util_1.disableCursor();
- }
- if (singleEventDef) {
- component.renderDrag(// called without a seg parameter
- component.eventRangesToEventFootprints(mutatedEventInstanceGroup.sliceRenderRanges(component.dateProfile.renderUnzonedRange, view.calendar)));
- }
- },
- hitOut: function () {
- singleEventDef = null; // signal unsuccessful
- },
- hitDone: function () {
- util_1.enableCursor();
- component.unrenderDrag();
- },
- interactionEnd: function (ev) {
- if (singleEventDef) {
- view.reportExternalDrop(singleEventDef, Boolean(meta.eventProps), // isEvent
- Boolean(meta.stick), // isSticky
- el, ev, ui);
- }
- _this.isDragging = false;
- _this.dragListener = null;
- }
- });
- dragListener.startDrag(ev); // start listening immediately
- };
- // Given a hit to be dropped upon, and misc data associated with the jqui drag (guaranteed to be a plain object),
- // returns the zoned start/end dates for the event that would result from the hypothetical drop. end might be null.
- // Returning a null value signals an invalid drop hit.
- // DOES NOT consider overlap/constraint.
- // Assumes both footprints are non-open-ended.
- ExternalDropping.prototype.computeExternalDrop = function (componentFootprint, meta) {
- var calendar = this.view.calendar;
- var start = moment_ext_1.default.utc(componentFootprint.unzonedRange.startMs).stripZone();
- var end;
- var eventDef;
- if (componentFootprint.isAllDay) {
- // if dropped on an all-day span, and element's metadata specified a time, set it
- if (meta.startTime) {
- start.time(meta.startTime);
- }
- else {
- start.stripTime();
- }
- }
- if (meta.duration) {
- end = start.clone().add(meta.duration);
- }
- start = calendar.applyTimezone(start);
- if (end) {
- end = calendar.applyTimezone(end);
- }
- eventDef = SingleEventDef_1.default.parse($.extend({}, meta.eventProps, {
- start: start,
- end: end
- }), new EventSource_1.default(calendar));
- return eventDef;
- };
- return ExternalDropping;
-}(Interaction_1.default));
-exports.default = ExternalDropping;
-ListenerMixin_1.default.mixInto(ExternalDropping);
-/* External-Dragging-Element Data
-----------------------------------------------------------------------------------------------------------------------*/
-// Require all HTML5 data-* attributes used by FullCalendar to have this prefix.
-// A value of '' will query attributes like data-event. A value of 'fc' will query attributes like data-fc-event.
-exportHooks.dataAttrPrefix = '';
-// Given a jQuery element that might represent a dragged FullCalendar event, returns an intermediate data structure
-// to be used for Event Object creation.
-// A defined `.eventProps`, even when empty, indicates that an event should be created.
-function getDraggedElMeta(el) {
- var prefix = exportHooks.dataAttrPrefix;
- var eventProps; // properties for creating the event, not related to date/time
- var startTime; // a Duration
- var duration;
- var stick;
- if (prefix) {
- prefix += '-';
- }
- eventProps = el.data(prefix + 'event') || null;
- if (eventProps) {
- if (typeof eventProps === 'object') {
- eventProps = $.extend({}, eventProps); // make a copy
- }
- else {
- eventProps = {};
- }
- // pluck special-cased date/time properties
- startTime = eventProps.start;
- if (startTime == null) {
- startTime = eventProps.time;
- } // accept 'time' as well
- duration = eventProps.duration;
- stick = eventProps.stick;
- delete eventProps.start;
- delete eventProps.time;
- delete eventProps.duration;
- delete eventProps.stick;
- }
- // fallback to standalone attribute values for each of the date/time properties
- if (startTime == null) {
- startTime = el.data(prefix + 'start');
- }
- if (startTime == null) {
- startTime = el.data(prefix + 'time');
- } // accept 'time' as well
- if (duration == null) {
- duration = el.data(prefix + 'duration');
- }
- if (stick == null) {
- stick = el.data(prefix + 'stick');
- }
- // massage into correct data types
- startTime = startTime != null ? moment.duration(startTime) : null;
- duration = duration != null ? moment.duration(duration) : null;
- stick = Boolean(stick);
- return { eventProps: eventProps, startTime: startTime, duration: duration, stick: stick };
-}
-
-
-/***/ }),
-/* 223 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var $ = __webpack_require__(3);
-var util_1 = __webpack_require__(4);
-var EventDefMutation_1 = __webpack_require__(37);
-var EventDefDateMutation_1 = __webpack_require__(50);
-var HitDragListener_1 = __webpack_require__(23);
-var Interaction_1 = __webpack_require__(15);
-var EventResizing = /** @class */ (function (_super) {
- tslib_1.__extends(EventResizing, _super);
- /*
- component impements:
- - bindSegHandlerToEl
- - publiclyTrigger
- - diffDates
- - eventRangesToEventFootprints
- - isEventInstanceGroupAllowed
- - getSafeHitFootprint
- */
- function EventResizing(component, eventPointing) {
- var _this = _super.call(this, component) || this;
- _this.isResizing = false;
- _this.eventPointing = eventPointing;
- return _this;
- }
- EventResizing.prototype.end = function () {
- if (this.dragListener) {
- this.dragListener.endInteraction();
- }
- };
- EventResizing.prototype.bindToEl = function (el) {
- var component = this.component;
- component.bindSegHandlerToEl(el, 'mousedown', this.handleMouseDown.bind(this));
- component.bindSegHandlerToEl(el, 'touchstart', this.handleTouchStart.bind(this));
- };
- EventResizing.prototype.handleMouseDown = function (seg, ev) {
- if (this.component.canStartResize(seg, ev)) {
- this.buildDragListener(seg, $(ev.target).is('.fc-start-resizer'))
- .startInteraction(ev, { distance: 5 });
- }
- };
- EventResizing.prototype.handleTouchStart = function (seg, ev) {
- if (this.component.canStartResize(seg, ev)) {
- this.buildDragListener(seg, $(ev.target).is('.fc-start-resizer'))
- .startInteraction(ev);
- }
- };
- // Creates a listener that tracks the user as they resize an event segment.
- // Generic enough to work with any type of Grid.
- EventResizing.prototype.buildDragListener = function (seg, isStart) {
- var _this = this;
- var component = this.component;
- var view = this.view;
- var calendar = view.calendar;
- var eventManager = calendar.eventManager;
- var el = seg.el;
- var eventDef = seg.footprint.eventDef;
- var eventInstance = seg.footprint.eventInstance;
- var isDragging;
- var resizeMutation; // zoned event date properties. falsy if invalid resize
- // Tracks mouse movement over the *grid's* coordinate map
- var dragListener = this.dragListener = new HitDragListener_1.default(component, {
- scroll: this.opt('dragScroll'),
- subjectEl: el,
- interactionStart: function () {
- isDragging = false;
- },
- dragStart: function (ev) {
- isDragging = true;
- // ensure a mouseout on the manipulated event has been reported
- _this.eventPointing.handleMouseout(seg, ev);
- _this.segResizeStart(seg, ev);
- },
- hitOver: function (hit, isOrig, origHit) {
- var isAllowed = true;
- var origHitFootprint = component.getSafeHitFootprint(origHit);
- var hitFootprint = component.getSafeHitFootprint(hit);
- var mutatedEventInstanceGroup;
- if (origHitFootprint && hitFootprint) {
- resizeMutation = isStart ?
- _this.computeEventStartResizeMutation(origHitFootprint, hitFootprint, seg.footprint) :
- _this.computeEventEndResizeMutation(origHitFootprint, hitFootprint, seg.footprint);
- if (resizeMutation) {
- mutatedEventInstanceGroup = eventManager.buildMutatedEventInstanceGroup(eventDef.id, resizeMutation);
- isAllowed = component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup);
- }
- else {
- isAllowed = false;
- }
- }
- else {
- isAllowed = false;
- }
- if (!isAllowed) {
- resizeMutation = null;
- util_1.disableCursor();
- }
- else if (resizeMutation.isEmpty()) {
- // no change. (FYI, event dates might have zones)
- resizeMutation = null;
- }
- if (resizeMutation) {
- view.hideEventsWithId(seg.footprint.eventDef.id);
- view.renderEventResize(component.eventRangesToEventFootprints(mutatedEventInstanceGroup.sliceRenderRanges(component.dateProfile.renderUnzonedRange, calendar)), seg);
- }
- },
- hitOut: function () {
- resizeMutation = null;
- },
- hitDone: function () {
- view.unrenderEventResize(seg);
- view.showEventsWithId(seg.footprint.eventDef.id);
- util_1.enableCursor();
- },
- interactionEnd: function (ev) {
- if (isDragging) {
- _this.segResizeStop(seg, ev);
- }
- if (resizeMutation) {
- // no need to re-show original, will rerender all anyways. esp important if eventRenderWait
- view.reportEventResize(eventInstance, resizeMutation, el, ev);
- }
- _this.dragListener = null;
- }
- });
- return dragListener;
- };
- // Called before event segment resizing starts
- EventResizing.prototype.segResizeStart = function (seg, ev) {
- this.isResizing = true;
- this.component.publiclyTrigger('eventResizeStart', {
- context: seg.el[0],
- args: [
- seg.footprint.getEventLegacy(),
- ev,
- {},
- this.view
- ]
- });
- };
- // Called after event segment resizing stops
- EventResizing.prototype.segResizeStop = function (seg, ev) {
- this.isResizing = false;
- this.component.publiclyTrigger('eventResizeStop', {
- context: seg.el[0],
- args: [
- seg.footprint.getEventLegacy(),
- ev,
- {},
- this.view
- ]
- });
- };
- // Returns new date-information for an event segment being resized from its start
- EventResizing.prototype.computeEventStartResizeMutation = function (startFootprint, endFootprint, origEventFootprint) {
- var origRange = origEventFootprint.componentFootprint.unzonedRange;
- var startDelta = this.component.diffDates(endFootprint.unzonedRange.getStart(), startFootprint.unzonedRange.getStart());
- var dateMutation;
- var eventDefMutation;
- if (origRange.getStart().add(startDelta) < origRange.getEnd()) {
- dateMutation = new EventDefDateMutation_1.default();
- dateMutation.setStartDelta(startDelta);
- eventDefMutation = new EventDefMutation_1.default();
- eventDefMutation.setDateMutation(dateMutation);
- return eventDefMutation;
- }
- return false;
- };
- // Returns new date-information for an event segment being resized from its end
- EventResizing.prototype.computeEventEndResizeMutation = function (startFootprint, endFootprint, origEventFootprint) {
- var origRange = origEventFootprint.componentFootprint.unzonedRange;
- var endDelta = this.component.diffDates(endFootprint.unzonedRange.getEnd(), startFootprint.unzonedRange.getEnd());
- var dateMutation;
- var eventDefMutation;
- if (origRange.getEnd().add(endDelta) > origRange.getStart()) {
- dateMutation = new EventDefDateMutation_1.default();
- dateMutation.setEndDelta(endDelta);
- eventDefMutation = new EventDefMutation_1.default();
- eventDefMutation.setDateMutation(dateMutation);
- return eventDefMutation;
- }
- return false;
- };
- return EventResizing;
-}(Interaction_1.default));
-exports.default = EventResizing;
-
-
-/***/ }),
-/* 224 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var util_1 = __webpack_require__(4);
-var EventDefMutation_1 = __webpack_require__(37);
-var EventDefDateMutation_1 = __webpack_require__(50);
-var DragListener_1 = __webpack_require__(54);
-var HitDragListener_1 = __webpack_require__(23);
-var MouseFollower_1 = __webpack_require__(244);
-var Interaction_1 = __webpack_require__(15);
-var EventDragging = /** @class */ (function (_super) {
- tslib_1.__extends(EventDragging, _super);
- /*
- component implements:
- - bindSegHandlerToEl
- - publiclyTrigger
- - diffDates
- - eventRangesToEventFootprints
- - isEventInstanceGroupAllowed
- */
- function EventDragging(component, eventPointing) {
- var _this = _super.call(this, component) || this;
- _this.isDragging = false;
- _this.eventPointing = eventPointing;
- return _this;
- }
- EventDragging.prototype.end = function () {
- if (this.dragListener) {
- this.dragListener.endInteraction();
- }
- };
- EventDragging.prototype.getSelectionDelay = function () {
- var delay = this.opt('eventLongPressDelay');
- if (delay == null) {
- delay = this.opt('longPressDelay'); // fallback
- }
- return delay;
- };
- EventDragging.prototype.bindToEl = function (el) {
- var component = this.component;
- component.bindSegHandlerToEl(el, 'mousedown', this.handleMousedown.bind(this));
- component.bindSegHandlerToEl(el, 'touchstart', this.handleTouchStart.bind(this));
- };
- EventDragging.prototype.handleMousedown = function (seg, ev) {
- if (!this.component.shouldIgnoreMouse() &&
- this.component.canStartDrag(seg, ev)) {
- this.buildDragListener(seg).startInteraction(ev, { distance: 5 });
- }
- };
- EventDragging.prototype.handleTouchStart = function (seg, ev) {
- var component = this.component;
- var settings = {
- delay: this.view.isEventDefSelected(seg.footprint.eventDef) ? // already selected?
- 0 : this.getSelectionDelay()
- };
- if (component.canStartDrag(seg, ev)) {
- this.buildDragListener(seg).startInteraction(ev, settings);
- }
- else if (component.canStartSelection(seg, ev)) {
- this.buildSelectListener(seg).startInteraction(ev, settings);
- }
- };
- // seg isn't draggable, but let's use a generic DragListener
- // simply for the delay, so it can be selected.
- // Has side effect of setting/unsetting `dragListener`
- EventDragging.prototype.buildSelectListener = function (seg) {
- var _this = this;
- var view = this.view;
- var eventDef = seg.footprint.eventDef;
- var eventInstance = seg.footprint.eventInstance; // null for inverse-background events
- if (this.dragListener) {
- return this.dragListener;
- }
- var dragListener = this.dragListener = new DragListener_1.default({
- dragStart: function (ev) {
- if (dragListener.isTouch &&
- !view.isEventDefSelected(eventDef) &&
- eventInstance) {
- // if not previously selected, will fire after a delay. then, select the event
- view.selectEventInstance(eventInstance);
- }
- },
- interactionEnd: function (ev) {
- _this.dragListener = null;
- }
- });
- return dragListener;
- };
- // Builds a listener that will track user-dragging on an event segment.
- // Generic enough to work with any type of Grid.
- // Has side effect of setting/unsetting `dragListener`
- EventDragging.prototype.buildDragListener = function (seg) {
- var _this = this;
- var component = this.component;
- var view = this.view;
- var calendar = view.calendar;
- var eventManager = calendar.eventManager;
- var el = seg.el;
- var eventDef = seg.footprint.eventDef;
- var eventInstance = seg.footprint.eventInstance; // null for inverse-background events
- var isDragging;
- var mouseFollower; // A clone of the original element that will move with the mouse
- var eventDefMutation;
- if (this.dragListener) {
- return this.dragListener;
- }
- // Tracks mouse movement over the *view's* coordinate map. Allows dragging and dropping between subcomponents
- // of the view.
- var dragListener = this.dragListener = new HitDragListener_1.default(view, {
- scroll: this.opt('dragScroll'),
- subjectEl: el,
- subjectCenter: true,
- interactionStart: function (ev) {
- seg.component = component; // for renderDrag
- isDragging = false;
- mouseFollower = new MouseFollower_1.default(seg.el, {
- additionalClass: 'fc-dragging',
- parentEl: view.el,
- opacity: dragListener.isTouch ? null : _this.opt('dragOpacity'),
- revertDuration: _this.opt('dragRevertDuration'),
- zIndex: 2 // one above the .fc-view
- });
- mouseFollower.hide(); // don't show until we know this is a real drag
- mouseFollower.start(ev);
- },
- dragStart: function (ev) {
- if (dragListener.isTouch &&
- !view.isEventDefSelected(eventDef) &&
- eventInstance) {
- // if not previously selected, will fire after a delay. then, select the event
- view.selectEventInstance(eventInstance);
- }
- isDragging = true;
- // ensure a mouseout on the manipulated event has been reported
- _this.eventPointing.handleMouseout(seg, ev);
- _this.segDragStart(seg, ev);
- view.hideEventsWithId(seg.footprint.eventDef.id);
- },
- hitOver: function (hit, isOrig, origHit) {
- var isAllowed = true;
- var origFootprint;
- var footprint;
- var mutatedEventInstanceGroup;
- // starting hit could be forced (DayGrid.limit)
- if (seg.hit) {
- origHit = seg.hit;
- }
- // hit might not belong to this grid, so query origin grid
- origFootprint = origHit.component.getSafeHitFootprint(origHit);
- footprint = hit.component.getSafeHitFootprint(hit);
- if (origFootprint && footprint) {
- eventDefMutation = _this.computeEventDropMutation(origFootprint, footprint, eventDef);
- if (eventDefMutation) {
- mutatedEventInstanceGroup = eventManager.buildMutatedEventInstanceGroup(eventDef.id, eventDefMutation);
- isAllowed = component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup);
- }
- else {
- isAllowed = false;
- }
- }
- else {
- isAllowed = false;
- }
- if (!isAllowed) {
- eventDefMutation = null;
- util_1.disableCursor();
- }
- // if a valid drop location, have the subclass render a visual indication
- if (eventDefMutation &&
- view.renderDrag(// truthy if rendered something
- component.eventRangesToEventFootprints(mutatedEventInstanceGroup.sliceRenderRanges(component.dateProfile.renderUnzonedRange, calendar)), seg, dragListener.isTouch)) {
- mouseFollower.hide(); // if the subclass is already using a mock event "helper", hide our own
- }
- else {
- mouseFollower.show(); // otherwise, have the helper follow the mouse (no snapping)
- }
- if (isOrig) {
- // needs to have moved hits to be a valid drop
- eventDefMutation = null;
- }
- },
- hitOut: function () {
- view.unrenderDrag(seg); // unrender whatever was done in renderDrag
- mouseFollower.show(); // show in case we are moving out of all hits
- eventDefMutation = null;
- },
- hitDone: function () {
- util_1.enableCursor();
- },
- interactionEnd: function (ev) {
- delete seg.component; // prevent side effects
- // do revert animation if hasn't changed. calls a callback when finished (whether animation or not)
- mouseFollower.stop(!eventDefMutation, function () {
- if (isDragging) {
- view.unrenderDrag(seg);
- _this.segDragStop(seg, ev);
- }
- view.showEventsWithId(seg.footprint.eventDef.id);
- if (eventDefMutation) {
- // no need to re-show original, will rerender all anyways. esp important if eventRenderWait
- view.reportEventDrop(eventInstance, eventDefMutation, el, ev);
- }
- });
- _this.dragListener = null;
- }
- });
- return dragListener;
- };
- // Called before event segment dragging starts
- EventDragging.prototype.segDragStart = function (seg, ev) {
- this.isDragging = true;
- this.component.publiclyTrigger('eventDragStart', {
- context: seg.el[0],
- args: [
- seg.footprint.getEventLegacy(),
- ev,
- {},
- this.view
- ]
- });
- };
- // Called after event segment dragging stops
- EventDragging.prototype.segDragStop = function (seg, ev) {
- this.isDragging = false;
- this.component.publiclyTrigger('eventDragStop', {
- context: seg.el[0],
- args: [
- seg.footprint.getEventLegacy(),
- ev,
- {},
- this.view
- ]
- });
- };
- // DOES NOT consider overlap/constraint
- EventDragging.prototype.computeEventDropMutation = function (startFootprint, endFootprint, eventDef) {
- var eventDefMutation = new EventDefMutation_1.default();
- eventDefMutation.setDateMutation(this.computeEventDateMutation(startFootprint, endFootprint));
- return eventDefMutation;
- };
- EventDragging.prototype.computeEventDateMutation = function (startFootprint, endFootprint) {
- var date0 = startFootprint.unzonedRange.getStart();
- var date1 = endFootprint.unzonedRange.getStart();
- var clearEnd = false;
- var forceTimed = false;
- var forceAllDay = false;
- var dateDelta;
- var dateMutation;
- if (startFootprint.isAllDay !== endFootprint.isAllDay) {
- clearEnd = true;
- if (endFootprint.isAllDay) {
- forceAllDay = true;
- date0.stripTime();
- }
- else {
- forceTimed = true;
- }
- }
- dateDelta = this.component.diffDates(date1, date0);
- dateMutation = new EventDefDateMutation_1.default();
- dateMutation.clearEnd = clearEnd;
- dateMutation.forceTimed = forceTimed;
- dateMutation.forceAllDay = forceAllDay;
- dateMutation.setDateDelta(dateDelta);
- return dateMutation;
- };
- return EventDragging;
-}(Interaction_1.default));
-exports.default = EventDragging;
-
-
-/***/ }),
-/* 225 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var util_1 = __webpack_require__(4);
-var HitDragListener_1 = __webpack_require__(23);
-var ComponentFootprint_1 = __webpack_require__(12);
-var UnzonedRange_1 = __webpack_require__(5);
-var Interaction_1 = __webpack_require__(15);
-var DateSelecting = /** @class */ (function (_super) {
- tslib_1.__extends(DateSelecting, _super);
- /*
- component must implement:
- - bindDateHandlerToEl
- - getSafeHitFootprint
- - renderHighlight
- - unrenderHighlight
- */
- function DateSelecting(component) {
- var _this = _super.call(this, component) || this;
- _this.dragListener = _this.buildDragListener();
- return _this;
- }
- DateSelecting.prototype.end = function () {
- this.dragListener.endInteraction();
- };
- DateSelecting.prototype.getDelay = function () {
- var delay = this.opt('selectLongPressDelay');
- if (delay == null) {
- delay = this.opt('longPressDelay'); // fallback
- }
- return delay;
- };
- DateSelecting.prototype.bindToEl = function (el) {
- var _this = this;
- var component = this.component;
- var dragListener = this.dragListener;
- component.bindDateHandlerToEl(el, 'mousedown', function (ev) {
- if (_this.opt('selectable') && !component.shouldIgnoreMouse()) {
- dragListener.startInteraction(ev, {
- distance: _this.opt('selectMinDistance')
- });
- }
- });
- component.bindDateHandlerToEl(el, 'touchstart', function (ev) {
- if (_this.opt('selectable') && !component.shouldIgnoreTouch()) {
- dragListener.startInteraction(ev, {
- delay: _this.getDelay()
- });
- }
- });
- util_1.preventSelection(el);
- };
- // Creates a listener that tracks the user's drag across day elements, for day selecting.
- DateSelecting.prototype.buildDragListener = function () {
- var _this = this;
- var component = this.component;
- var selectionFootprint; // null if invalid selection
- var dragListener = new HitDragListener_1.default(component, {
- scroll: this.opt('dragScroll'),
- interactionStart: function () {
- selectionFootprint = null;
- },
- dragStart: function (ev) {
- _this.view.unselect(ev); // since we could be rendering a new selection, we want to clear any old one
- },
- hitOver: function (hit, isOrig, origHit) {
- var origHitFootprint;
- var hitFootprint;
- if (origHit) {
- origHitFootprint = component.getSafeHitFootprint(origHit);
- hitFootprint = component.getSafeHitFootprint(hit);
- if (origHitFootprint && hitFootprint) {
- selectionFootprint = _this.computeSelection(origHitFootprint, hitFootprint);
- }
- else {
- selectionFootprint = null;
- }
- if (selectionFootprint) {
- component.renderSelectionFootprint(selectionFootprint);
- }
- else if (selectionFootprint === false) {
- util_1.disableCursor();
- }
- }
- },
- hitOut: function () {
- selectionFootprint = null;
- component.unrenderSelection();
- },
- hitDone: function () {
- util_1.enableCursor();
- },
- interactionEnd: function (ev, isCancelled) {
- if (!isCancelled && selectionFootprint) {
- // the selection will already have been rendered. just report it
- _this.view.reportSelection(selectionFootprint, ev);
- }
- }
- });
- return dragListener;
- };
- // Given the first and last date-spans of a selection, returns another date-span object.
- // Subclasses can override and provide additional data in the span object. Will be passed to renderSelectionFootprint().
- // Will return false if the selection is invalid and this should be indicated to the user.
- // Will return null/undefined if a selection invalid but no error should be reported.
- DateSelecting.prototype.computeSelection = function (footprint0, footprint1) {
- var wholeFootprint = this.computeSelectionFootprint(footprint0, footprint1);
- if (wholeFootprint && !this.isSelectionFootprintAllowed(wholeFootprint)) {
- return false;
- }
- return wholeFootprint;
- };
- // Given two spans, must return the combination of the two.
- // TODO: do this separation of concerns (combining VS validation) for event dnd/resize too.
- // Assumes both footprints are non-open-ended.
- DateSelecting.prototype.computeSelectionFootprint = function (footprint0, footprint1) {
- var ms = [
- footprint0.unzonedRange.startMs,
- footprint0.unzonedRange.endMs,
- footprint1.unzonedRange.startMs,
- footprint1.unzonedRange.endMs
- ];
- ms.sort(util_1.compareNumbers);
- return new ComponentFootprint_1.default(new UnzonedRange_1.default(ms[0], ms[3]), footprint0.isAllDay);
- };
- DateSelecting.prototype.isSelectionFootprintAllowed = function (componentFootprint) {
- return this.component.dateProfile.validUnzonedRange.containsRange(componentFootprint.unzonedRange) &&
- this.view.calendar.constraints.isSelectionFootprintAllowed(componentFootprint);
- };
- return DateSelecting;
-}(Interaction_1.default));
-exports.default = DateSelecting;
-
-
-/***/ }),
-/* 226 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var moment = __webpack_require__(0);
-var $ = __webpack_require__(3);
-var util_1 = __webpack_require__(4);
-var Scroller_1 = __webpack_require__(39);
-var View_1 = __webpack_require__(41);
-var TimeGrid_1 = __webpack_require__(227);
-var DayGrid_1 = __webpack_require__(61);
-var AGENDA_ALL_DAY_EVENT_LIMIT = 5;
-var agendaTimeGridMethods;
-var agendaDayGridMethods;
-/* An abstract class for all agenda-related views. Displays one more columns with time slots running vertically.
-----------------------------------------------------------------------------------------------------------------------*/
-// Is a manager for the TimeGrid subcomponent and possibly the DayGrid subcomponent (if allDaySlot is on).
-// Responsible for managing width/height.
-var AgendaView = /** @class */ (function (_super) {
- tslib_1.__extends(AgendaView, _super);
- function AgendaView(calendar, viewSpec) {
- var _this = _super.call(this, calendar, viewSpec) || this;
- _this.usesMinMaxTime = true; // indicates that minTime/maxTime affects rendering
- _this.timeGrid = _this.instantiateTimeGrid();
- _this.addChild(_this.timeGrid);
- if (_this.opt('allDaySlot')) {
- _this.dayGrid = _this.instantiateDayGrid(); // the all-day subcomponent of this view
- _this.addChild(_this.dayGrid);
- }
- _this.scroller = new Scroller_1.default({
- overflowX: 'hidden',
- overflowY: 'auto'
- });
- return _this;
- }
- // Instantiates the TimeGrid object this view needs. Draws from this.timeGridClass
- AgendaView.prototype.instantiateTimeGrid = function () {
- var timeGrid = new this.timeGridClass(this);
- util_1.copyOwnProps(agendaTimeGridMethods, timeGrid);
- return timeGrid;
- };
- // Instantiates the DayGrid object this view might need. Draws from this.dayGridClass
- AgendaView.prototype.instantiateDayGrid = function () {
- var dayGrid = new this.dayGridClass(this);
- util_1.copyOwnProps(agendaDayGridMethods, dayGrid);
- return dayGrid;
- };
- /* Rendering
- ------------------------------------------------------------------------------------------------------------------*/
- AgendaView.prototype.renderSkeleton = function () {
- var timeGridWrapEl;
- var timeGridEl;
- this.el.addClass('fc-agenda-view').html(this.renderSkeletonHtml());
- this.scroller.render();
- timeGridWrapEl = this.scroller.el.addClass('fc-time-grid-container');
- timeGridEl = $('<div class="fc-time-grid" />').appendTo(timeGridWrapEl);
- this.el.find('.fc-body > tr > td').append(timeGridWrapEl);
- this.timeGrid.headContainerEl = this.el.find('.fc-head-container');
- this.timeGrid.setElement(timeGridEl);
- if (this.dayGrid) {
- this.dayGrid.setElement(this.el.find('.fc-day-grid'));
- // have the day-grid extend it's coordinate area over the <hr> dividing the two grids
- this.dayGrid.bottomCoordPadding = this.dayGrid.el.next('hr').outerHeight();
- }
- };
- AgendaView.prototype.unrenderSkeleton = function () {
- this.timeGrid.removeElement();
- if (this.dayGrid) {
- this.dayGrid.removeElement();
- }
- this.scroller.destroy();
- };
- // Builds the HTML skeleton for the view.
- // The day-grid and time-grid components will render inside containers defined by this HTML.
- AgendaView.prototype.renderSkeletonHtml = function () {
- var theme = this.calendar.theme;
- return '' +
- '<table class="' + theme.getClass('tableGrid') + '">' +
- (this.opt('columnHeader') ?
- '<thead class="fc-head">' +
- '<tr>' +
- '<td class="fc-head-container ' + theme.getClass('widgetHeader') + '"> </td>' +
- '</tr>' +
- '</thead>' :
- '') +
- '<tbody class="fc-body">' +
- '<tr>' +
- '<td class="' + theme.getClass('widgetContent') + '">' +
- (this.dayGrid ?
- '<div class="fc-day-grid"/>' +
- '<hr class="fc-divider ' + theme.getClass('widgetHeader') + '"/>' :
- '') +
- '</td>' +
- '</tr>' +
- '</tbody>' +
- '</table>';
- };
- // Generates an HTML attribute string for setting the width of the axis, if it is known
- AgendaView.prototype.axisStyleAttr = function () {
- if (this.axisWidth != null) {
- return 'style="width:' + this.axisWidth + 'px"';
- }
- return '';
- };
- /* Now Indicator
- ------------------------------------------------------------------------------------------------------------------*/
- AgendaView.prototype.getNowIndicatorUnit = function () {
- return this.timeGrid.getNowIndicatorUnit();
- };
- /* Dimensions
- ------------------------------------------------------------------------------------------------------------------*/
- // Adjusts the vertical dimensions of the view to the specified values
- AgendaView.prototype.updateSize = function (totalHeight, isAuto, isResize) {
- var eventLimit;
- var scrollerHeight;
- var scrollbarWidths;
- _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);
- // make all axis cells line up, and record the width so newly created axis cells will have it
- this.axisWidth = util_1.matchCellWidths(this.el.find('.fc-axis'));
- // hack to give the view some height prior to timeGrid's columns being rendered
- // TODO: separate setting height from scroller VS timeGrid.
- if (!this.timeGrid.colEls) {
- if (!isAuto) {
- scrollerHeight = this.computeScrollerHeight(totalHeight);
- this.scroller.setHeight(scrollerHeight);
- }
- return;
- }
- // set of fake row elements that must compensate when scroller has scrollbars
- var noScrollRowEls = this.el.find('.fc-row:not(.fc-scroller *)');
- // reset all dimensions back to the original state
- this.timeGrid.bottomRuleEl.hide(); // .show() will be called later if this <hr> is necessary
- this.scroller.clear(); // sets height to 'auto' and clears overflow
- util_1.uncompensateScroll(noScrollRowEls);
- // limit number of events in the all-day area
- if (this.dayGrid) {
- this.dayGrid.removeSegPopover(); // kill the "more" popover if displayed
- eventLimit = this.opt('eventLimit');
- if (eventLimit && typeof eventLimit !== 'number') {
- eventLimit = AGENDA_ALL_DAY_EVENT_LIMIT; // make sure "auto" goes to a real number
- }
- if (eventLimit) {
- this.dayGrid.limitRows(eventLimit);
- }
- }
- if (!isAuto) {
- scrollerHeight = this.computeScrollerHeight(totalHeight);
- this.scroller.setHeight(scrollerHeight);
- scrollbarWidths = this.scroller.getScrollbarWidths();
- if (scrollbarWidths.left || scrollbarWidths.right) {
- // make the all-day and header rows lines up
- util_1.compensateScroll(noScrollRowEls, scrollbarWidths);
- // the scrollbar compensation might have changed text flow, which might affect height, so recalculate
- // and reapply the desired height to the scroller.
- scrollerHeight = this.computeScrollerHeight(totalHeight);
- this.scroller.setHeight(scrollerHeight);
- }
- // guarantees the same scrollbar widths
- this.scroller.lockOverflow(scrollbarWidths);
- // if there's any space below the slats, show the horizontal rule.
- // this won't cause any new overflow, because lockOverflow already called.
- if (this.timeGrid.getTotalSlatHeight() < scrollerHeight) {
- this.timeGrid.bottomRuleEl.show();
- }
- }
- };
- // given a desired total height of the view, returns what the height of the scroller should be
- AgendaView.prototype.computeScrollerHeight = function (totalHeight) {
- return totalHeight -
- util_1.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller
- };
- /* Scroll
- ------------------------------------------------------------------------------------------------------------------*/
- // Computes the initial pre-configured scroll state prior to allowing the user to change it
- AgendaView.prototype.computeInitialDateScroll = function () {
- var scrollTime = moment.duration(this.opt('scrollTime'));
- var top = this.timeGrid.computeTimeTop(scrollTime);
- // zoom can give weird floating-point values. rather scroll a little bit further
- top = Math.ceil(top);
- if (top) {
- top++; // to overcome top border that slots beyond the first have. looks better
- }
- return { top: top };
- };
- AgendaView.prototype.queryDateScroll = function () {
- return { top: this.scroller.getScrollTop() };
- };
- AgendaView.prototype.applyDateScroll = function (scroll) {
- if (scroll.top !== undefined) {
- this.scroller.setScrollTop(scroll.top);
- }
- };
- /* Hit Areas
- ------------------------------------------------------------------------------------------------------------------*/
- // forward all hit-related method calls to the grids (dayGrid might not be defined)
- AgendaView.prototype.getHitFootprint = function (hit) {
- // TODO: hit.component is set as a hack to identify where the hit came from
- return hit.component.getHitFootprint(hit);
- };
- AgendaView.prototype.getHitEl = function (hit) {
- // TODO: hit.component is set as a hack to identify where the hit came from
- return hit.component.getHitEl(hit);
- };
- /* Event Rendering
- ------------------------------------------------------------------------------------------------------------------*/
- AgendaView.prototype.executeEventRender = function (eventsPayload) {
- var dayEventsPayload = {};
- var timedEventsPayload = {};
- var id;
- var eventInstanceGroup;
- // separate the events into all-day and timed
- for (id in eventsPayload) {
- eventInstanceGroup = eventsPayload[id];
- if (eventInstanceGroup.getEventDef().isAllDay()) {
- dayEventsPayload[id] = eventInstanceGroup;
- }
- else {
- timedEventsPayload[id] = eventInstanceGroup;
- }
- }
- this.timeGrid.executeEventRender(timedEventsPayload);
- if (this.dayGrid) {
- this.dayGrid.executeEventRender(dayEventsPayload);
- }
- };
- /* Dragging/Resizing Routing
- ------------------------------------------------------------------------------------------------------------------*/
- // A returned value of `true` signals that a mock "helper" event has been rendered.
- AgendaView.prototype.renderDrag = function (eventFootprints, seg, isTouch) {
- var groups = groupEventFootprintsByAllDay(eventFootprints);
- var renderedHelper = false;
- renderedHelper = this.timeGrid.renderDrag(groups.timed, seg, isTouch);
- if (this.dayGrid) {
- renderedHelper = this.dayGrid.renderDrag(groups.allDay, seg, isTouch) || renderedHelper;
- }
- return renderedHelper;
- };
- AgendaView.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {
- var groups = groupEventFootprintsByAllDay(eventFootprints);
- this.timeGrid.renderEventResize(groups.timed, seg, isTouch);
- if (this.dayGrid) {
- this.dayGrid.renderEventResize(groups.allDay, seg, isTouch);
- }
- };
- /* Selection
- ------------------------------------------------------------------------------------------------------------------*/
- // Renders a visual indication of a selection
- AgendaView.prototype.renderSelectionFootprint = function (componentFootprint) {
- if (!componentFootprint.isAllDay) {
- this.timeGrid.renderSelectionFootprint(componentFootprint);
- }
- else if (this.dayGrid) {
- this.dayGrid.renderSelectionFootprint(componentFootprint);
- }
- };
- return AgendaView;
-}(View_1.default));
-exports.default = AgendaView;
-AgendaView.prototype.timeGridClass = TimeGrid_1.default;
-AgendaView.prototype.dayGridClass = DayGrid_1.default;
-// Will customize the rendering behavior of the AgendaView's timeGrid
-agendaTimeGridMethods = {
- // Generates the HTML that will go before the day-of week header cells
- renderHeadIntroHtml: function () {
- var view = this.view;
- var calendar = view.calendar;
- var weekStart = calendar.msToUtcMoment(this.dateProfile.renderUnzonedRange.startMs, true);
- var weekText;
- if (this.opt('weekNumbers')) {
- weekText = weekStart.format(this.opt('smallWeekFormat'));
- return '' +
- '<th class="fc-axis fc-week-number ' + calendar.theme.getClass('widgetHeader') + '" ' + view.axisStyleAttr() + '>' +
- view.buildGotoAnchorHtml(// aside from link, important for matchCellWidths
- { date: weekStart, type: 'week', forceOff: this.colCnt > 1 }, util_1.htmlEscape(weekText) // inner HTML
- ) +
- '</th>';
- }
- else {
- return '<th class="fc-axis ' + calendar.theme.getClass('widgetHeader') + '" ' + view.axisStyleAttr() + '></th>';
- }
- },
- // Generates the HTML that goes before the bg of the TimeGrid slot area. Long vertical column.
- renderBgIntroHtml: function () {
- var view = this.view;
- return '<td class="fc-axis ' + view.calendar.theme.getClass('widgetContent') + '" ' + view.axisStyleAttr() + '></td>';
- },
- // Generates the HTML that goes before all other types of cells.
- // Affects content-skeleton, helper-skeleton, highlight-skeleton for both the time-grid and day-grid.
- renderIntroHtml: function () {
- var view = this.view;
- return '<td class="fc-axis" ' + view.axisStyleAttr() + '></td>';
- }
-};
-// Will customize the rendering behavior of the AgendaView's dayGrid
-agendaDayGridMethods = {
- // Generates the HTML that goes before the all-day cells
- renderBgIntroHtml: function () {
- var view = this.view;
- return '' +
- '<td class="fc-axis ' + view.calendar.theme.getClass('widgetContent') + '" ' + view.axisStyleAttr() + '>' +
- '<span>' + // needed for matchCellWidths
- view.getAllDayHtml() +
- '</span>' +
- '</td>';
- },
- // Generates the HTML that goes before all other types of cells.
- // Affects content-skeleton, helper-skeleton, highlight-skeleton for both the time-grid and day-grid.
- renderIntroHtml: function () {
- var view = this.view;
- return '<td class="fc-axis" ' + view.axisStyleAttr() + '></td>';
- }
-};
-function groupEventFootprintsByAllDay(eventFootprints) {
- var allDay = [];
- var timed = [];
- var i;
- for (i = 0; i < eventFootprints.length; i++) {
- if (eventFootprints[i].componentFootprint.isAllDay) {
- allDay.push(eventFootprints[i]);
- }
- else {
- timed.push(eventFootprints[i]);
- }
- }
- return { allDay: allDay, timed: timed };
-}
-
-
-/***/ }),
-/* 227 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var $ = __webpack_require__(3);
-var moment = __webpack_require__(0);
-var util_1 = __webpack_require__(4);
-var InteractiveDateComponent_1 = __webpack_require__(40);
-var BusinessHourRenderer_1 = __webpack_require__(56);
-var StandardInteractionsMixin_1 = __webpack_require__(60);
-var DayTableMixin_1 = __webpack_require__(55);
-var CoordCache_1 = __webpack_require__(53);
-var UnzonedRange_1 = __webpack_require__(5);
-var ComponentFootprint_1 = __webpack_require__(12);
-var TimeGridEventRenderer_1 = __webpack_require__(246);
-var TimeGridHelperRenderer_1 = __webpack_require__(247);
-var TimeGridFillRenderer_1 = __webpack_require__(248);
-/* A component that renders one or more columns of vertical time slots
-----------------------------------------------------------------------------------------------------------------------*/
-// We mixin DayTable, even though there is only a single row of days
-// potential nice values for the slot-duration and interval-duration
-// from largest to smallest
-var AGENDA_STOCK_SUB_DURATIONS = [
- { hours: 1 },
- { minutes: 30 },
- { minutes: 15 },
- { seconds: 30 },
- { seconds: 15 }
-];
-var TimeGrid = /** @class */ (function (_super) {
- tslib_1.__extends(TimeGrid, _super);
- function TimeGrid(view) {
- var _this = _super.call(this, view) || this;
- _this.processOptions();
- return _this;
- }
- // Slices up the given span (unzoned start/end with other misc data) into an array of segments
- TimeGrid.prototype.componentFootprintToSegs = function (componentFootprint) {
- var segs = this.sliceRangeByTimes(componentFootprint.unzonedRange);
- var i;
- for (i = 0; i < segs.length; i++) {
- if (this.isRTL) {
- segs[i].col = this.daysPerRow - 1 - segs[i].dayIndex;
- }
- else {
- segs[i].col = segs[i].dayIndex;
- }
- }
- return segs;
- };
- /* Date Handling
- ------------------------------------------------------------------------------------------------------------------*/
- TimeGrid.prototype.sliceRangeByTimes = function (unzonedRange) {
- var segs = [];
- var segRange;
- var dayIndex;
- for (dayIndex = 0; dayIndex < this.daysPerRow; dayIndex++) {
- segRange = unzonedRange.intersect(this.dayRanges[dayIndex]);
- if (segRange) {
- segs.push({
- startMs: segRange.startMs,
- endMs: segRange.endMs,
- isStart: segRange.isStart,
- isEnd: segRange.isEnd,
- dayIndex: dayIndex
- });
- }
- }
- return segs;
- };
- /* Options
- ------------------------------------------------------------------------------------------------------------------*/
- // Parses various options into properties of this object
- TimeGrid.prototype.processOptions = function () {
- var slotDuration = this.opt('slotDuration');
- var snapDuration = this.opt('snapDuration');
- var input;
- slotDuration = moment.duration(slotDuration);
- snapDuration = snapDuration ? moment.duration(snapDuration) : slotDuration;
- this.slotDuration = slotDuration;
- this.snapDuration = snapDuration;
- this.snapsPerSlot = slotDuration / snapDuration; // TODO: ensure an integer multiple?
- // might be an array value (for TimelineView).
- // if so, getting the most granular entry (the last one probably).
- input = this.opt('slotLabelFormat');
- if ($.isArray(input)) {
- input = input[input.length - 1];
- }
- this.labelFormat = input ||
- this.opt('smallTimeFormat'); // the computed default
- input = this.opt('slotLabelInterval');
- this.labelInterval = input ?
- moment.duration(input) :
- this.computeLabelInterval(slotDuration);
- };
- // Computes an automatic value for slotLabelInterval
- TimeGrid.prototype.computeLabelInterval = function (slotDuration) {
- var i;
- var labelInterval;
- var slotsPerLabel;
- // find the smallest stock label interval that results in more than one slots-per-label
- for (i = AGENDA_STOCK_SUB_DURATIONS.length - 1; i >= 0; i--) {
- labelInterval = moment.duration(AGENDA_STOCK_SUB_DURATIONS[i]);
- slotsPerLabel = util_1.divideDurationByDuration(labelInterval, slotDuration);
- if (util_1.isInt(slotsPerLabel) && slotsPerLabel > 1) {
- return labelInterval;
- }
- }
- return moment.duration(slotDuration); // fall back. clone
- };
- /* Date Rendering
- ------------------------------------------------------------------------------------------------------------------*/
- TimeGrid.prototype.renderDates = function (dateProfile) {
- this.dateProfile = dateProfile;
- this.updateDayTable();
- this.renderSlats();
- this.renderColumns();
- };
- TimeGrid.prototype.unrenderDates = function () {
- // this.unrenderSlats(); // don't need this because repeated .html() calls clear
- this.unrenderColumns();
- };
- TimeGrid.prototype.renderSkeleton = function () {
- var theme = this.view.calendar.theme;
- this.el.html('<div class="fc-bg"></div>' +
- '<div class="fc-slats"></div>' +
- '<hr class="fc-divider ' + theme.getClass('widgetHeader') + '" style="display:none" />');
- this.bottomRuleEl = this.el.find('hr');
- };
- TimeGrid.prototype.renderSlats = function () {
- var theme = this.view.calendar.theme;
- this.slatContainerEl = this.el.find('> .fc-slats')
- .html(// avoids needing ::unrenderSlats()
- '<table class="' + theme.getClass('tableGrid') + '">' +
- this.renderSlatRowHtml() +
- '</table>');
- this.slatEls = this.slatContainerEl.find('tr');
- this.slatCoordCache = new CoordCache_1.default({
- els: this.slatEls,
- isVertical: true
- });
- };
- // Generates the HTML for the horizontal "slats" that run width-wise. Has a time axis on a side. Depends on RTL.
- TimeGrid.prototype.renderSlatRowHtml = function () {
- var view = this.view;
- var calendar = view.calendar;
- var theme = calendar.theme;
- var isRTL = this.isRTL;
- var dateProfile = this.dateProfile;
- var html = '';
- var slotTime = moment.duration(+dateProfile.minTime); // wish there was .clone() for durations
- var slotIterator = moment.duration(0);
- var slotDate; // will be on the view's first day, but we only care about its time
- var isLabeled;
- var axisHtml;
- // Calculate the time for each slot
- while (slotTime < dateProfile.maxTime) {
- slotDate = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.startMs).time(slotTime);
- isLabeled = util_1.isInt(util_1.divideDurationByDuration(slotIterator, this.labelInterval));
- axisHtml =
- '<td class="fc-axis fc-time ' + theme.getClass('widgetContent') + '" ' + view.axisStyleAttr() + '>' +
- (isLabeled ?
- '<span>' + // for matchCellWidths
- util_1.htmlEscape(slotDate.format(this.labelFormat)) +
- '</span>' :
- '') +
- '</td>';
- html +=
- '<tr data-time="' + slotDate.format('HH:mm:ss') + '"' +
- (isLabeled ? '' : ' class="fc-minor"') +
- '>' +
- (!isRTL ? axisHtml : '') +
- '<td class="' + theme.getClass('widgetContent') + '"/>' +
- (isRTL ? axisHtml : '') +
- '</tr>';
- slotTime.add(this.slotDuration);
- slotIterator.add(this.slotDuration);
- }
- return html;
- };
- TimeGrid.prototype.renderColumns = function () {
- var dateProfile = this.dateProfile;
- var theme = this.view.calendar.theme;
- this.dayRanges = this.dayDates.map(function (dayDate) {
- return new UnzonedRange_1.default(dayDate.clone().add(dateProfile.minTime), dayDate.clone().add(dateProfile.maxTime));
- });
- if (this.headContainerEl) {
- this.headContainerEl.html(this.renderHeadHtml());
- }
- this.el.find('> .fc-bg').html('<table class="' + theme.getClass('tableGrid') + '">' +
- this.renderBgTrHtml(0) + // row=0
- '</table>');
- this.colEls = this.el.find('.fc-day, .fc-disabled-day');
- this.colCoordCache = new CoordCache_1.default({
- els: this.colEls,
- isHorizontal: true
- });
- this.renderContentSkeleton();
- };
- TimeGrid.prototype.unrenderColumns = function () {
- this.unrenderContentSkeleton();
- };
- /* Content Skeleton
- ------------------------------------------------------------------------------------------------------------------*/
- // Renders the DOM that the view's content will live in
- TimeGrid.prototype.renderContentSkeleton = function () {
- var cellHtml = '';
- var i;
- var skeletonEl;
- for (i = 0; i < this.colCnt; i++) {
- cellHtml +=
- '<td>' +
- '<div class="fc-content-col">' +
- '<div class="fc-event-container fc-helper-container"></div>' +
- '<div class="fc-event-container"></div>' +
- '<div class="fc-highlight-container"></div>' +
- '<div class="fc-bgevent-container"></div>' +
- '<div class="fc-business-container"></div>' +
- '</div>' +
- '</td>';
- }
- skeletonEl = this.contentSkeletonEl = $('<div class="fc-content-skeleton">' +
- '<table>' +
- '<tr>' + cellHtml + '</tr>' +
- '</table>' +
- '</div>');
- this.colContainerEls = skeletonEl.find('.fc-content-col');
- this.helperContainerEls = skeletonEl.find('.fc-helper-container');
- this.fgContainerEls = skeletonEl.find('.fc-event-container:not(.fc-helper-container)');
- this.bgContainerEls = skeletonEl.find('.fc-bgevent-container');
- this.highlightContainerEls = skeletonEl.find('.fc-highlight-container');
- this.businessContainerEls = skeletonEl.find('.fc-business-container');
- this.bookendCells(skeletonEl.find('tr')); // TODO: do this on string level
- this.el.append(skeletonEl);
- };
- TimeGrid.prototype.unrenderContentSkeleton = function () {
- if (this.contentSkeletonEl) {
- this.contentSkeletonEl.remove();
- this.contentSkeletonEl = null;
- this.colContainerEls = null;
- this.helperContainerEls = null;
- this.fgContainerEls = null;
- this.bgContainerEls = null;
- this.highlightContainerEls = null;
- this.businessContainerEls = null;
- }
- };
- // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's col
- TimeGrid.prototype.groupSegsByCol = function (segs) {
- var segsByCol = [];
- var i;
- for (i = 0; i < this.colCnt; i++) {
- segsByCol.push([]);
- }
- for (i = 0; i < segs.length; i++) {
- segsByCol[segs[i].col].push(segs[i]);
- }
- return segsByCol;
- };
- // Given segments grouped by column, insert the segments' elements into a parallel array of container
- // elements, each living within a column.
- TimeGrid.prototype.attachSegsByCol = function (segsByCol, containerEls) {
- var col;
- var segs;
- var i;
- for (col = 0; col < this.colCnt; col++) {
- segs = segsByCol[col];
- for (i = 0; i < segs.length; i++) {
- containerEls.eq(col).append(segs[i].el);
- }
- }
- };
- /* Now Indicator
- ------------------------------------------------------------------------------------------------------------------*/
- TimeGrid.prototype.getNowIndicatorUnit = function () {
- return 'minute'; // will refresh on the minute
- };
- TimeGrid.prototype.renderNowIndicator = function (date) {
- // HACK: if date columns not ready for some reason (scheduler)
- if (!this.colContainerEls) {
- return;
- }
- // seg system might be overkill, but it handles scenario where line needs to be rendered
- // more than once because of columns with the same date (resources columns for example)
- var segs = this.componentFootprintToSegs(new ComponentFootprint_1.default(new UnzonedRange_1.default(date, date.valueOf() + 1), // protect against null range
- false // all-day
- ));
- var top = this.computeDateTop(date, date);
- var nodes = [];
- var i;
- // render lines within the columns
- for (i = 0; i < segs.length; i++) {
- nodes.push($('<div class="fc-now-indicator fc-now-indicator-line"></div>')
- .css('top', top)
- .appendTo(this.colContainerEls.eq(segs[i].col))[0]);
- }
- // render an arrow over the axis
- if (segs.length > 0) {
- nodes.push($('<div class="fc-now-indicator fc-now-indicator-arrow"></div>')
- .css('top', top)
- .appendTo(this.el.find('.fc-content-skeleton'))[0]);
- }
- this.nowIndicatorEls = $(nodes);
- };
- TimeGrid.prototype.unrenderNowIndicator = function () {
- if (this.nowIndicatorEls) {
- this.nowIndicatorEls.remove();
- this.nowIndicatorEls = null;
- }
- };
- /* Coordinates
- ------------------------------------------------------------------------------------------------------------------*/
- TimeGrid.prototype.updateSize = function (totalHeight, isAuto, isResize) {
- _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);
- this.slatCoordCache.build();
- if (isResize) {
- this.updateSegVerticals([].concat(this.eventRenderer.getSegs(), this.businessSegs || []));
- }
- };
- TimeGrid.prototype.getTotalSlatHeight = function () {
- return this.slatContainerEl.outerHeight();
- };
- // Computes the top coordinate, relative to the bounds of the grid, of the given date.
- // `ms` can be a millisecond UTC time OR a UTC moment.
- // A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.
- TimeGrid.prototype.computeDateTop = function (ms, startOfDayDate) {
- return this.computeTimeTop(moment.duration(ms - startOfDayDate.clone().stripTime()));
- };
- // Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration).
- TimeGrid.prototype.computeTimeTop = function (time) {
- var len = this.slatEls.length;
- var dateProfile = this.dateProfile;
- var slatCoverage = (time - dateProfile.minTime) / this.slotDuration; // floating-point value of # of slots covered
- var slatIndex;
- var slatRemainder;
- // compute a floating-point number for how many slats should be progressed through.
- // from 0 to number of slats (inclusive)
- // constrained because minTime/maxTime might be customized.
- slatCoverage = Math.max(0, slatCoverage);
- slatCoverage = Math.min(len, slatCoverage);
- // an integer index of the furthest whole slat
- // from 0 to number slats (*exclusive*, so len-1)
- slatIndex = Math.floor(slatCoverage);
- slatIndex = Math.min(slatIndex, len - 1);
- // how much further through the slatIndex slat (from 0.0-1.0) must be covered in addition.
- // could be 1.0 if slatCoverage is covering *all* the slots
- slatRemainder = slatCoverage - slatIndex;
- return this.slatCoordCache.getTopPosition(slatIndex) +
- this.slatCoordCache.getHeight(slatIndex) * slatRemainder;
- };
- // Refreshes the CSS top/bottom coordinates for each segment element.
- // Works when called after initial render, after a window resize/zoom for example.
- TimeGrid.prototype.updateSegVerticals = function (segs) {
- this.computeSegVerticals(segs);
- this.assignSegVerticals(segs);
- };
- // For each segment in an array, computes and assigns its top and bottom properties
- TimeGrid.prototype.computeSegVerticals = function (segs) {
- var eventMinHeight = this.opt('agendaEventMinHeight');
- var i;
- var seg;
- var dayDate;
- for (i = 0; i < segs.length; i++) {
- seg = segs[i];
- dayDate = this.dayDates[seg.dayIndex];
- seg.top = this.computeDateTop(seg.startMs, dayDate);
- seg.bottom = Math.max(seg.top + eventMinHeight, this.computeDateTop(seg.endMs, dayDate));
- }
- };
- // Given segments that already have their top/bottom properties computed, applies those values to
- // the segments' elements.
- TimeGrid.prototype.assignSegVerticals = function (segs) {
- var i;
- var seg;
- for (i = 0; i < segs.length; i++) {
- seg = segs[i];
- seg.el.css(this.generateSegVerticalCss(seg));
- }
- };
- // Generates an object with CSS properties for the top/bottom coordinates of a segment element
- TimeGrid.prototype.generateSegVerticalCss = function (seg) {
- return {
- top: seg.top,
- bottom: -seg.bottom // flipped because needs to be space beyond bottom edge of event container
- };
- };
- /* Hit System
- ------------------------------------------------------------------------------------------------------------------*/
- TimeGrid.prototype.prepareHits = function () {
- this.colCoordCache.build();
- this.slatCoordCache.build();
- };
- TimeGrid.prototype.releaseHits = function () {
- this.colCoordCache.clear();
- // NOTE: don't clear slatCoordCache because we rely on it for computeTimeTop
- };
- TimeGrid.prototype.queryHit = function (leftOffset, topOffset) {
- var snapsPerSlot = this.snapsPerSlot;
- var colCoordCache = this.colCoordCache;
- var slatCoordCache = this.slatCoordCache;
- if (colCoordCache.isLeftInBounds(leftOffset) && slatCoordCache.isTopInBounds(topOffset)) {
- var colIndex = colCoordCache.getHorizontalIndex(leftOffset);
- var slatIndex = slatCoordCache.getVerticalIndex(topOffset);
- if (colIndex != null && slatIndex != null) {
- var slatTop = slatCoordCache.getTopOffset(slatIndex);
- var slatHeight = slatCoordCache.getHeight(slatIndex);
- var partial = (topOffset - slatTop) / slatHeight; // floating point number between 0 and 1
- var localSnapIndex = Math.floor(partial * snapsPerSlot); // the snap # relative to start of slat
- var snapIndex = slatIndex * snapsPerSlot + localSnapIndex;
- var snapTop = slatTop + (localSnapIndex / snapsPerSlot) * slatHeight;
- var snapBottom = slatTop + ((localSnapIndex + 1) / snapsPerSlot) * slatHeight;
- return {
- col: colIndex,
- snap: snapIndex,
- component: this,
- left: colCoordCache.getLeftOffset(colIndex),
- right: colCoordCache.getRightOffset(colIndex),
- top: snapTop,
- bottom: snapBottom
- };
- }
- }
- };
- TimeGrid.prototype.getHitFootprint = function (hit) {
- var start = this.getCellDate(0, hit.col); // row=0
- var time = this.computeSnapTime(hit.snap); // pass in the snap-index
- var end;
- start.time(time);
- end = start.clone().add(this.snapDuration);
- return new ComponentFootprint_1.default(new UnzonedRange_1.default(start, end), false // all-day?
- );
- };
- // Given a row number of the grid, representing a "snap", returns a time (Duration) from its start-of-day
- TimeGrid.prototype.computeSnapTime = function (snapIndex) {
- return moment.duration(this.dateProfile.minTime + this.snapDuration * snapIndex);
- };
- TimeGrid.prototype.getHitEl = function (hit) {
- return this.colEls.eq(hit.col);
- };
- /* Event Drag Visualization
- ------------------------------------------------------------------------------------------------------------------*/
- // Renders a visual indication of an event being dragged over the specified date(s).
- // A returned value of `true` signals that a mock "helper" event has been rendered.
- TimeGrid.prototype.renderDrag = function (eventFootprints, seg, isTouch) {
- var i;
- if (seg) {
- if (eventFootprints.length) {
- this.helperRenderer.renderEventDraggingFootprints(eventFootprints, seg, isTouch);
- // signal that a helper has been rendered
- return true;
- }
- }
- else {
- for (i = 0; i < eventFootprints.length; i++) {
- this.renderHighlight(eventFootprints[i].componentFootprint);
- }
- }
- };
- // Unrenders any visual indication of an event being dragged
- TimeGrid.prototype.unrenderDrag = function () {
- this.unrenderHighlight();
- this.helperRenderer.unrender();
- };
- /* Event Resize Visualization
- ------------------------------------------------------------------------------------------------------------------*/
- // Renders a visual indication of an event being resized
- TimeGrid.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {
- this.helperRenderer.renderEventResizingFootprints(eventFootprints, seg, isTouch);
- };
- // Unrenders any visual indication of an event being resized
- TimeGrid.prototype.unrenderEventResize = function () {
- this.helperRenderer.unrender();
- };
- /* Selection
- ------------------------------------------------------------------------------------------------------------------*/
- // Renders a visual indication of a selection. Overrides the default, which was to simply render a highlight.
- TimeGrid.prototype.renderSelectionFootprint = function (componentFootprint) {
- if (this.opt('selectHelper')) {
- this.helperRenderer.renderComponentFootprint(componentFootprint);
- }
- else {
- this.renderHighlight(componentFootprint);
- }
- };
- // Unrenders any visual indication of a selection
- TimeGrid.prototype.unrenderSelection = function () {
- this.helperRenderer.unrender();
- this.unrenderHighlight();
- };
- return TimeGrid;
-}(InteractiveDateComponent_1.default));
-exports.default = TimeGrid;
-TimeGrid.prototype.eventRendererClass = TimeGridEventRenderer_1.default;
-TimeGrid.prototype.businessHourRendererClass = BusinessHourRenderer_1.default;
-TimeGrid.prototype.helperRendererClass = TimeGridHelperRenderer_1.default;
-TimeGrid.prototype.fillRendererClass = TimeGridFillRenderer_1.default;
-StandardInteractionsMixin_1.default.mixInto(TimeGrid);
-DayTableMixin_1.default.mixInto(TimeGrid);
-
-
-/***/ }),
-/* 228 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var UnzonedRange_1 = __webpack_require__(5);
-var DateProfileGenerator_1 = __webpack_require__(221);
-var BasicViewDateProfileGenerator = /** @class */ (function (_super) {
- tslib_1.__extends(BasicViewDateProfileGenerator, _super);
- function BasicViewDateProfileGenerator() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- // Computes the date range that will be rendered.
- BasicViewDateProfileGenerator.prototype.buildRenderRange = function (currentUnzonedRange, currentRangeUnit, isRangeAllDay) {
- var renderUnzonedRange = _super.prototype.buildRenderRange.call(this, currentUnzonedRange, currentRangeUnit, isRangeAllDay); // an UnzonedRange
- var start = this.msToUtcMoment(renderUnzonedRange.startMs, isRangeAllDay);
- var end = this.msToUtcMoment(renderUnzonedRange.endMs, isRangeAllDay);
- // year and month views should be aligned with weeks. this is already done for week
- if (/^(year|month)$/.test(currentRangeUnit)) {
- start.startOf('week');
- // make end-of-week if not already
- if (end.weekday()) {
- end.add(1, 'week').startOf('week'); // exclusively move backwards
- }
- }
- return new UnzonedRange_1.default(start, end);
- };
- return BasicViewDateProfileGenerator;
-}(DateProfileGenerator_1.default));
-exports.default = BasicViewDateProfileGenerator;
-
-
-/***/ }),
-/* 229 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var moment = __webpack_require__(0);
-var util_1 = __webpack_require__(4);
-var BasicView_1 = __webpack_require__(62);
-var MonthViewDateProfileGenerator_1 = __webpack_require__(253);
-/* A month view with day cells running in rows (one-per-week) and columns
-----------------------------------------------------------------------------------------------------------------------*/
-var MonthView = /** @class */ (function (_super) {
- tslib_1.__extends(MonthView, _super);
- function MonthView() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- // Overrides the default BasicView behavior to have special multi-week auto-height logic
- MonthView.prototype.setGridHeight = function (height, isAuto) {
- // 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;
- }
- util_1.distributeHeight(this.dayGrid.rowEls, height, !isAuto); // if auto, don't compensate for height-hogging rows
- };
- MonthView.prototype.isDateInOtherMonth = function (date, dateProfile) {
- return date.month() !== moment.utc(dateProfile.currentUnzonedRange.startMs).month(); // TODO: optimize
- };
- return MonthView;
-}(BasicView_1.default));
-exports.default = MonthView;
-MonthView.prototype.dateProfileGeneratorClass = MonthViewDateProfileGenerator_1.default;
-
-
-/***/ }),
-/* 230 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var $ = __webpack_require__(3);
-var util_1 = __webpack_require__(4);
-var UnzonedRange_1 = __webpack_require__(5);
-var View_1 = __webpack_require__(41);
-var Scroller_1 = __webpack_require__(39);
-var ListEventRenderer_1 = __webpack_require__(254);
-var ListEventPointing_1 = __webpack_require__(255);
-/*
-Responsible for the scroller, and forwarding event-related actions into the "grid".
-*/
-var ListView = /** @class */ (function (_super) {
- tslib_1.__extends(ListView, _super);
- function ListView(calendar, viewSpec) {
- var _this = _super.call(this, calendar, viewSpec) || this;
- _this.segSelector = '.fc-list-item'; // which elements accept event actions
- _this.scroller = new Scroller_1.default({
- overflowX: 'hidden',
- overflowY: 'auto'
- });
- return _this;
- }
- ListView.prototype.renderSkeleton = function () {
- this.el.addClass('fc-list-view ' +
- this.calendar.theme.getClass('listView'));
- this.scroller.render();
- this.scroller.el.appendTo(this.el);
- this.contentEl = this.scroller.scrollEl; // shortcut
- };
- ListView.prototype.unrenderSkeleton = function () {
- this.scroller.destroy(); // will remove the Grid too
- };
- ListView.prototype.updateSize = function (totalHeight, isAuto, isResize) {
- _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);
- this.scroller.clear(); // sets height to 'auto' and clears overflow
- if (!isAuto) {
- this.scroller.setHeight(this.computeScrollerHeight(totalHeight));
- }
- };
- ListView.prototype.computeScrollerHeight = function (totalHeight) {
- return totalHeight -
- util_1.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller
- };
- ListView.prototype.renderDates = function (dateProfile) {
- var calendar = this.calendar;
- var dayStart = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.startMs, true);
- var viewEnd = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.endMs, true);
- var dayDates = [];
- var dayRanges = [];
- while (dayStart < viewEnd) {
- dayDates.push(dayStart.clone());
- dayRanges.push(new UnzonedRange_1.default(dayStart, dayStart.clone().add(1, 'day')));
- dayStart.add(1, 'day');
- }
- this.dayDates = dayDates;
- this.dayRanges = dayRanges;
- // all real rendering happens in EventRenderer
- };
- // slices by day
- ListView.prototype.componentFootprintToSegs = function (footprint) {
- var dayRanges = this.dayRanges;
- var dayIndex;
- var segRange;
- var seg;
- var segs = [];
- for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex++) {
- segRange = footprint.unzonedRange.intersect(dayRanges[dayIndex]);
- if (segRange) {
- seg = {
- startMs: segRange.startMs,
- endMs: segRange.endMs,
- isStart: segRange.isStart,
- isEnd: segRange.isEnd,
- dayIndex: dayIndex
- };
- segs.push(seg);
- // detect when footprint won't go fully into the next day,
- // and mutate the latest seg to the be the end.
- if (!seg.isEnd && !footprint.isAllDay &&
- dayIndex + 1 < dayRanges.length &&
- footprint.unzonedRange.endMs < dayRanges[dayIndex + 1].startMs + this.nextDayThreshold) {
- seg.endMs = footprint.unzonedRange.endMs;
- seg.isEnd = true;
- break;
- }
- }
- }
- return segs;
- };
- ListView.prototype.renderEmptyMessage = function () {
- this.contentEl.html('<div class="fc-list-empty-wrap2">' + // TODO: try less wraps
- '<div class="fc-list-empty-wrap1">' +
- '<div class="fc-list-empty">' +
- util_1.htmlEscape(this.opt('noEventsMessage')) +
- '</div>' +
- '</div>' +
- '</div>');
- };
- // render the event segments in the view
- ListView.prototype.renderSegList = function (allSegs) {
- var segsByDay = this.groupSegsByDay(allSegs); // sparse array
- var dayIndex;
- var daySegs;
- var i;
- var tableEl = $('<table class="fc-list-table ' + this.calendar.theme.getClass('tableList') + '"><tbody/></table>');
- var tbodyEl = tableEl.find('tbody');
- for (dayIndex = 0; dayIndex < segsByDay.length; dayIndex++) {
- daySegs = segsByDay[dayIndex];
- if (daySegs) {
- // append a day header
- tbodyEl.append(this.dayHeaderHtml(this.dayDates[dayIndex]));
- this.eventRenderer.sortEventSegs(daySegs);
- for (i = 0; i < daySegs.length; i++) {
- tbodyEl.append(daySegs[i].el); // append event row
- }
- }
- }
- this.contentEl.empty().append(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.dayHeaderHtml = function (dayDate) {
- var mainFormat = this.opt('listDayFormat');
- var altFormat = this.opt('listDayAltFormat');
- return '<tr class="fc-list-heading" data-date="' + dayDate.format('YYYY-MM-DD') + '">' +
- '<td class="' + (this.calendar.theme.getClass('tableListHeading') ||
- this.calendar.theme.getClass('widgetHeader')) + '" colspan="3">' +
- (mainFormat ?
- this.buildGotoAnchorHtml(dayDate, { 'class': 'fc-list-heading-main' }, util_1.htmlEscape(dayDate.format(mainFormat)) // inner HTML
- ) :
- '') +
- (altFormat ?
- this.buildGotoAnchorHtml(dayDate, { 'class': 'fc-list-heading-alt' }, util_1.htmlEscape(dayDate.format(altFormat)) // inner HTML
- ) :
- '') +
- '</td>' +
- '</tr>';
- };
- return ListView;
-}(View_1.default));
-exports.default = ListView;
-ListView.prototype.eventRendererClass = ListEventRenderer_1.default;
-ListView.prototype.eventPointingClass = ListEventPointing_1.default;
-
-
-/***/ }),
-/* 231 */,
-/* 232 */,
-/* 233 */,
-/* 234 */,
-/* 235 */,
-/* 236 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var $ = __webpack_require__(3);
-var exportHooks = __webpack_require__(16);
-var util_1 = __webpack_require__(4);
-var Calendar_1 = __webpack_require__(220);
-// for intentional side-effects
-__webpack_require__(10);
-__webpack_require__(47);
-__webpack_require__(256);
-__webpack_require__(257);
-__webpack_require__(260);
-__webpack_require__(261);
-__webpack_require__(262);
-__webpack_require__(263);
-$.fullCalendar = exportHooks;
-$.fn.fullCalendar = function (options) {
- var args = Array.prototype.slice.call(arguments, 1); // for a possible method call
- var res = this; // what this function will return (this jQuery object by default)
- this.each(function (i, _element) {
- var element = $(_element);
- var calendar = element.data('fullCalendar'); // get the existing calendar object (if any)
- var singleRes; // the returned value of this single method call
- // a method call
- if (typeof options === 'string') {
- if (options === 'getCalendar') {
- if (!i) {
- res = calendar;
- }
- }
- else if (options === 'destroy') {
- if (calendar) {
- calendar.destroy();
- element.removeData('fullCalendar');
- }
- }
- else if (!calendar) {
- util_1.warn('Attempting to call a FullCalendar method on an element with no calendar.');
- }
- else if ($.isFunction(calendar[options])) {
- singleRes = calendar[options].apply(calendar, args);
- if (!i) {
- res = singleRes; // record the first method call result
- }
- if (options === 'destroy') {
- element.removeData('fullCalendar');
- }
- }
- else {
- util_1.warn("'" + options + "' is an unknown FullCalendar method.");
- }
- }
- else if (!calendar) {
- calendar = new Calendar_1.default(element, options);
- element.data('fullCalendar', calendar);
- calendar.render();
- }
- });
- return res;
-};
-module.exports = exportHooks;
-
-
-/***/ }),
-/* 237 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var Model_1 = __webpack_require__(48);
-var Component = /** @class */ (function (_super) {
- tslib_1.__extends(Component, _super);
- function Component() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- Component.prototype.setElement = function (el) {
- this.el = el;
- this.bindGlobalHandlers();
- this.renderSkeleton();
- this.set('isInDom', true);
- };
- Component.prototype.removeElement = function () {
- this.unset('isInDom');
- this.unrenderSkeleton();
- this.unbindGlobalHandlers();
- this.el.remove();
- // NOTE: don't null-out this.el in case the View was destroyed within an API callback.
- // We don't null-out the View's other jQuery element references upon destroy,
- // so we shouldn't kill this.el either.
- };
- Component.prototype.bindGlobalHandlers = function () {
- // subclasses can override
- };
- Component.prototype.unbindGlobalHandlers = function () {
- // subclasses can override
- };
- /*
- NOTE: Can't have a `render` method. Read the deprecation notice in View::executeDateRender
- */
- // Renders the basic structure of the view before any content is rendered
- Component.prototype.renderSkeleton = function () {
- // subclasses should implement
- };
- // Unrenders the basic structure of the view
- Component.prototype.unrenderSkeleton = function () {
- // subclasses should implement
- };
- return Component;
-}(Model_1.default));
-exports.default = Component;
-
-
-/***/ }),
-/* 238 */
-/***/ (function(module, exports) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var Iterator = /** @class */ (function () {
- function Iterator(items) {
- this.items = items || [];
- }
- /* Calls a method on every item passing the arguments through */
- Iterator.prototype.proxyCall = function (methodName) {
- var args = [];
- for (var _i = 1; _i < arguments.length; _i++) {
- args[_i - 1] = arguments[_i];
- }
- var results = [];
- this.items.forEach(function (item) {
- results.push(item[methodName].apply(item, args));
- });
- return results;
- };
- return Iterator;
-}());
-exports.default = Iterator;
-
-
-/***/ }),
-/* 239 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var $ = __webpack_require__(3);
-var util_1 = __webpack_require__(4);
-/* Toolbar with buttons and title
-----------------------------------------------------------------------------------------------------------------------*/
-var Toolbar = /** @class */ (function () {
- function Toolbar(calendar, toolbarOptions) {
- this.el = null; // mirrors local `el`
- this.viewsWithButtons = [];
- this.calendar = calendar;
- this.toolbarOptions = toolbarOptions;
- }
- // method to update toolbar-specific options, not calendar-wide options
- Toolbar.prototype.setToolbarOptions = function (newToolbarOptions) {
- this.toolbarOptions = newToolbarOptions;
- };
- // can be called repeatedly and will rerender
- Toolbar.prototype.render = function () {
- var sections = this.toolbarOptions.layout;
- var el = this.el;
- if (sections) {
- if (!el) {
- el = this.el = $("<div class='fc-toolbar " + this.toolbarOptions.extraClasses + "'/>");
- }
- else {
- el.empty();
- }
- el.append(this.renderSection('left'))
- .append(this.renderSection('right'))
- .append(this.renderSection('center'))
- .append('<div class="fc-clear"/>');
- }
- else {
- this.removeElement();
- }
- };
- Toolbar.prototype.removeElement = function () {
- if (this.el) {
- this.el.remove();
- this.el = null;
- }
- };
- Toolbar.prototype.renderSection = function (position) {
- var _this = this;
- var calendar = this.calendar;
- var theme = calendar.theme;
- var optionsManager = calendar.optionsManager;
- var viewSpecManager = calendar.viewSpecManager;
- var sectionEl = $('<div class="fc-' + position + '"/>');
- var buttonStr = this.toolbarOptions.layout[position];
- var calendarCustomButtons = optionsManager.get('customButtons') || {};
- var calendarButtonTextOverrides = optionsManager.overrides.buttonText || {};
- var calendarButtonText = optionsManager.get('buttonText') || {};
- if (buttonStr) {
- $.each(buttonStr.split(' '), function (i, buttonGroupStr) {
- var groupChildren = $();
- var isOnlyButtons = true;
- var groupEl;
- $.each(buttonGroupStr.split(','), function (j, buttonName) {
- 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 = groupChildren.add($('<h2> </h2>')); // 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[0], ev);
- }
- };
- (buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) ||
- (buttonIcon = theme.getIconClass(buttonName)) ||
- (buttonText = customButtonProps.text);
- }
- else if ((viewSpec = viewSpecManager.getViewSpec(buttonName))) {
- _this.viewsWithButtons.push(buttonName);
- buttonClick = function () {
- calendar.changeView(buttonName);
- };
- (buttonText = viewSpec.buttonTextOverride) ||
- (buttonIcon = theme.getIconClass(buttonName)) ||
- (buttonText = viewSpec.buttonTextDefault);
- }
- else if (calendar[buttonName]) {
- 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'),
- theme.getClass('stateDefault')
- ];
- if (buttonText) {
- buttonInnerHtml = util_1.htmlEscape(buttonText);
- buttonAriaAttr = '';
- }
- else if (buttonIcon) {
- buttonInnerHtml = "<span class='" + buttonIcon + "'></span>";
- buttonAriaAttr = ' aria-label="' + buttonName + '"';
- }
- buttonEl = $(// type="button" so that it doesn't submit a form
- '<button type="button" class="' + buttonClasses.join(' ') + '"' +
- buttonAriaAttr +
- '>' + buttonInnerHtml + '</button>')
- .click(function (ev) {
- // don't process clicks for disabled buttons
- if (!buttonEl.hasClass(theme.getClass('stateDisabled'))) {
- buttonClick(ev);
- // after the click action, if the button becomes the "active" tab, or disabled,
- // it should never have a hover class, so remove it now.
- if (buttonEl.hasClass(theme.getClass('stateActive')) ||
- buttonEl.hasClass(theme.getClass('stateDisabled'))) {
- buttonEl.removeClass(theme.getClass('stateHover'));
- }
- }
- })
- .mousedown(function () {
- // the *down* effect (mouse pressed in).
- // only on buttons that are not the "active" tab, or disabled
- buttonEl
- .not('.' + theme.getClass('stateActive'))
- .not('.' + theme.getClass('stateDisabled'))
- .addClass(theme.getClass('stateDown'));
- })
- .mouseup(function () {
- // undo the *down* effect
- buttonEl.removeClass(theme.getClass('stateDown'));
- })
- .hover(function () {
- // the *hover* effect.
- // only on buttons that are not the "active" tab, or disabled
- buttonEl
- .not('.' + theme.getClass('stateActive'))
- .not('.' + theme.getClass('stateDisabled'))
- .addClass(theme.getClass('stateHover'));
- }, function () {
- // undo the *hover* effect
- buttonEl
- .removeClass(theme.getClass('stateHover'))
- .removeClass(theme.getClass('stateDown')); // if mouseleave happens before mouseup
- });
- groupChildren = groupChildren.add(buttonEl);
- }
- }
- });
- if (isOnlyButtons) {
- groupChildren
- .first().addClass(theme.getClass('cornerLeft')).end()
- .last().addClass(theme.getClass('cornerRight')).end();
- }
- if (groupChildren.length > 1) {
- groupEl = $('<div/>');
- if (isOnlyButtons) {
- groupEl.addClass(theme.getClass('buttonGroup'));
- }
- groupEl.append(groupChildren);
- sectionEl.append(groupEl);
- }
- else {
- sectionEl.append(groupChildren); // 1 or 0 children
- }
- });
- }
- return sectionEl;
- };
- Toolbar.prototype.updateTitle = function (text) {
- if (this.el) {
- this.el.find('h2').text(text);
- }
- };
- Toolbar.prototype.activateButton = function (buttonName) {
- if (this.el) {
- this.el.find('.fc-' + buttonName + '-button')
- .addClass(this.calendar.theme.getClass('stateActive'));
- }
- };
- Toolbar.prototype.deactivateButton = function (buttonName) {
- if (this.el) {
- this.el.find('.fc-' + buttonName + '-button')
- .removeClass(this.calendar.theme.getClass('stateActive'));
- }
- };
- Toolbar.prototype.disableButton = function (buttonName) {
- if (this.el) {
- this.el.find('.fc-' + buttonName + '-button')
- .prop('disabled', true)
- .addClass(this.calendar.theme.getClass('stateDisabled'));
- }
- };
- Toolbar.prototype.enableButton = function (buttonName) {
- if (this.el) {
- this.el.find('.fc-' + buttonName + '-button')
- .prop('disabled', false)
- .removeClass(this.calendar.theme.getClass('stateDisabled'));
- }
- };
- Toolbar.prototype.getViewsWithButtons = function () {
- return this.viewsWithButtons;
- };
- return Toolbar;
-}());
-exports.default = Toolbar;
-
-
-/***/ }),
-/* 240 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var $ = __webpack_require__(3);
-var util_1 = __webpack_require__(4);
-var options_1 = __webpack_require__(32);
-var locale_1 = __webpack_require__(31);
-var Model_1 = __webpack_require__(48);
-var OptionsManager = /** @class */ (function (_super) {
- tslib_1.__extends(OptionsManager, _super);
- function OptionsManager(_calendar, overrides) {
- var _this = _super.call(this) || this;
- _this._calendar = _calendar;
- _this.overrides = $.extend({}, overrides); // make a copy
- _this.dynamicOverrides = {};
- _this.compute();
- return _this;
- }
- OptionsManager.prototype.add = function (newOptionHash) {
- var optionCnt = 0;
- var optionName;
- this.recordOverrides(newOptionHash); // will trigger this model's watchers
- for (optionName in newOptionHash) {
- optionCnt++;
- }
- // special-case handling of single option change.
- // if only one option change, `optionName` will be its name.
- if (optionCnt === 1) {
- if (optionName === 'height' || optionName === 'contentHeight' || optionName === 'aspectRatio') {
- this._calendar.updateViewSize(true); // isResize=true
- return;
- }
- else if (optionName === 'defaultDate') {
- return; // can't change date this way. use gotoDate instead
- }
- else if (optionName === 'businessHours') {
- return; // this model already reacts to this
- }
- else if (/^(event|select)(Overlap|Constraint|Allow)$/.test(optionName)) {
- return; // doesn't affect rendering. only interactions.
- }
- else if (optionName === 'timezone') {
- this._calendar.view.flash('initialEvents');
- return;
- }
- }
- // catch-all. rerender the header and footer and rebuild/rerender the current view
- this._calendar.renderHeader();
- this._calendar.renderFooter();
- // even non-current views will be affected by this option change. do before rerender
- // TODO: detangle
- this._calendar.viewsByType = {};
- this._calendar.reinitView();
- };
- // 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 () {
- var locale;
- var localeDefaults;
- var isRTL;
- var dirDefaults;
- var rawOptions;
- locale = util_1.firstDefined(// explicit locale option given?
- this.dynamicOverrides.locale, this.overrides.locale);
- localeDefaults = locale_1.localeOptionHash[locale];
- if (!localeDefaults) {
- locale = options_1.globalDefaults.locale;
- localeDefaults = locale_1.localeOptionHash[locale] || {};
- }
- isRTL = util_1.firstDefined(// based on options computed so far, is direction RTL?
- this.dynamicOverrides.isRTL, this.overrides.isRTL, localeDefaults.isRTL, options_1.globalDefaults.isRTL);
- dirDefaults = isRTL ? options_1.rtlDefaults : {};
- this.dirDefaults = dirDefaults;
- this.localeDefaults = localeDefaults;
- rawOptions = options_1.mergeOptions([
- options_1.globalDefaults,
- dirDefaults,
- localeDefaults,
- this.overrides,
- this.dynamicOverrides
- ]);
- locale_1.populateInstanceComputableOptions(rawOptions); // fill in gaps with computed options
- this.reset(rawOptions);
- };
- // stores the new options internally, but does not rerender anything.
- OptionsManager.prototype.recordOverrides = function (newOptionHash) {
- var optionName;
- for (optionName in newOptionHash) {
- this.dynamicOverrides[optionName] = newOptionHash[optionName];
- }
- this._calendar.viewSpecManager.clearCache(); // the dynamic override invalidates the options in this cache, so just clear it
- this.compute(); // this.options needs to be recomputed after the dynamic override
- };
- return OptionsManager;
-}(Model_1.default));
-exports.default = OptionsManager;
-
-
-/***/ }),
-/* 241 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var moment = __webpack_require__(0);
-var $ = __webpack_require__(3);
-var ViewRegistry_1 = __webpack_require__(22);
-var util_1 = __webpack_require__(4);
-var options_1 = __webpack_require__(32);
-var locale_1 = __webpack_require__(31);
-var ViewSpecManager = /** @class */ (function () {
- function ViewSpecManager(optionsManager, _calendar) {
- this.optionsManager = optionsManager;
- this._calendar = _calendar;
- this.clearCache();
- }
- ViewSpecManager.prototype.clearCache = function () {
- this.viewSpecCache = {};
- };
- // Gets information about how to create a view. Will use a cache.
- ViewSpecManager.prototype.getViewSpec = function (viewType) {
- var cache = this.viewSpecCache;
- return cache[viewType] || (cache[viewType] = this.buildViewSpec(viewType));
- };
- // Given a duration singular unit, like "week" or "day", finds a matching view spec.
- // Preference is given to views that have corresponding buttons.
- ViewSpecManager.prototype.getUnitViewSpec = function (unit) {
- var viewTypes;
- var i;
- var spec;
- if ($.inArray(unit, util_1.unitsDesc) !== -1) {
- // put views that have buttons first. there will be duplicates, but oh well
- viewTypes = this._calendar.header.getViewsWithButtons(); // TODO: include footer as well?
- $.each(ViewRegistry_1.viewHash, function (viewType) {
- viewTypes.push(viewType);
- });
- for (i = 0; i < viewTypes.length; i++) {
- spec = this.getViewSpec(viewTypes[i]);
- if (spec) {
- if (spec.singleUnit === unit) {
- return spec;
- }
- }
- }
- }
- };
- // Builds an object with information on how to create a given view
- ViewSpecManager.prototype.buildViewSpec = function (requestedViewType) {
- var viewOverrides = this.optionsManager.overrides.views || {};
- var specChain = []; // for the view. lowest to highest priority
- var defaultsChain = []; // for the view. lowest to highest priority
- var overridesChain = []; // for the view. lowest to highest priority
- var viewType = requestedViewType;
- var spec; // for the view
- var overrides; // for the view
- var durationInput;
- var duration;
- var unit;
- // iterate from the specific view definition to a more general one until we hit an actual View class
- while (viewType) {
- spec = ViewRegistry_1.viewHash[viewType];
- overrides = viewOverrides[viewType];
- viewType = null; // clear. might repopulate for another iteration
- if (typeof spec === 'function') {
- spec = { 'class': spec };
- }
- if (spec) {
- specChain.unshift(spec);
- defaultsChain.unshift(spec.defaults || {});
- durationInput = durationInput || spec.duration;
- viewType = viewType || spec.type;
- }
- if (overrides) {
- overridesChain.unshift(overrides); // view-specific option hashes have options at zero-level
- durationInput = durationInput || overrides.duration;
- viewType = viewType || overrides.type;
- }
- }
- spec = util_1.mergeProps(specChain);
- spec.type = requestedViewType;
- if (!spec['class']) {
- return false;
- }
- // fall back to top-level `duration` option
- durationInput = durationInput ||
- this.optionsManager.dynamicOverrides.duration ||
- this.optionsManager.overrides.duration;
- if (durationInput) {
- duration = moment.duration(durationInput);
- if (duration.valueOf()) {
- unit = util_1.computeDurationGreatestUnit(duration, durationInput);
- spec.duration = duration;
- spec.durationUnit = unit;
- // view is a single-unit duration, like "week" or "day"
- // incorporate options for this. lowest priority
- if (duration.as(unit) === 1) {
- spec.singleUnit = unit;
- overridesChain.unshift(viewOverrides[unit] || {});
- }
- }
- }
- spec.defaults = options_1.mergeOptions(defaultsChain);
- spec.overrides = options_1.mergeOptions(overridesChain);
- this.buildViewSpecOptions(spec);
- this.buildViewSpecButtonText(spec, requestedViewType);
- return spec;
- };
- // Builds and assigns a view spec's options object from its already-assigned defaults and overrides
- ViewSpecManager.prototype.buildViewSpecOptions = function (spec) {
- var optionsManager = this.optionsManager;
- spec.options = options_1.mergeOptions([
- options_1.globalDefaults,
- spec.defaults,
- optionsManager.dirDefaults,
- optionsManager.localeDefaults,
- optionsManager.overrides,
- spec.overrides,
- optionsManager.dynamicOverrides // dynamically set via setter. highest precedence
- ]);
- locale_1.populateInstanceComputableOptions(spec.options);
- };
- // Computes and assigns a view spec's buttonText-related options
- ViewSpecManager.prototype.buildViewSpecButtonText = function (spec, requestedViewType) {
- var optionsManager = this.optionsManager;
- // given an options object with a possible `buttonText` hash, lookup the buttonText for the
- // requested view, falling back to a generic unit entry like "week" or "day"
- function queryButtonText(options) {
- var buttonText = options.buttonText || {};
- return buttonText[requestedViewType] ||
- // view can decide to look up a certain key
- (spec.buttonTextKey ? buttonText[spec.buttonTextKey] : null) ||
- // a key like "month"
- (spec.singleUnit ? buttonText[spec.singleUnit] : null);
- }
- // highest to lowest priority
- spec.buttonTextOverride =
- queryButtonText(optionsManager.dynamicOverrides) ||
- queryButtonText(optionsManager.overrides) || // constructor-specified buttonText lookup hash takes precedence
- spec.overrides.buttonText; // `buttonText` for view-specific options is a string
- // highest to lowest priority. mirrors buildViewSpecOptions
- spec.buttonTextDefault =
- queryButtonText(optionsManager.localeDefaults) ||
- queryButtonText(optionsManager.dirDefaults) ||
- spec.defaults.buttonText || // a single string. from ViewSubclass.defaults
- queryButtonText(options_1.globalDefaults) ||
- (spec.duration ? this._calendar.humanizeDuration(spec.duration) : null) || // like "3 days"
- requestedViewType; // fall back to given view name
- };
- return ViewSpecManager;
-}());
-exports.default = ViewSpecManager;
-
-
-/***/ }),
-/* 242 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var $ = __webpack_require__(3);
-var util_1 = __webpack_require__(4);
-var EventPeriod_1 = __webpack_require__(243);
-var ArrayEventSource_1 = __webpack_require__(52);
-var EventSource_1 = __webpack_require__(6);
-var EventSourceParser_1 = __webpack_require__(38);
-var SingleEventDef_1 = __webpack_require__(13);
-var EventInstanceGroup_1 = __webpack_require__(18);
-var EmitterMixin_1 = __webpack_require__(11);
-var ListenerMixin_1 = __webpack_require__(7);
-var EventManager = /** @class */ (function () {
- function EventManager(calendar) {
- this.calendar = calendar;
- this.stickySource = new ArrayEventSource_1.default(calendar);
- this.otherSources = [];
- }
- EventManager.prototype.requestEvents = function (start, end, timezone, force) {
- if (force ||
- !this.currentPeriod ||
- !this.currentPeriod.isWithinRange(start, end) ||
- timezone !== this.currentPeriod.timezone) {
- this.setPeriod(// will change this.currentPeriod
- new EventPeriod_1.default(start, end, timezone));
- }
- return this.currentPeriod.whenReleased();
- };
- // Source Adding/Removing
- // -----------------------------------------------------------------------------------------------------------------
- EventManager.prototype.addSource = function (eventSource) {
- this.otherSources.push(eventSource);
- if (this.currentPeriod) {
- this.currentPeriod.requestSource(eventSource); // might release
- }
- };
- EventManager.prototype.removeSource = function (doomedSource) {
- util_1.removeExact(this.otherSources, doomedSource);
- if (this.currentPeriod) {
- this.currentPeriod.purgeSource(doomedSource); // might release
- }
- };
- EventManager.prototype.removeAllSources = function () {
- this.otherSources = [];
- if (this.currentPeriod) {
- this.currentPeriod.purgeAllSources(); // might release
- }
- };
- // Source Refetching
- // -----------------------------------------------------------------------------------------------------------------
- EventManager.prototype.refetchSource = function (eventSource) {
- var currentPeriod = this.currentPeriod;
- if (currentPeriod) {
- currentPeriod.freeze();
- currentPeriod.purgeSource(eventSource);
- currentPeriod.requestSource(eventSource);
- currentPeriod.thaw();
- }
- };
- EventManager.prototype.refetchAllSources = function () {
- var currentPeriod = this.currentPeriod;
- if (currentPeriod) {
- currentPeriod.freeze();
- currentPeriod.purgeAllSources();
- currentPeriod.requestSources(this.getSources());
- currentPeriod.thaw();
- }
- };
- // Source Querying
- // -----------------------------------------------------------------------------------------------------------------
- EventManager.prototype.getSources = function () {
- return [this.stickySource].concat(this.otherSources);
- };
- // like querySources, but accepts multple match criteria (like multiple IDs)
- EventManager.prototype.multiQuerySources = function (matchInputs) {
- // coerce into an array
- if (!matchInputs) {
- matchInputs = [];
- }
- else if (!$.isArray(matchInputs)) {
- matchInputs = [matchInputs];
- }
- var matchingSources = [];
- var i;
- // resolve raw inputs to real event source objects
- for (i = 0; i < matchInputs.length; i++) {
- matchingSources.push.apply(// append
- matchingSources, this.querySources(matchInputs[i]));
- }
- return matchingSources;
- };
- // matchInput can either by a real event source object, an ID, or the function/URL for the source.
- // returns an array of matching source objects.
- EventManager.prototype.querySources = function (matchInput) {
- var sources = this.otherSources;
- var i;
- var source;
- // given a proper event source object
- for (i = 0; i < sources.length; i++) {
- source = sources[i];
- if (source === matchInput) {
- return [source];
- }
- }
- // an ID match
- source = this.getSourceById(EventSource_1.default.normalizeId(matchInput));
- if (source) {
- return [source];
- }
- // parse as an event source
- matchInput = EventSourceParser_1.default.parse(matchInput, this.calendar);
- if (matchInput) {
- return $.grep(sources, function (source) {
- return isSourcesEquivalent(matchInput, source);
- });
- }
- };
- /*
- ID assumed to already be normalized
- */
- EventManager.prototype.getSourceById = function (id) {
- return $.grep(this.otherSources, function (source) {
- return source.id && source.id === id;
- })[0];
- };
- // Event-Period
- // -----------------------------------------------------------------------------------------------------------------
- EventManager.prototype.setPeriod = function (eventPeriod) {
- if (this.currentPeriod) {
- this.unbindPeriod(this.currentPeriod);
- this.currentPeriod = null;
- }
- this.currentPeriod = eventPeriod;
- this.bindPeriod(eventPeriod);
- eventPeriod.requestSources(this.getSources());
- };
- EventManager.prototype.bindPeriod = function (eventPeriod) {
- this.listenTo(eventPeriod, 'release', function (eventsPayload) {
- this.trigger('release', eventsPayload);
- });
- };
- EventManager.prototype.unbindPeriod = function (eventPeriod) {
- this.stopListeningTo(eventPeriod);
- };
- // Event Getting/Adding/Removing
- // -----------------------------------------------------------------------------------------------------------------
- EventManager.prototype.getEventDefByUid = function (uid) {
- if (this.currentPeriod) {
- return this.currentPeriod.getEventDefByUid(uid);
- }
- };
- EventManager.prototype.addEventDef = function (eventDef, isSticky) {
- if (isSticky) {
- this.stickySource.addEventDef(eventDef);
- }
- if (this.currentPeriod) {
- this.currentPeriod.addEventDef(eventDef); // might release
- }
- };
- EventManager.prototype.removeEventDefsById = function (eventId) {
- this.getSources().forEach(function (eventSource) {
- eventSource.removeEventDefsById(eventId);
- });
- if (this.currentPeriod) {
- this.currentPeriod.removeEventDefsById(eventId); // might release
- }
- };
- EventManager.prototype.removeAllEventDefs = function () {
- this.getSources().forEach(function (eventSource) {
- eventSource.removeAllEventDefs();
- });
- if (this.currentPeriod) {
- this.currentPeriod.removeAllEventDefs();
- }
- };
- // Event Mutating
- // -----------------------------------------------------------------------------------------------------------------
- /*
- Returns an undo function.
- */
- EventManager.prototype.mutateEventsWithId = function (eventDefId, eventDefMutation) {
- var currentPeriod = this.currentPeriod;
- var eventDefs;
- var undoFuncs = [];
- if (currentPeriod) {
- currentPeriod.freeze();
- eventDefs = currentPeriod.getEventDefsById(eventDefId);
- eventDefs.forEach(function (eventDef) {
- // add/remove esp because id might change
- currentPeriod.removeEventDef(eventDef);
- undoFuncs.push(eventDefMutation.mutateSingle(eventDef));
- currentPeriod.addEventDef(eventDef);
- });
- currentPeriod.thaw();
- return function () {
- currentPeriod.freeze();
- for (var i = 0; i < eventDefs.length; i++) {
- currentPeriod.removeEventDef(eventDefs[i]);
- undoFuncs[i]();
- currentPeriod.addEventDef(eventDefs[i]);
- }
- currentPeriod.thaw();
- };
- }
- return function () { };
- };
- /*
- copies and then mutates
- */
- EventManager.prototype.buildMutatedEventInstanceGroup = function (eventDefId, eventDefMutation) {
- var eventDefs = this.getEventDefsById(eventDefId);
- var i;
- var defCopy;
- var allInstances = [];
- for (i = 0; i < eventDefs.length; i++) {
- defCopy = eventDefs[i].clone();
- if (defCopy instanceof SingleEventDef_1.default) {
- eventDefMutation.mutateSingle(defCopy);
- allInstances.push.apply(allInstances, // append
- defCopy.buildInstances());
- }
- }
- return new EventInstanceGroup_1.default(allInstances);
- };
- // Freezing
- // -----------------------------------------------------------------------------------------------------------------
- EventManager.prototype.freeze = function () {
- if (this.currentPeriod) {
- this.currentPeriod.freeze();
- }
- };
- EventManager.prototype.thaw = function () {
- if (this.currentPeriod) {
- this.currentPeriod.thaw();
- }
- };
- // methods that simply forward to EventPeriod
- EventManager.prototype.getEventDefsById = function (eventDefId) {
- return this.currentPeriod.getEventDefsById(eventDefId);
- };
- EventManager.prototype.getEventInstances = function () {
- return this.currentPeriod.getEventInstances();
- };
- EventManager.prototype.getEventInstancesWithId = function (eventDefId) {
- return this.currentPeriod.getEventInstancesWithId(eventDefId);
- };
- EventManager.prototype.getEventInstancesWithoutId = function (eventDefId) {
- return this.currentPeriod.getEventInstancesWithoutId(eventDefId);
- };
- return EventManager;
-}());
-exports.default = EventManager;
-EmitterMixin_1.default.mixInto(EventManager);
-ListenerMixin_1.default.mixInto(EventManager);
-function isSourcesEquivalent(source0, source1) {
- return source0.getPrimitive() === source1.getPrimitive();
-}
-
-
-/***/ }),
-/* 243 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var $ = __webpack_require__(3);
-var util_1 = __webpack_require__(4);
-var Promise_1 = __webpack_require__(20);
-var EmitterMixin_1 = __webpack_require__(11);
-var UnzonedRange_1 = __webpack_require__(5);
-var EventInstanceGroup_1 = __webpack_require__(18);
-var EventPeriod = /** @class */ (function () {
- function EventPeriod(start, end, timezone) {
- this.pendingCnt = 0;
- this.freezeDepth = 0;
- this.stuntedReleaseCnt = 0;
- this.releaseCnt = 0;
- this.start = start;
- this.end = end;
- this.timezone = timezone;
- this.unzonedRange = new UnzonedRange_1.default(start.clone().stripZone(), end.clone().stripZone());
- this.requestsByUid = {};
- this.eventDefsByUid = {};
- this.eventDefsById = {};
- this.eventInstanceGroupsById = {};
- }
- EventPeriod.prototype.isWithinRange = function (start, end) {
- // TODO: use a range util function?
- return !start.isBefore(this.start) && !end.isAfter(this.end);
- };
- // Requesting and Purging
- // -----------------------------------------------------------------------------------------------------------------
- EventPeriod.prototype.requestSources = function (sources) {
- this.freeze();
- for (var i = 0; i < sources.length; i++) {
- this.requestSource(sources[i]);
- }
- this.thaw();
- };
- EventPeriod.prototype.requestSource = function (source) {
- var _this = this;
- var request = { source: source, status: 'pending', eventDefs: null };
- this.requestsByUid[source.uid] = request;
- this.pendingCnt += 1;
- source.fetch(this.start, this.end, this.timezone).then(function (eventDefs) {
- if (request.status !== 'cancelled') {
- request.status = 'completed';
- request.eventDefs = eventDefs;
- _this.addEventDefs(eventDefs);
- _this.pendingCnt--;
- _this.tryRelease();
- }
- }, function () {
- if (request.status !== 'cancelled') {
- request.status = 'failed';
- _this.pendingCnt--;
- _this.tryRelease();
- }
- });
- };
- EventPeriod.prototype.purgeSource = function (source) {
- var request = this.requestsByUid[source.uid];
- if (request) {
- delete this.requestsByUid[source.uid];
- if (request.status === 'pending') {
- request.status = 'cancelled';
- this.pendingCnt--;
- this.tryRelease();
- }
- else if (request.status === 'completed') {
- request.eventDefs.forEach(this.removeEventDef.bind(this));
- }
- }
- };
- EventPeriod.prototype.purgeAllSources = function () {
- var requestsByUid = this.requestsByUid;
- var uid;
- var request;
- var completedCnt = 0;
- for (uid in requestsByUid) {
- request = requestsByUid[uid];
- if (request.status === 'pending') {
- request.status = 'cancelled';
- }
- else if (request.status === 'completed') {
- completedCnt++;
- }
- }
- this.requestsByUid = {};
- this.pendingCnt = 0;
- if (completedCnt) {
- this.removeAllEventDefs(); // might release
- }
- };
- // Event Definitions
- // -----------------------------------------------------------------------------------------------------------------
- EventPeriod.prototype.getEventDefByUid = function (eventDefUid) {
- return this.eventDefsByUid[eventDefUid];
- };
- EventPeriod.prototype.getEventDefsById = function (eventDefId) {
- var a = this.eventDefsById[eventDefId];
- if (a) {
- return a.slice(); // clone
- }
- return [];
- };
- EventPeriod.prototype.addEventDefs = function (eventDefs) {
- for (var i = 0; i < eventDefs.length; i++) {
- this.addEventDef(eventDefs[i]);
- }
- };
- EventPeriod.prototype.addEventDef = function (eventDef) {
- var eventDefsById = this.eventDefsById;
- var eventDefId = eventDef.id;
- var eventDefs = eventDefsById[eventDefId] || (eventDefsById[eventDefId] = []);
- var eventInstances = eventDef.buildInstances(this.unzonedRange);
- var i;
- eventDefs.push(eventDef);
- this.eventDefsByUid[eventDef.uid] = eventDef;
- for (i = 0; i < eventInstances.length; i++) {
- this.addEventInstance(eventInstances[i], eventDefId);
- }
- };
- EventPeriod.prototype.removeEventDefsById = function (eventDefId) {
- var _this = this;
- this.getEventDefsById(eventDefId).forEach(function (eventDef) {
- _this.removeEventDef(eventDef);
- });
- };
- EventPeriod.prototype.removeAllEventDefs = function () {
- var isEmpty = $.isEmptyObject(this.eventDefsByUid);
- this.eventDefsByUid = {};
- this.eventDefsById = {};
- this.eventInstanceGroupsById = {};
- if (!isEmpty) {
- this.tryRelease();
- }
- };
- EventPeriod.prototype.removeEventDef = function (eventDef) {
- var eventDefsById = this.eventDefsById;
- var eventDefs = eventDefsById[eventDef.id];
- delete this.eventDefsByUid[eventDef.uid];
- if (eventDefs) {
- util_1.removeExact(eventDefs, eventDef);
- if (!eventDefs.length) {
- delete eventDefsById[eventDef.id];
- }
- this.removeEventInstancesForDef(eventDef);
- }
- };
- // Event Instances
- // -----------------------------------------------------------------------------------------------------------------
- EventPeriod.prototype.getEventInstances = function () {
- var eventInstanceGroupsById = this.eventInstanceGroupsById;
- var eventInstances = [];
- var id;
- for (id in eventInstanceGroupsById) {
- eventInstances.push.apply(eventInstances, // append
- eventInstanceGroupsById[id].eventInstances);
- }
- return eventInstances;
- };
- EventPeriod.prototype.getEventInstancesWithId = function (eventDefId) {
- var eventInstanceGroup = this.eventInstanceGroupsById[eventDefId];
- if (eventInstanceGroup) {
- return eventInstanceGroup.eventInstances.slice(); // clone
- }
- return [];
- };
- EventPeriod.prototype.getEventInstancesWithoutId = function (eventDefId) {
- var eventInstanceGroupsById = this.eventInstanceGroupsById;
- var matchingInstances = [];
- var id;
- for (id in eventInstanceGroupsById) {
- if (id !== eventDefId) {
- matchingInstances.push.apply(matchingInstances, // append
- eventInstanceGroupsById[id].eventInstances);
- }
- }
- return matchingInstances;
- };
- EventPeriod.prototype.addEventInstance = function (eventInstance, eventDefId) {
- var eventInstanceGroupsById = this.eventInstanceGroupsById;
- var eventInstanceGroup = eventInstanceGroupsById[eventDefId] ||
- (eventInstanceGroupsById[eventDefId] = new EventInstanceGroup_1.default());
- eventInstanceGroup.eventInstances.push(eventInstance);
- this.tryRelease();
- };
- EventPeriod.prototype.removeEventInstancesForDef = function (eventDef) {
- var eventInstanceGroupsById = this.eventInstanceGroupsById;
- var eventInstanceGroup = eventInstanceGroupsById[eventDef.id];
- var removeCnt;
- if (eventInstanceGroup) {
- removeCnt = util_1.removeMatching(eventInstanceGroup.eventInstances, function (currentEventInstance) {
- return currentEventInstance.def === eventDef;
- });
- if (!eventInstanceGroup.eventInstances.length) {
- delete eventInstanceGroupsById[eventDef.id];
- }
- if (removeCnt) {
- this.tryRelease();
- }
- }
- };
- // Releasing and Freezing
- // -----------------------------------------------------------------------------------------------------------------
- EventPeriod.prototype.tryRelease = function () {
- if (!this.pendingCnt) {
- if (!this.freezeDepth) {
- this.release();
- }
- else {
- this.stuntedReleaseCnt++;
- }
- }
- };
- EventPeriod.prototype.release = function () {
- this.releaseCnt++;
- this.trigger('release', this.eventInstanceGroupsById);
- };
- EventPeriod.prototype.whenReleased = function () {
- var _this = this;
- if (this.releaseCnt) {
- return Promise_1.default.resolve(this.eventInstanceGroupsById);
- }
- else {
- return Promise_1.default.construct(function (onResolve) {
- _this.one('release', onResolve);
- });
- }
- };
- EventPeriod.prototype.freeze = function () {
- if (!(this.freezeDepth++)) {
- this.stuntedReleaseCnt = 0;
- }
- };
- EventPeriod.prototype.thaw = function () {
- if (!(--this.freezeDepth) && this.stuntedReleaseCnt && !this.pendingCnt) {
- this.release();
- }
- };
- return EventPeriod;
-}());
-exports.default = EventPeriod;
-EmitterMixin_1.default.mixInto(EventPeriod);
-
-
-/***/ }),
-/* 244 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var $ = __webpack_require__(3);
-var util_1 = __webpack_require__(4);
-var ListenerMixin_1 = __webpack_require__(7);
-/* Creates a clone of an element and lets it track the mouse as it moves
-----------------------------------------------------------------------------------------------------------------------*/
-var MouseFollower = /** @class */ (function () {
- function MouseFollower(sourceEl, options) {
- this.isFollowing = false;
- this.isHidden = false;
- this.isAnimating = false; // doing the revert animation?
- this.options = options = options || {};
- this.sourceEl = sourceEl;
- this.parentEl = options.parentEl ? $(options.parentEl) : sourceEl.parent(); // default to sourceEl's parent
- }
- // Causes the element to start following the mouse
- MouseFollower.prototype.start = function (ev) {
- if (!this.isFollowing) {
- this.isFollowing = true;
- this.y0 = util_1.getEvY(ev);
- this.x0 = util_1.getEvX(ev);
- this.topDelta = 0;
- this.leftDelta = 0;
- if (!this.isHidden) {
- this.updatePosition();
- }
- if (util_1.getEvIsTouch(ev)) {
- this.listenTo($(document), 'touchmove', this.handleMove);
- }
- else {
- this.listenTo($(document), 'mousemove', this.handleMove);
- }
- }
- };
- // Causes the element to stop following the mouse. If shouldRevert is true, will animate back to original position.
- // `callback` gets invoked when the animation is complete. If no animation, it is invoked immediately.
- MouseFollower.prototype.stop = function (shouldRevert, callback) {
- var _this = this;
- var revertDuration = this.options.revertDuration;
- var complete = function () {
- _this.isAnimating = false;
- _this.removeElement();
- _this.top0 = _this.left0 = null; // reset state for future updatePosition calls
- if (callback) {
- callback();
- }
- };
- if (this.isFollowing && !this.isAnimating) {
- this.isFollowing = false;
- this.stopListeningTo($(document));
- if (shouldRevert && revertDuration && !this.isHidden) {
- this.isAnimating = true;
- this.el.animate({
- top: this.top0,
- left: this.left0
- }, {
- duration: revertDuration,
- complete: complete
- });
- }
- else {
- complete();
- }
- }
- };
- // Gets the tracking element. Create it if necessary
- MouseFollower.prototype.getEl = function () {
- var el = this.el;
- if (!el) {
- el = this.el = this.sourceEl.clone()
- .addClass(this.options.additionalClass || '')
- .css({
- position: 'absolute',
- visibility: '',
- display: this.isHidden ? 'none' : '',
- margin: 0,
- right: 'auto',
- bottom: 'auto',
- width: this.sourceEl.width(),
- height: this.sourceEl.height(),
- opacity: this.options.opacity || '',
- zIndex: this.options.zIndex
- });
- // we don't want long taps or any mouse interaction causing selection/menus.
- // would use preventSelection(), but that prevents selectstart, causing problems.
- el.addClass('fc-unselectable');
- el.appendTo(this.parentEl);
- }
- return el;
- };
- // Removes the tracking element if it has already been created
- MouseFollower.prototype.removeElement = function () {
- if (this.el) {
- this.el.remove();
- this.el = null;
- }
- };
- // Update the CSS position of the tracking element
- MouseFollower.prototype.updatePosition = function () {
- var sourceOffset;
- var origin;
- this.getEl(); // ensure this.el
- // make sure origin info was computed
- if (this.top0 == null) {
- sourceOffset = this.sourceEl.offset();
- origin = this.el.offsetParent().offset();
- this.top0 = sourceOffset.top - origin.top;
- this.left0 = sourceOffset.left - origin.left;
- }
- this.el.css({
- top: this.top0 + this.topDelta,
- left: this.left0 + this.leftDelta
- });
- };
- // Gets called when the user moves the mouse
- MouseFollower.prototype.handleMove = function (ev) {
- this.topDelta = util_1.getEvY(ev) - this.y0;
- this.leftDelta = util_1.getEvX(ev) - this.x0;
- if (!this.isHidden) {
- this.updatePosition();
- }
- };
- // Temporarily makes the tracking element invisible. Can be called before following starts
- MouseFollower.prototype.hide = function () {
- if (!this.isHidden) {
- this.isHidden = true;
- if (this.el) {
- this.el.hide();
- }
- }
- };
- // Show the tracking element after it has been temporarily hidden
- MouseFollower.prototype.show = function () {
- if (this.isHidden) {
- this.isHidden = false;
- this.updatePosition();
- this.getEl().show();
- }
- };
- return MouseFollower;
-}());
-exports.default = MouseFollower;
-ListenerMixin_1.default.mixInto(MouseFollower);
-
-
-/***/ }),
-/* 245 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var HitDragListener_1 = __webpack_require__(23);
-var Interaction_1 = __webpack_require__(15);
-var DateClicking = /** @class */ (function (_super) {
- tslib_1.__extends(DateClicking, _super);
- /*
- component must implement:
- - bindDateHandlerToEl
- - getSafeHitFootprint
- - getHitEl
- */
- function DateClicking(component) {
- var _this = _super.call(this, component) || this;
- _this.dragListener = _this.buildDragListener();
- return _this;
- }
- DateClicking.prototype.end = function () {
- this.dragListener.endInteraction();
- };
- DateClicking.prototype.bindToEl = function (el) {
- var component = this.component;
- var dragListener = this.dragListener;
- component.bindDateHandlerToEl(el, 'mousedown', function (ev) {
- if (!component.shouldIgnoreMouse()) {
- dragListener.startInteraction(ev);
- }
- });
- component.bindDateHandlerToEl(el, 'touchstart', function (ev) {
- if (!component.shouldIgnoreTouch()) {
- dragListener.startInteraction(ev);
- }
- });
- };
- // Creates a listener that tracks the user's drag across day elements, for day clicking.
- DateClicking.prototype.buildDragListener = function () {
- var _this = this;
- var component = this.component;
- var dayClickHit; // null if invalid dayClick
- var dragListener = new HitDragListener_1.default(component, {
- scroll: this.opt('dragScroll'),
- interactionStart: function () {
- dayClickHit = dragListener.origHit;
- },
- hitOver: function (hit, isOrig, origHit) {
- // if user dragged to another cell at any point, it can no longer be a dayClick
- if (!isOrig) {
- dayClickHit = null;
- }
- },
- hitOut: function () {
- dayClickHit = null;
- },
- interactionEnd: function (ev, isCancelled) {
- var componentFootprint;
- if (!isCancelled && dayClickHit) {
- componentFootprint = component.getSafeHitFootprint(dayClickHit);
- if (componentFootprint) {
- _this.view.triggerDayClick(componentFootprint, component.getHitEl(dayClickHit), ev);
- }
- }
- }
- });
- // because dragListener won't be called with any time delay, "dragging" will begin immediately,
- // which will kill any touchmoving/scrolling. Prevent this.
- dragListener.shouldCancelTouchScroll = false;
- dragListener.scrollAlwaysKills = true;
- return dragListener;
- };
- return DateClicking;
-}(Interaction_1.default));
-exports.default = DateClicking;
-
-
-/***/ }),
-/* 246 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var util_1 = __webpack_require__(4);
-var EventRenderer_1 = __webpack_require__(42);
-/*
-Only handles foreground segs.
-Does not own rendering. Use for low-level util methods by TimeGrid.
-*/
-var TimeGridEventRenderer = /** @class */ (function (_super) {
- tslib_1.__extends(TimeGridEventRenderer, _super);
- function TimeGridEventRenderer(timeGrid, fillRenderer) {
- var _this = _super.call(this, timeGrid, fillRenderer) || this;
- _this.timeGrid = timeGrid;
- return _this;
- }
- TimeGridEventRenderer.prototype.renderFgSegs = function (segs) {
- this.renderFgSegsIntoContainers(segs, this.timeGrid.fgContainerEls);
- };
- // Given an array of foreground segments, render a DOM element for each, computes position,
- // and attaches to the column inner-container elements.
- TimeGridEventRenderer.prototype.renderFgSegsIntoContainers = function (segs, containerEls) {
- var segsByCol;
- var col;
- segsByCol = this.timeGrid.groupSegsByCol(segs);
- for (col = 0; col < this.timeGrid.colCnt; col++) {
- this.updateFgSegCoords(segsByCol[col]);
- }
- this.timeGrid.attachSegsByCol(segsByCol, containerEls);
- };
- TimeGridEventRenderer.prototype.unrenderFgSegs = function () {
- if (this.fgSegs) {
- this.fgSegs.forEach(function (seg) {
- seg.el.remove();
- });
- }
- };
- // Computes a default event time formatting string if `timeFormat` is not explicitly defined
- TimeGridEventRenderer.prototype.computeEventTimeFormat = function () {
- return this.opt('noMeridiemTimeFormat'); // like "6:30" (no AM/PM)
- };
- // Computes a default `displayEventEnd` value if one is not expliclty defined
- TimeGridEventRenderer.prototype.computeDisplayEventEnd = function () {
- return true;
- };
- // Renders the HTML for a single event segment's default rendering
- TimeGridEventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {
- var view = this.view;
- var calendar = view.calendar;
- var componentFootprint = seg.footprint.componentFootprint;
- var isAllDay = componentFootprint.isAllDay;
- var eventDef = seg.footprint.eventDef;
- var isDraggable = view.isEventDefDraggable(eventDef);
- var isResizableFromStart = !disableResizing && seg.isStart && view.isEventDefResizableFromStart(eventDef);
- var isResizableFromEnd = !disableResizing && seg.isEnd && view.isEventDefResizableFromEnd(eventDef);
- var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd);
- var skinCss = util_1.cssToStr(this.getSkinCss(eventDef));
- var timeText;
- var fullTimeText; // more verbose time text. for the print stylesheet
- var startTimeText; // just the start time text
- classes.unshift('fc-time-grid-event', 'fc-v-event');
- // if the event appears to span more than one day...
- if (view.isMultiDayRange(componentFootprint.unzonedRange)) {
- // Don't display time text on segments that run entirely through a day.
- // That would appear as midnight-midnight and would look dumb.
- // Otherwise, display the time text for the *segment's* times (like 6pm-midnight or midnight-10am)
- if (seg.isStart || seg.isEnd) {
- var zonedStart = calendar.msToMoment(seg.startMs);
- var zonedEnd = calendar.msToMoment(seg.endMs);
- timeText = this._getTimeText(zonedStart, zonedEnd, isAllDay);
- fullTimeText = this._getTimeText(zonedStart, zonedEnd, isAllDay, 'LT');
- startTimeText = this._getTimeText(zonedStart, zonedEnd, isAllDay, null, false); // displayEnd=false
- }
- }
- else {
- // Display the normal time text for the *event's* times
- timeText = this.getTimeText(seg.footprint);
- fullTimeText = this.getTimeText(seg.footprint, 'LT');
- startTimeText = this.getTimeText(seg.footprint, null, false); // displayEnd=false
- }
- return '<a class="' + classes.join(' ') + '"' +
- (eventDef.url ?
- ' href="' + util_1.htmlEscape(eventDef.url) + '"' :
- '') +
- (skinCss ?
- ' style="' + skinCss + '"' :
- '') +
- '>' +
- '<div class="fc-content">' +
- (timeText ?
- '<div class="fc-time"' +
- ' data-start="' + util_1.htmlEscape(startTimeText) + '"' +
- ' data-full="' + util_1.htmlEscape(fullTimeText) + '"' +
- '>' +
- '<span>' + util_1.htmlEscape(timeText) + '</span>' +
- '</div>' :
- '') +
- (eventDef.title ?
- '<div class="fc-title">' +
- util_1.htmlEscape(eventDef.title) +
- '</div>' :
- '') +
- '</div>' +
- '<div class="fc-bg"/>' +
- /* TODO: write CSS for this
- (isResizableFromStart ?
- '<div class="fc-resizer fc-start-resizer" />' :
- ''
- ) +
- */
- (isResizableFromEnd ?
- '<div class="fc-resizer fc-end-resizer" />' :
- '') +
- '</a>';
- };
- // Given segments that are assumed to all live in the *same column*,
- // compute their verical/horizontal coordinates and assign to their elements.
- TimeGridEventRenderer.prototype.updateFgSegCoords = function (segs) {
- this.timeGrid.computeSegVerticals(segs); // horizontals relies on this
- this.computeFgSegHorizontals(segs); // compute horizontal coordinates, z-index's, and reorder the array
- this.timeGrid.assignSegVerticals(segs);
- this.assignFgSegHorizontals(segs);
- };
- // Given an array of segments that are all in the same column, sets the backwardCoord and forwardCoord on each.
- // NOTE: Also reorders the given array by date!
- TimeGridEventRenderer.prototype.computeFgSegHorizontals = function (segs) {
- var levels;
- var level0;
- var i;
- this.sortEventSegs(segs); // order by certain criteria
- levels = buildSlotSegLevels(segs);
- computeForwardSlotSegs(levels);
- if ((level0 = levels[0])) {
- for (i = 0; i < level0.length; i++) {
- computeSlotSegPressures(level0[i]);
- }
- for (i = 0; i < level0.length; i++) {
- this.computeFgSegForwardBack(level0[i], 0, 0);
- }
- }
- };
- // Calculate seg.forwardCoord and seg.backwardCoord for the segment, where both values range
- // from 0 to 1. If the calendar is left-to-right, the seg.backwardCoord maps to "left" and
- // seg.forwardCoord maps to "right" (via percentage). Vice-versa if the calendar is right-to-left.
- //
- // The segment might be part of a "series", which means consecutive segments with the same pressure
- // who's width is unknown until an edge has been hit. `seriesBackwardPressure` is the number of
- // segments behind this one in the current series, and `seriesBackwardCoord` is the starting
- // coordinate of the first segment in the series.
- TimeGridEventRenderer.prototype.computeFgSegForwardBack = function (seg, seriesBackwardPressure, seriesBackwardCoord) {
- var forwardSegs = seg.forwardSegs;
- var i;
- if (seg.forwardCoord === undefined) {
- if (!forwardSegs.length) {
- // if there are no forward segments, this segment should butt up against the edge
- seg.forwardCoord = 1;
- }
- else {
- // sort highest pressure first
- this.sortForwardSegs(forwardSegs);
- // this segment's forwardCoord will be calculated from the backwardCoord of the
- // highest-pressure forward segment.
- this.computeFgSegForwardBack(forwardSegs[0], seriesBackwardPressure + 1, seriesBackwardCoord);
- seg.forwardCoord = forwardSegs[0].backwardCoord;
- }
- // calculate the backwardCoord from the forwardCoord. consider the series
- seg.backwardCoord = seg.forwardCoord -
- (seg.forwardCoord - seriesBackwardCoord) / // available width for series
- (seriesBackwardPressure + 1); // # of segments in the series
- // use this segment's coordinates to computed the coordinates of the less-pressurized
- // forward segments
- for (i = 0; i < forwardSegs.length; i++) {
- this.computeFgSegForwardBack(forwardSegs[i], 0, seg.forwardCoord);
- }
- }
- };
- TimeGridEventRenderer.prototype.sortForwardSegs = function (forwardSegs) {
- forwardSegs.sort(util_1.proxy(this, 'compareForwardSegs'));
- };
- // A cmp function for determining which forward segment to rely on more when computing coordinates.
- TimeGridEventRenderer.prototype.compareForwardSegs = function (seg1, seg2) {
- // put higher-pressure first
- return seg2.forwardPressure - seg1.forwardPressure ||
- // put segments that are closer to initial edge first (and favor ones with no coords yet)
- (seg1.backwardCoord || 0) - (seg2.backwardCoord || 0) ||
- // do normal sorting...
- this.compareEventSegs(seg1, seg2);
- };
- // Given foreground event segments that have already had their position coordinates computed,
- // assigns position-related CSS values to their elements.
- TimeGridEventRenderer.prototype.assignFgSegHorizontals = function (segs) {
- var i;
- var seg;
- for (i = 0; i < segs.length; i++) {
- seg = segs[i];
- seg.el.css(this.generateFgSegHorizontalCss(seg));
- // if the height is short, add a className for alternate styling
- if (seg.bottom - seg.top < 30) {
- seg.el.addClass('fc-short');
- }
- }
- };
- // Generates an object with CSS properties/values that should be applied to an event segment element.
- // Contains important positioning-related properties that should be applied to any event element, customized or not.
- TimeGridEventRenderer.prototype.generateFgSegHorizontalCss = function (seg) {
- var shouldOverlap = this.opt('slotEventOverlap');
- var backwardCoord = seg.backwardCoord; // the left side if LTR. the right side if RTL. floating-point
- var forwardCoord = seg.forwardCoord; // the right side if LTR. the left side if RTL. floating-point
- var props = this.timeGrid.generateSegVerticalCss(seg); // get top/bottom first
- var isRTL = this.timeGrid.isRTL;
- var left; // amount of space from left edge, a fraction of the total width
- var right; // amount of space from right edge, a fraction of the total width
- if (shouldOverlap) {
- // double the width, but don't go beyond the maximum forward coordinate (1.0)
- forwardCoord = Math.min(1, backwardCoord + (forwardCoord - backwardCoord) * 2);
- }
- if (isRTL) {
- left = 1 - forwardCoord;
- right = backwardCoord;
- }
- else {
- left = backwardCoord;
- right = 1 - forwardCoord;
- }
- props.zIndex = seg.level + 1; // convert from 0-base to 1-based
- props.left = left * 100 + '%';
- props.right = right * 100 + '%';
- if (shouldOverlap && seg.forwardPressure) {
- // add padding to the edge so that forward stacked events don't cover the resizer's icon
- props[isRTL ? 'marginLeft' : 'marginRight'] = 10 * 2; // 10 is a guesstimate of the icon's width
- }
- return props;
- };
- return TimeGridEventRenderer;
-}(EventRenderer_1.default));
-exports.default = TimeGridEventRenderer;
-// Builds an array of segments "levels". The first level will be the leftmost tier of segments if the calendar is
-// left-to-right, or the rightmost if the calendar is right-to-left. Assumes the segments are already ordered by date.
-function buildSlotSegLevels(segs) {
- var levels = [];
- var i;
- var seg;
- var j;
- for (i = 0; i < segs.length; i++) {
- seg = segs[i];
- // go through all the levels and stop on the first level where there are no collisions
- for (j = 0; j < levels.length; j++) {
- if (!computeSlotSegCollisions(seg, levels[j]).length) {
- break;
- }
- }
- seg.level = j;
- (levels[j] || (levels[j] = [])).push(seg);
- }
- return levels;
-}
-// For every segment, figure out the other segments that are in subsequent
-// levels that also occupy the same vertical space. Accumulate in seg.forwardSegs
-function computeForwardSlotSegs(levels) {
- var i;
- var level;
- var j;
- var seg;
- var k;
- for (i = 0; i < levels.length; i++) {
- level = levels[i];
- for (j = 0; j < level.length; j++) {
- seg = level[j];
- seg.forwardSegs = [];
- for (k = i + 1; k < levels.length; k++) {
- computeSlotSegCollisions(seg, levels[k], seg.forwardSegs);
- }
- }
- }
-}
-// Figure out which path forward (via seg.forwardSegs) results in the longest path until
-// the furthest edge is reached. The number of segments in this path will be seg.forwardPressure
-function computeSlotSegPressures(seg) {
- var forwardSegs = seg.forwardSegs;
- var forwardPressure = 0;
- var i;
- var forwardSeg;
- if (seg.forwardPressure === undefined) {
- for (i = 0; i < forwardSegs.length; i++) {
- forwardSeg = forwardSegs[i];
- // figure out the child's maximum forward path
- computeSlotSegPressures(forwardSeg);
- // either use the existing maximum, or use the child's forward pressure
- // plus one (for the forwardSeg itself)
- forwardPressure = Math.max(forwardPressure, 1 + forwardSeg.forwardPressure);
- }
- seg.forwardPressure = forwardPressure;
- }
-}
-// Find all the segments in `otherSegs` that vertically collide with `seg`.
-// Append into an optionally-supplied `results` array and return.
-function computeSlotSegCollisions(seg, otherSegs, results) {
- if (results === void 0) { results = []; }
- for (var i = 0; i < otherSegs.length; i++) {
- if (isSlotSegCollision(seg, otherSegs[i])) {
- results.push(otherSegs[i]);
- }
- }
- return results;
-}
-// Do these segments occupy the same vertical space?
-function isSlotSegCollision(seg1, seg2) {
- return seg1.bottom > seg2.top && seg1.top < seg2.bottom;
-}
-
-
-/***/ }),
-/* 247 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var $ = __webpack_require__(3);
-var HelperRenderer_1 = __webpack_require__(58);
-var TimeGridHelperRenderer = /** @class */ (function (_super) {
- tslib_1.__extends(TimeGridHelperRenderer, _super);
- function TimeGridHelperRenderer() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- TimeGridHelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {
- var helperNodes = [];
- var i;
- var seg;
- var sourceEl;
- // TODO: not good to call eventRenderer this way
- this.eventRenderer.renderFgSegsIntoContainers(segs, this.component.helperContainerEls);
- // Try to make the segment that is in the same row as sourceSeg look the same
- for (i = 0; i < segs.length; i++) {
- seg = segs[i];
- if (sourceSeg && sourceSeg.col === seg.col) {
- sourceEl = sourceSeg.el;
- seg.el.css({
- left: sourceEl.css('left'),
- right: sourceEl.css('right'),
- 'margin-left': sourceEl.css('margin-left'),
- 'margin-right': sourceEl.css('margin-right')
- });
- }
- helperNodes.push(seg.el[0]);
- }
- return $(helperNodes); // must return the elements rendered
- };
- return TimeGridHelperRenderer;
-}(HelperRenderer_1.default));
-exports.default = TimeGridHelperRenderer;
-
-
-/***/ }),
-/* 248 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var FillRenderer_1 = __webpack_require__(57);
-var TimeGridFillRenderer = /** @class */ (function (_super) {
- tslib_1.__extends(TimeGridFillRenderer, _super);
- function TimeGridFillRenderer() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- TimeGridFillRenderer.prototype.attachSegEls = function (type, segs) {
- var timeGrid = this.component;
- var containerEls;
- // TODO: more efficient lookup
- if (type === 'bgEvent') {
- containerEls = timeGrid.bgContainerEls;
- }
- else if (type === 'businessHours') {
- containerEls = timeGrid.businessContainerEls;
- }
- else if (type === 'highlight') {
- containerEls = timeGrid.highlightContainerEls;
- }
- timeGrid.updateSegVerticals(segs);
- timeGrid.attachSegsByCol(timeGrid.groupSegsByCol(segs), containerEls);
- return segs.map(function (seg) {
- return seg.el[0];
- });
- };
- return TimeGridFillRenderer;
-}(FillRenderer_1.default));
-exports.default = TimeGridFillRenderer;
-
-
-/***/ }),
-/* 249 */
-/***/ (function(module, exports, __webpack_require__) {
-
-/* A rectangular panel that is absolutely positioned over other content
-------------------------------------------------------------------------------------------------------------------------
-Options:
- - className (string)
- - content (HTML string or jQuery element set)
- - parentEl
- - top
- - left
- - right (the x coord of where the right edge should be. not a "CSS" right)
- - autoHide (boolean)
- - show (callback)
- - hide (callback)
-*/
-Object.defineProperty(exports, "__esModule", { value: true });
-var $ = __webpack_require__(3);
-var util_1 = __webpack_require__(4);
-var ListenerMixin_1 = __webpack_require__(7);
-var Popover = /** @class */ (function () {
- function Popover(options) {
- this.isHidden = true;
- this.margin = 10; // the space required between the popover and the edges of the scroll container
- 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.show();
- 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.hide();
- 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;
- this.el = $('<div class="fc-popover"/>')
- .addClass(options.className || '')
- .css({
- // position initially to the top left to avoid creating scrollbars
- top: 0,
- left: 0
- })
- .append(options.content)
- .appendTo(options.parentEl);
- // when a click happens on anything inside with a 'fc-close' className, hide the popover
- this.el.on('click', '.fc-close', function () {
- _this.hide();
- });
- if (options.autoHide) {
- this.listenTo($(document), 'mousedown', this.documentMousedown);
- }
- };
- // Triggered when the user clicks *anywhere* in the document, for the autoHide feature
- Popover.prototype.documentMousedown = function (ev) {
- // only hide the popover if the click happened outside the popover
- if (this.el && !$(ev.target).closest(this.el).length) {
- this.hide();
- }
- };
- // Hides and unregisters any handlers
- Popover.prototype.removeElement = function () {
- this.hide();
- if (this.el) {
- this.el.remove();
- this.el = null;
- }
- this.stopListeningTo($(document), 'mousedown');
- };
- // Positions the popover optimally, using the top/left/right options
- Popover.prototype.position = function () {
- var options = this.options;
- var origin = this.el.offsetParent().offset();
- var width = this.el.outerWidth();
- var height = this.el.outerHeight();
- var windowEl = $(window);
- var viewportEl = util_1.getScrollParent(this.el);
- var viewportTop;
- var viewportLeft;
- var viewportOffset;
- 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 - width; // derive the left value from the right value
- }
- else {
- left = 0;
- }
- if (viewportEl.is(window) || viewportEl.is(document)) {
- viewportEl = windowEl;
- viewportTop = 0; // the window is always at the top left
- viewportLeft = 0; // (and .offset() won't work if called here)
- }
- else {
- viewportOffset = viewportEl.offset();
- viewportTop = viewportOffset.top;
- viewportLeft = viewportOffset.left;
- }
- // if the window is scrolled, it causes the visible area to be further down
- viewportTop += windowEl.scrollTop();
- viewportLeft += windowEl.scrollLeft();
- // constrain to the view port. if constrained by two edges, give precedence to top/left
- if (options.viewportConstrain !== false) {
- top = Math.min(top, viewportTop + viewportEl.outerHeight() - height - this.margin);
- top = Math.max(top, viewportTop + this.margin);
- left = Math.min(left, viewportLeft + viewportEl.outerWidth() - width - this.margin);
- left = Math.max(left, viewportLeft + this.margin);
- }
- this.el.css({
- 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
- Popover.prototype.trigger = function (name) {
- if (this.options[name]) {
- this.options[name].apply(this, Array.prototype.slice.call(arguments, 1));
- }
- };
- return Popover;
-}());
-exports.default = Popover;
-ListenerMixin_1.default.mixInto(Popover);
-
-
-/***/ }),
-/* 250 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var $ = __webpack_require__(3);
-var util_1 = __webpack_require__(4);
-var EventRenderer_1 = __webpack_require__(42);
-/* Event-rendering methods for the DayGrid class
-----------------------------------------------------------------------------------------------------------------------*/
-var DayGridEventRenderer = /** @class */ (function (_super) {
- tslib_1.__extends(DayGridEventRenderer, _super);
- function DayGridEventRenderer(dayGrid, fillRenderer) {
- var _this = _super.call(this, dayGrid, fillRenderer) || this;
- _this.dayGrid = dayGrid;
- return _this;
- }
- DayGridEventRenderer.prototype.renderBgRanges = function (eventRanges) {
- // don't render timed background events
- eventRanges = $.grep(eventRanges, function (eventRange) {
- return eventRange.eventDef.isAllDay();
- });
- _super.prototype.renderBgRanges.call(this, eventRanges);
- };
- // Renders the given foreground event segments onto the grid
- DayGridEventRenderer.prototype.renderFgSegs = function (segs) {
- var rowStructs = this.rowStructs = this.renderSegRows(segs);
- // append to each row's content skeleton
- this.dayGrid.rowEls.each(function (i, rowNode) {
- $(rowNode).find('.fc-content-skeleton > table').append(rowStructs[i].tbodyEl);
- });
- };
- // Unrenders all currently rendered foreground event segments
- DayGridEventRenderer.prototype.unrenderFgSegs = function () {
- var rowStructs = this.rowStructs || [];
- var rowStruct;
- while ((rowStruct = rowStructs.pop())) {
- rowStruct.tbodyEl.remove();
- }
- this.rowStructs = null;
- };
- // Uses the given events array to generate <tbody> 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 <tbody> 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 colCnt = this.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 = $('<tbody/>');
- var segMatrix = []; // lookup for which segments are rendered into which level+col cells
- var cellMatrix = []; // lookup for all <td> elements of the level+col matrix
- var loneCellMatrix = []; // lookup for <td> 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.attr('rowspan', parseInt(td.attr('rowspan') || 1, 10) + 1);
- }
- else {
- td = $('<td/>');
- tr.append(td);
- }
- cellMatrix[i][col] = td;
- loneCellMatrix[i][col] = td;
- col++;
- }
- }
- for (i = 0; i < levelCnt; i++) {
- levelSegs = segLevels[i];
- col = 0;
- tr = $('<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++) {
- seg = levelSegs[j];
- emptyCellsUntil(seg.leftCol);
- // create a container that occupies or more columns. append the event element.
- td = $('<td class="fc-event-container"/>').append(seg.el);
- if (seg.leftCol !== seg.rightCol) {
- td.attr('colspan', seg.rightCol - seg.leftCol + 1);
- }
- else {
- loneCellMatrix[i][col] = td;
- }
- while (col <= seg.rightCol) {
- cellMatrix[i][col] = td;
- segMatrix[i][col] = seg;
- col++;
- }
- tr.append(td);
- }
- }
- emptyCellsUntil(colCnt); // finish off the row
- this.dayGrid.bookendCells(tr);
- tbody.append(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 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.
- 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;
- // create new level array if needed and append segment
- (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 event time formatting string if `timeFormat` is not explicitly defined
- DayGridEventRenderer.prototype.computeEventTimeFormat = function () {
- return this.opt('extraSmallTimeFormat'); // like "6p" or "6:30p"
- };
- // 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
- };
- // Builds the HTML to be used for the default element for an individual segment
- DayGridEventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {
- var view = this.view;
- var eventDef = seg.footprint.eventDef;
- var isAllDay = seg.footprint.componentFootprint.isAllDay;
- var isDraggable = view.isEventDefDraggable(eventDef);
- var isResizableFromStart = !disableResizing && isAllDay &&
- seg.isStart && view.isEventDefResizableFromStart(eventDef);
- var isResizableFromEnd = !disableResizing && isAllDay &&
- seg.isEnd && view.isEventDefResizableFromEnd(eventDef);
- var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd);
- var skinCss = util_1.cssToStr(this.getSkinCss(eventDef));
- 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(seg.footprint);
- if (timeText) {
- timeHtml = '<span class="fc-time">' + util_1.htmlEscape(timeText) + '</span>';
- }
- }
- titleHtml =
- '<span class="fc-title">' +
- (util_1.htmlEscape(eventDef.title || '') || ' ') + // we always want one line of height
- '</span>';
- return '<a class="' + classes.join(' ') + '"' +
- (eventDef.url ?
- ' href="' + util_1.htmlEscape(eventDef.url) + '"' :
- '') +
- (skinCss ?
- ' style="' + skinCss + '"' :
- '') +
- '>' +
- '<div class="fc-content">' +
- (this.dayGrid.isRTL ?
- titleHtml + ' ' + timeHtml : // put a natural space in between
- timeHtml + ' ' + titleHtml //
- ) +
- '</div>' +
- (isResizableFromStart ?
- '<div class="fc-resizer fc-start-resizer" />' :
- '') +
- (isResizableFromEnd ?
- '<div class="fc-resizer fc-end-resizer" />' :
- '') +
- '</a>';
- };
- return DayGridEventRenderer;
-}(EventRenderer_1.default));
-exports.default = DayGridEventRenderer;
-// 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.leftCol <= seg.rightCol &&
- otherSeg.rightCol >= seg.leftCol) {
- return true;
- }
- }
- return false;
-}
-// A cmp function for determining the leftmost event
-function compareDaySegCols(a, b) {
- return a.leftCol - b.leftCol;
-}
-
-
-/***/ }),
-/* 251 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var $ = __webpack_require__(3);
-var HelperRenderer_1 = __webpack_require__(58);
-var DayGridHelperRenderer = /** @class */ (function (_super) {
- tslib_1.__extends(DayGridHelperRenderer, _super);
- function DayGridHelperRenderer() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- // Renders a mock "helper" event. `sourceSeg` is the associated internal segment object. It can be null.
- DayGridHelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {
- var helperNodes = [];
- var rowStructs;
- // TODO: not good to call eventRenderer this way
- rowStructs = this.eventRenderer.renderSegRows(segs);
- // inject each new event skeleton into each associated row
- this.component.rowEls.each(function (row, rowNode) {
- var rowEl = $(rowNode); // the .fc-row
- var skeletonEl = $('<div class="fc-helper-skeleton"><table/></div>'); // 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) {
- skeletonTop = sourceSeg.el.position().top;
- }
- else {
- skeletonTopEl = rowEl.find('.fc-content-skeleton tbody');
- if (!skeletonTopEl.length) {
- skeletonTopEl = rowEl.find('.fc-content-skeleton table');
- }
- skeletonTop = skeletonTopEl.position().top;
- }
- skeletonEl.css('top', skeletonTop)
- .find('table')
- .append(rowStructs[row].tbodyEl);
- rowEl.append(skeletonEl);
- helperNodes.push(skeletonEl[0]);
- });
- return $(helperNodes); // must return the elements rendered
- };
- return DayGridHelperRenderer;
-}(HelperRenderer_1.default));
-exports.default = DayGridHelperRenderer;
-
-
-/***/ }),
-/* 252 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var $ = __webpack_require__(3);
-var FillRenderer_1 = __webpack_require__(57);
-var DayGridFillRenderer = /** @class */ (function (_super) {
- tslib_1.__extends(DayGridFillRenderer, _super);
- function DayGridFillRenderer() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.fillSegTag = 'td'; // override the default tag name
- return _this;
- }
- DayGridFillRenderer.prototype.attachSegEls = function (type, segs) {
- var nodes = [];
- var i;
- var seg;
- var skeletonEl;
- for (i = 0; i < segs.length; i++) {
- seg = segs[i];
- skeletonEl = this.renderFillRow(type, seg);
- this.component.rowEls.eq(seg.row).append(skeletonEl);
- nodes.push(skeletonEl[0]);
- }
- return nodes;
- };
- // 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 colCnt = this.component.colCnt;
- var startCol = seg.leftCol;
- var endCol = seg.rightCol + 1;
- var className;
- var skeletonEl;
- var trEl;
- if (type === 'businessHours') {
- className = 'bgevent';
- }
- else {
- className = type.toLowerCase();
- }
- skeletonEl = $('<div class="fc-' + className + '-skeleton">' +
- '<table><tr/></table>' +
- '</div>');
- trEl = skeletonEl.find('tr');
- if (startCol > 0) {
- trEl.append('<td colspan="' + startCol + '"/>');
- }
- trEl.append(seg.el.attr('colspan', endCol - startCol));
- if (endCol < colCnt) {
- trEl.append('<td colspan="' + (colCnt - endCol) + '"/>');
- }
- this.component.bookendCells(trEl);
- return skeletonEl;
- };
- return DayGridFillRenderer;
-}(FillRenderer_1.default));
-exports.default = DayGridFillRenderer;
-
-
-/***/ }),
-/* 253 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var BasicViewDateProfileGenerator_1 = __webpack_require__(228);
-var UnzonedRange_1 = __webpack_require__(5);
-var MonthViewDateProfileGenerator = /** @class */ (function (_super) {
- tslib_1.__extends(MonthViewDateProfileGenerator, _super);
- function MonthViewDateProfileGenerator() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- // Computes the date range that will be rendered.
- MonthViewDateProfileGenerator.prototype.buildRenderRange = function (currentUnzonedRange, currentRangeUnit, isRangeAllDay) {
- var renderUnzonedRange = _super.prototype.buildRenderRange.call(this, currentUnzonedRange, currentRangeUnit, isRangeAllDay);
- var start = this.msToUtcMoment(renderUnzonedRange.startMs, isRangeAllDay);
- var end = this.msToUtcMoment(renderUnzonedRange.endMs, isRangeAllDay);
- var rowCnt;
- // ensure 6 weeks
- if (this.opt('fixedWeekCount')) {
- rowCnt = Math.ceil(// could be partial weeks due to hiddenDays
- end.diff(start, 'weeks', true) // dontRound=true
- );
- end.add(6 - rowCnt, 'weeks');
- }
- return new UnzonedRange_1.default(start, end);
- };
- return MonthViewDateProfileGenerator;
-}(BasicViewDateProfileGenerator_1.default));
-exports.default = MonthViewDateProfileGenerator;
-
-
-/***/ }),
-/* 254 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var util_1 = __webpack_require__(4);
-var EventRenderer_1 = __webpack_require__(42);
-var ListEventRenderer = /** @class */ (function (_super) {
- tslib_1.__extends(ListEventRenderer, _super);
- function ListEventRenderer() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- ListEventRenderer.prototype.renderFgSegs = function (segs) {
- if (!segs.length) {
- this.component.renderEmptyMessage();
- }
- else {
- this.component.renderSegList(segs);
- }
- };
- // generates the HTML for a single event row
- ListEventRenderer.prototype.fgSegHtml = function (seg) {
- var view = this.view;
- var calendar = view.calendar;
- var theme = calendar.theme;
- var eventFootprint = seg.footprint;
- var eventDef = eventFootprint.eventDef;
- var componentFootprint = eventFootprint.componentFootprint;
- var url = eventDef.url;
- var classes = ['fc-list-item'].concat(this.getClasses(eventDef));
- var bgColor = this.getBgColor(eventDef);
- var timeHtml;
- if (componentFootprint.isAllDay) {
- timeHtml = view.getAllDayHtml();
- }
- else if (view.isMultiDayRange(componentFootprint.unzonedRange)) {
- if (seg.isStart || seg.isEnd) {
- timeHtml = util_1.htmlEscape(this._getTimeText(calendar.msToMoment(seg.startMs), calendar.msToMoment(seg.endMs), componentFootprint.isAllDay));
- }
- else {
- timeHtml = view.getAllDayHtml();
- }
- }
- else {
- // Display the normal time text for the *event's* times
- timeHtml = util_1.htmlEscape(this.getTimeText(eventFootprint));
- }
- if (url) {
- classes.push('fc-has-url');
- }
- return '<tr class="' + classes.join(' ') + '">' +
- (this.displayEventTime ?
- '<td class="fc-list-item-time ' + theme.getClass('widgetContent') + '">' +
- (timeHtml || '') +
- '</td>' :
- '') +
- '<td class="fc-list-item-marker ' + theme.getClass('widgetContent') + '">' +
- '<span class="fc-event-dot"' +
- (bgColor ?
- ' style="background-color:' + bgColor + '"' :
- '') +
- '></span>' +
- '</td>' +
- '<td class="fc-list-item-title ' + theme.getClass('widgetContent') + '">' +
- '<a' + (url ? ' href="' + util_1.htmlEscape(url) + '"' : '') + '>' +
- util_1.htmlEscape(eventDef.title || '') +
- '</a>' +
- '</td>' +
- '</tr>';
- };
- // like "4:00am"
- ListEventRenderer.prototype.computeEventTimeFormat = function () {
- return this.opt('mediumTimeFormat');
- };
- return ListEventRenderer;
-}(EventRenderer_1.default));
-exports.default = ListEventRenderer;
-
-
-/***/ }),
-/* 255 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var $ = __webpack_require__(3);
-var EventPointing_1 = __webpack_require__(59);
-var ListEventPointing = /** @class */ (function (_super) {
- tslib_1.__extends(ListEventPointing, _super);
- function ListEventPointing() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- // for events with a url, the whole <tr> should be clickable,
- // but it's impossible to wrap with an <a> tag. simulate this.
- ListEventPointing.prototype.handleClick = function (seg, ev) {
- var url;
- _super.prototype.handleClick.call(this, seg, ev); // might prevent the default action
- // not clicking on or within an <a> with an href
- if (!$(ev.target).closest('a[href]').length) {
- url = seg.footprint.eventDef.url;
- if (url && !ev.isDefaultPrevented()) {
- window.location.href = url; // simulate link click
- }
- }
- };
- return ListEventPointing;
-}(EventPointing_1.default));
-exports.default = ListEventPointing;
-
-
-/***/ }),
-/* 256 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var EventSourceParser_1 = __webpack_require__(38);
-var ArrayEventSource_1 = __webpack_require__(52);
-var FuncEventSource_1 = __webpack_require__(215);
-var JsonFeedEventSource_1 = __webpack_require__(216);
-EventSourceParser_1.default.registerClass(ArrayEventSource_1.default);
-EventSourceParser_1.default.registerClass(FuncEventSource_1.default);
-EventSourceParser_1.default.registerClass(JsonFeedEventSource_1.default);
-
-
-/***/ }),
-/* 257 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var ThemeRegistry_1 = __webpack_require__(51);
-var StandardTheme_1 = __webpack_require__(213);
-var JqueryUiTheme_1 = __webpack_require__(214);
-var Bootstrap3Theme_1 = __webpack_require__(258);
-var Bootstrap4Theme_1 = __webpack_require__(259);
-ThemeRegistry_1.defineThemeSystem('standard', StandardTheme_1.default);
-ThemeRegistry_1.defineThemeSystem('jquery-ui', JqueryUiTheme_1.default);
-ThemeRegistry_1.defineThemeSystem('bootstrap3', Bootstrap3Theme_1.default);
-ThemeRegistry_1.defineThemeSystem('bootstrap4', Bootstrap4Theme_1.default);
-
-
-/***/ }),
-/* 258 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var Theme_1 = __webpack_require__(19);
-var Bootstrap3Theme = /** @class */ (function (_super) {
- tslib_1.__extends(Bootstrap3Theme, _super);
- function Bootstrap3Theme() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- return Bootstrap3Theme;
-}(Theme_1.default));
-exports.default = Bootstrap3Theme;
-Bootstrap3Theme.prototype.classes = {
- widget: 'fc-bootstrap3',
- tableGrid: 'table-bordered',
- tableList: 'table',
- tableListHeading: 'active',
- buttonGroup: 'btn-group',
- button: 'btn btn-default',
- stateActive: 'active',
- stateDisabled: 'disabled',
- today: 'alert alert-info',
- popover: 'panel panel-default',
- popoverHeader: 'panel-heading',
- popoverContent: 'panel-body',
- // day grid
- // for left/right border color when border is inset from edges (all-day in agenda view)
- // avoid `panel` class b/c don't want margins/radius. only border color.
- headerRow: 'panel-default',
- dayRow: 'panel-default',
- // list view
- listView: 'panel panel-default'
-};
-Bootstrap3Theme.prototype.baseIconClass = 'glyphicon';
-Bootstrap3Theme.prototype.iconClasses = {
- close: 'glyphicon-remove',
- prev: 'glyphicon-chevron-left',
- next: 'glyphicon-chevron-right',
- prevYear: 'glyphicon-backward',
- nextYear: 'glyphicon-forward'
-};
-Bootstrap3Theme.prototype.iconOverrideOption = 'bootstrapGlyphicons';
-Bootstrap3Theme.prototype.iconOverrideCustomButtonOption = 'bootstrapGlyphicon';
-Bootstrap3Theme.prototype.iconOverridePrefix = 'glyphicon-';
-
-
-/***/ }),
-/* 259 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var Theme_1 = __webpack_require__(19);
-var Bootstrap4Theme = /** @class */ (function (_super) {
- tslib_1.__extends(Bootstrap4Theme, _super);
- function Bootstrap4Theme() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- return Bootstrap4Theme;
-}(Theme_1.default));
-exports.default = Bootstrap4Theme;
-Bootstrap4Theme.prototype.classes = {
- widget: 'fc-bootstrap4',
- tableGrid: 'table-bordered',
- tableList: 'table',
- tableListHeading: 'table-active',
- buttonGroup: 'btn-group',
- button: 'btn btn-primary',
- stateActive: 'active',
- stateDisabled: 'disabled',
- 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 agenda 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'
-};
-Bootstrap4Theme.prototype.baseIconClass = 'fa';
-Bootstrap4Theme.prototype.iconClasses = {
- close: 'fa-times',
- prev: 'fa-chevron-left',
- next: 'fa-chevron-right',
- prevYear: 'fa-angle-double-left',
- nextYear: 'fa-angle-double-right'
-};
-Bootstrap4Theme.prototype.iconOverrideOption = 'bootstrapFontAwesome';
-Bootstrap4Theme.prototype.iconOverrideCustomButtonOption = 'bootstrapFontAwesome';
-Bootstrap4Theme.prototype.iconOverridePrefix = 'fa-';
-
-
-/***/ }),
-/* 260 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var ViewRegistry_1 = __webpack_require__(22);
-var BasicView_1 = __webpack_require__(62);
-var MonthView_1 = __webpack_require__(229);
-ViewRegistry_1.defineView('basic', {
- 'class': BasicView_1.default
-});
-ViewRegistry_1.defineView('basicDay', {
- type: 'basic',
- duration: { days: 1 }
-});
-ViewRegistry_1.defineView('basicWeek', {
- type: 'basic',
- duration: { weeks: 1 }
-});
-ViewRegistry_1.defineView('month', {
- 'class': MonthView_1.default,
- duration: { months: 1 },
- defaults: {
- fixedWeekCount: true
- }
-});
-
-
-/***/ }),
-/* 261 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var ViewRegistry_1 = __webpack_require__(22);
-var AgendaView_1 = __webpack_require__(226);
-ViewRegistry_1.defineView('agenda', {
- 'class': AgendaView_1.default,
- defaults: {
- allDaySlot: true,
- slotDuration: '00:30:00',
- slotEventOverlap: true // a bad name. confused with overlap/constraint system
- }
-});
-ViewRegistry_1.defineView('agendaDay', {
- type: 'agenda',
- duration: { days: 1 }
-});
-ViewRegistry_1.defineView('agendaWeek', {
- type: 'agenda',
- duration: { weeks: 1 }
-});
-
-
-/***/ }),
-/* 262 */
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var ViewRegistry_1 = __webpack_require__(22);
-var ListView_1 = __webpack_require__(230);
-ViewRegistry_1.defineView('list', {
- 'class': ListView_1.default,
- buttonTextKey: 'list',
- defaults: {
- buttonText: 'list',
- listDayFormat: 'LL',
- noEventsMessage: 'No events to display'
- }
-});
-ViewRegistry_1.defineView('listDay', {
- type: 'list',
- duration: { days: 1 },
- defaults: {
- listDayFormat: 'dddd' // day-of-week is all we need. full date is probably in header
- }
-});
-ViewRegistry_1.defineView('listWeek', {
- type: 'list',
- duration: { weeks: 1 },
- defaults: {
- listDayFormat: 'dddd',
- listDayAltFormat: 'LL'
- }
-});
-ViewRegistry_1.defineView('listMonth', {
- type: 'list',
- duration: { month: 1 },
- defaults: {
- listDayAltFormat: 'dddd' // day-of-week is nice-to-have
- }
-});
-ViewRegistry_1.defineView('listYear', {
- type: 'list',
- duration: { year: 1 },
- defaults: {
- listDayAltFormat: 'dddd' // day-of-week is nice-to-have
- }
-});
-
-
-/***/ }),
-/* 263 */
-/***/ (function(module, exports) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-
-
-/***/ })
-/******/ ]);
-});
\ No newline at end of file
+++ /dev/null
-/*!
- * FullCalendar v3.9.0
- * Docs & License: https://fullcalendar.io/
- * (c) 2018 Adam Shaw
- */.fc button,.fc table,body .fc{font-size:1em}.fc-bg,.fc-row .fc-bgevent-skeleton,.fc-row .fc-highlight-skeleton{bottom:0}.fc-icon,.fc-unselectable{-webkit-touch-callout:none;-khtml-user-select:none}.fc{direction:ltr;text-align:left}.fc-rtl{text-align:right}.fc th,.fc-basic-view td.fc-week-number,.fc-icon,.fc-toolbar{text-align:center}.fc-highlight{background:#bce8f1;opacity:.3}.fc-bgevent{background:#8fdf82;opacity:.3}.fc-nonbusiness{background:#d7d7d7}.fc button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;height:2.1em;padding:0 .6em;white-space:nowrap;cursor:pointer}.fc button::-moz-focus-inner{margin:0;padding:0}.fc-state-default{border:1px solid;background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);color:#333;text-shadow:0 1px 1px rgba(255,255,255,.75);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.fc-state-default.fc-corner-left{border-top-left-radius:4px;border-bottom-left-radius:4px}.fc-state-default.fc-corner-right{border-top-right-radius:4px;border-bottom-right-radius:4px}.fc button .fc-icon{position:relative;top:-.05em;margin:0 .2em;vertical-align:middle}.fc-state-active,.fc-state-disabled,.fc-state-down,.fc-state-hover{color:#333;background-color:#e6e6e6}.fc-state-hover{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.fc-state-active,.fc-state-down{background-color:#ccc;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.fc-state-disabled{cursor:default;background-image:none;opacity:.65;box-shadow:none}.fc-event.fc-draggable,.fc-event[href],.fc-popover .fc-header .fc-close,a[data-goto]{cursor:pointer}.fc-button-group{display:inline-block}.fc .fc-button-group>*{float:left;margin:0 0 0 -1px}.fc .fc-button-group>:first-child{margin-left:0}.fc-popover{position:absolute;box-shadow:0 2px 6px rgba(0,0,0,.15)}.fc-popover .fc-header{padding:2px 4px}.fc-popover .fc-header .fc-title{margin:0 2px}.fc-ltr .fc-popover .fc-header .fc-title,.fc-rtl .fc-popover .fc-header .fc-close{float:left}.fc-ltr .fc-popover .fc-header .fc-close,.fc-rtl .fc-popover .fc-header .fc-title{float:right}.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-clear{clear:both}.fc-bg,.fc-bgevent-skeleton,.fc-helper-skeleton,.fc-highlight-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}.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-helper-skeleton{z-index:5}.fc .fc-row .fc-content-skeleton table,.fc .fc-row .fc-content-skeleton td,.fc .fc-row .fc-helper-skeleton td{background:0 0;border-color:transparent}.fc-row .fc-content-skeleton td,.fc-row .fc-helper-skeleton td{border-bottom:0}.fc-row .fc-content-skeleton tbody td,.fc-row .fc-helper-skeleton tbody td{border-top:0}.fc-scroller{-webkit-overflow-scrolling:touch}.fc-icon,.fc-row.fc-rigid,.fc-time-grid-event{overflow:hidden}.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.3;border-radius:3px;border:1px solid #3a87ad}.fc-event,.fc-event-dot{background-color:#3a87ad}.fc-event,.fc-event:hover{color:#fff;text-decoration:none}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-event .fc-bg{z-index:1;background:#fff;opacity:.25}.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.fc-dragging{box-shadow:0 2px 7px rgba(0,0,0,.3)}.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-day-grid-event.fc-selected:after{content:"";position:absolute;z-index:1;top:-1px;right:-1px;bottom:-1px;left:-1px;background:#000;opacity:.25}.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;cursor:pointer;text-decoration:none}a.fc-more:hover{text-decoration:underline}.fc.fc-bootstrap3 a,.ui-widget .fc-event{text-decoration:none}.fc-limited{display:none}.fc-icon,.fc-toolbar .fc-center{display:inline-block}.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-bootstrap3 .fc-popover .panel-body,.fc-bootstrap4 .fc-popover .card-body{padding:0}.fc-now-indicator{position:absolute;border:0 solid red}.fc-bootstrap3 .fc-today.alert,.fc-bootstrap4 .fc-today.alert{border-radius:0}.fc-unselectable{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select: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;border-width:1px;border-style:solid}.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}.fc-icon{height:1em;line-height:1em;font-size:1em;font-family:"Courier New",Courier,monospace;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fc-icon:after{position:relative}.fc-icon-left-single-arrow:after{content:"\2039";font-weight:700;font-size:200%;top:-7%}.fc-icon-right-single-arrow:after{content:"\203A";font-weight:700;font-size:200%;top:-7%}.fc-icon-left-double-arrow:after{content:"\AB";font-size:160%;top:-7%}.fc-icon-right-double-arrow:after{content:"\BB";font-size:160%;top:-7%}.fc-icon-left-triangle:after{content:"\25C4";font-size:125%;top:3%}.fc-icon-right-triangle:after{content:"\25BA";font-size:125%;top:3%}.fc-icon-down-triangle:after{content:"\25BC";font-size:125%;top:2%}.fc-icon-x:after{content:"\D7";font-size:200%;top:6%}.fc-unthemed .fc-popover .fc-header .fc-close{color:#666;font-size:.9em;margin-top:2px}.fc-unthemed .fc-list-item:hover td{background-color:#f5f5f5}.ui-widget .fc-disabled-day{background-image:none}.fc-bootstrap3 .fc-time-grid .fc-slats table,.fc-bootstrap4 .fc-time-grid .fc-slats table,.fc-time-grid .fc-slats .ui-widget-content{background:0 0}.fc-popover>.ui-widget-header+.ui-widget-content{border-top:0}.fc-bootstrap3 hr.fc-divider,.fc-bootstrap4 hr.fc-divider{border-color:inherit}.ui-widget .fc-event{color:#fff;font-weight:400}.ui-widget td.fc-axis{font-weight:400}.fc.fc-bootstrap3 a[data-goto]:hover{text-decoration:underline}.fc.fc-bootstrap4 a{text-decoration:none}.fc.fc-bootstrap4 a[data-goto]:hover{text-decoration:underline}.fc-bootstrap4 a.fc-event:not([href]):not([tabindex]){color:#fff}.fc-bootstrap4 .fc-popover.card{position:absolute}.fc-toolbar.fc-header-toolbar{margin-bottom:1em}.fc-toolbar.fc-footer-toolbar{margin-top:1em}.fc-toolbar .fc-left{float:left}.fc-toolbar .fc-right{float:right}.fc .fc-toolbar>*>*{float:left;margin-left:.75em}.fc .fc-toolbar>*>:first-child{margin-left:0}.fc-toolbar h2{margin:0}.fc-toolbar button{position:relative}.fc-toolbar .fc-state-hover,.fc-toolbar .ui-state-hover{z-index:2}.fc-toolbar .fc-state-down{z-index:3}.fc-toolbar .fc-state-active,.fc-toolbar .ui-state-active{z-index:4}.fc-toolbar button:focus{z-index:5}.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}.fc-basicDay-view .fc-content-skeleton,.fc-basicWeek-view .fc-content-skeleton{padding-bottom:1em}.fc-basic-view .fc-body .fc-row{min-height:4em}.fc-row.fc-rigid .fc-content-skeleton{position:absolute;top:0;left:0;right:0}.fc-day-top.fc-other-month{opacity:.3}.fc-basic-view .fc-day-number,.fc-basic-view .fc-week-number{padding:2px}.fc-basic-view th.fc-day-number,.fc-basic-view th.fc-week-number{padding:0 2px}.fc-ltr .fc-basic-view .fc-day-top .fc-day-number{float:right}.fc-rtl .fc-basic-view .fc-day-top .fc-day-number{float:left}.fc-ltr .fc-basic-view .fc-day-top .fc-week-number{float:left;border-radius:0 0 3px}.fc-rtl .fc-basic-view .fc-day-top .fc-week-number{float:right;border-radius:0 0 0 3px}.fc-basic-view .fc-day-top .fc-week-number{min-width:1.5em;text-align:center;background-color:#f2f2f2;color:grey}.fc-basic-view td.fc-week-number>*{display:inline-block;min-width:1.25em}.fc-agenda-view .fc-day-grid{position:relative;z-index:2}.fc-agenda-view .fc-day-grid .fc-row{min-height:3em}.fc-agenda-view .fc-day-grid .fc-row .fc-content-skeleton{padding-bottom:1em}.fc .fc-axis{vertical-align:middle;padding:0 4px;white-space:nowrap}.fc-ltr .fc-axis{text-align:right}.fc-rtl .fc-axis{text-align:left}.fc-time-grid,.fc-time-grid-container{position:relative;z-index:1}.fc-time-grid{min-height:100%}.fc-time-grid table{border:0 hidden transparent}.fc-time-grid>.fc-bg{z-index:1}.fc-time-grid .fc-slats,.fc-time-grid>hr{position:relative;z-index:2}.fc-time-grid .fc-content-col{position:relative}.fc-time-grid .fc-content-skeleton{position:absolute;z-index:3;top:0;left:0;right:0}.fc-time-grid .fc-business-container{position:relative;z-index:1}.fc-time-grid .fc-bgevent-container{position:relative;z-index:2}.fc-time-grid .fc-highlight-container{z-index:3;position:relative}.fc-time-grid .fc-event-container{position:relative;z-index:4}.fc-time-grid .fc-now-indicator-line{z-index:5}.fc-time-grid .fc-helper-container{position:relative;z-index:6}.fc-time-grid .fc-slats td{height:1.5em;border-bottom:0}.fc-time-grid .fc-slats .fc-minor td{border-top-style:dotted}.fc-time-grid .fc-highlight{position:absolute;left:0;right:0}.fc-ltr .fc-time-grid .fc-event-container{margin:0 2.5% 0 2px}.fc-rtl .fc-time-grid .fc-event-container{margin:0 2px 0 2.5%}.fc-time-grid .fc-bgevent,.fc-time-grid .fc-event{position:absolute;z-index:1}.fc-time-grid .fc-bgevent{left:0;right:0}.fc-v-event.fc-not-start{border-top-width:0;padding-top:1px;border-top-left-radius:0;border-top-right-radius:0}.fc-v-event.fc-not-end{border-bottom-width:0;padding-bottom:1px;border-bottom-left-radius:0;border-bottom-right-radius:0}.fc-time-grid-event.fc-selected{overflow:visible}.fc-time-grid-event.fc-selected .fc-bg{display:none}.fc-time-grid-event .fc-content{overflow:hidden}.fc-time-grid-event .fc-time,.fc-time-grid-event .fc-title{padding:0 1px}.fc-time-grid-event .fc-time{font-size:.85em;white-space:nowrap}.fc-time-grid-event.fc-short .fc-content{white-space:nowrap}.fc-time-grid-event.fc-short .fc-time,.fc-time-grid-event.fc-short .fc-title{display:inline-block;vertical-align:top}.fc-time-grid-event.fc-short .fc-time span{display:none}.fc-time-grid-event.fc-short .fc-time:before{content:attr(data-start)}.fc-time-grid-event.fc-short .fc-time:after{content:"\A0-\A0"}.fc-time-grid-event.fc-short .fc-title{font-size:.85em;padding:0}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer{left:0;right:0;bottom:0;height:8px;overflow:hidden;line-height:8px;font-size:11px;font-family:monospace;text-align:center;cursor:s-resize}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after{content:"="}.fc-time-grid-event.fc-selected .fc-resizer{border-radius:5px;border-width:1px;width:8px;height:8px;border-style:solid;border-color:inherit;background:#fff;left:50%;margin-left:-5px;bottom:-5px}.fc-time-grid .fc-now-indicator-line{border-top-width:1px;left:0;right:0}.fc-time-grid .fc-now-indicator-arrow{margin-top:-5px}.fc-ltr .fc-time-grid .fc-now-indicator-arrow{left:0;border-width:5px 0 5px 6px;border-top-color:transparent;border-bottom-color:transparent}.fc-rtl .fc-time-grid .fc-now-indicator-arrow{right:0;border-width:5px 6px 5px 0;border-top-color:transparent;border-bottom-color:transparent}.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
+++ /dev/null
-/*!
- * FullCalendar v3.9.0
- * Docs & License: https://fullcalendar.io/
- * (c) 2018 Adam Shaw
- */
-!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("moment"),require("jquery")):"function"==typeof define&&define.amd?define(["moment","jquery"],e):"object"==typeof exports?exports.FullCalendar=e(require("moment"),require("jquery")):t.FullCalendar=e(t.moment,t.jQuery)}("undefined"!=typeof self?self:this,function(t,e){return function(t){function e(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=236)}([function(e,n){e.exports=t},,function(t,e){var n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};e.__extends=function(t,e){function i(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}},function(t,n){t.exports=e},function(t,e,n){function i(t,e){e.left&&t.css({"border-left-width":1,"margin-left":e.left-1}),e.right&&t.css({"border-right-width":1,"margin-right":e.right-1})}function r(t){t.css({"margin-left":"","margin-right":"","border-left-width":"","border-right-width":""})}function o(){ht("body").addClass("fc-not-allowed")}function s(){ht("body").removeClass("fc-not-allowed")}function a(t,e,n){var i=Math.floor(e/t.length),r=Math.floor(e-i*(t.length-1)),o=[],s=[],a=[],u=0;l(t),t.each(function(e,n){var l=e===t.length-1?r:i,d=ht(n).outerHeight(!0);d<l?(o.push(n),s.push(d),a.push(ht(n).height())):u+=d}),n&&(e-=u,i=Math.floor(e/o.length),r=Math.floor(e-i*(o.length-1))),ht(o).each(function(t,e){var n=t===o.length-1?r:i,l=s[t],u=a[t],d=n-(l-u);l<n&&ht(e).height(d)})}function l(t){t.height("")}function u(t){var e=0;return t.find("> *").each(function(t,n){var i=ht(n).outerWidth();i>e&&(e=i)}),e++,t.width(e),e}function d(t,e){var n,i=t.add(e);return i.css({position:"relative",left:-1}),n=t.outerHeight()-e.outerHeight(),i.css({position:"",left:""}),n}function c(t){var e=t.css("position"),n=t.parents().filter(function(){var t=ht(this);return/(auto|scroll)/.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==e&&n.length?n:ht(t[0].ownerDocument||document)}function p(t,e){var n=t.offset(),i=n.left-(e?e.left:0),r=n.top-(e?e.top:0);return{left:i,right:i+t.outerWidth(),top:r,bottom:r+t.outerHeight()}}function h(t,e){var n=t.offset(),i=g(t),r=n.left+b(t,"border-left-width")+i.left-(e?e.left:0),o=n.top+b(t,"border-top-width")+i.top-(e?e.top:0);return{left:r,right:r+t[0].clientWidth,top:o,bottom:o+t[0].clientHeight}}function f(t,e){var n=t.offset(),i=n.left+b(t,"border-left-width")+b(t,"padding-left")-(e?e.left:0),r=n.top+b(t,"border-top-width")+b(t,"padding-top")-(e?e.top:0);return{left:i,right:i+t.width(),top:r,bottom:r+t.height()}}function g(t){var e,n=t[0].offsetWidth-t[0].clientWidth,i=t[0].offsetHeight-t[0].clientHeight;return n=v(n),i=v(i),e={left:0,right:0,top:0,bottom:i},y()&&"rtl"===t.css("direction")?e.left=n:e.right=n,e}function v(t){return t=Math.max(0,t),t=Math.round(t)}function y(){return null===ft&&(ft=m()),ft}function m(){var t=ht("<div><div/></div>").css({position:"absolute",top:-1e3,left:0,border:0,padding:0,overflow:"scroll",direction:"rtl"}).appendTo("body"),e=t.children(),n=e.offset().left>t.offset().left;return t.remove(),n}function b(t,e){return parseFloat(t.css(e))||0}function w(t){return 1===t.which&&!t.ctrlKey}function D(t){var e=t.originalEvent.touches;return e&&e.length?e[0].pageX:t.pageX}function E(t){var e=t.originalEvent.touches;return e&&e.length?e[0].pageY:t.pageY}function S(t){return/^touch/.test(t.type)}function C(t){t.addClass("fc-unselectable").on("selectstart",T)}function R(t){t.removeClass("fc-unselectable").off("selectstart",T)}function T(t){t.preventDefault()}function M(t,e){var n={left:Math.max(t.left,e.left),right:Math.min(t.right,e.right),top:Math.max(t.top,e.top),bottom:Math.min(t.bottom,e.bottom)};return n.left<n.right&&n.top<n.bottom&&n}function I(t,e){return{left:Math.min(Math.max(t.left,e.left),e.right),top:Math.min(Math.max(t.top,e.top),e.bottom)}}function H(t){return{left:(t.left+t.right)/2,top:(t.top+t.bottom)/2}}function P(t,e){return{left:t.left-e.left,top:t.top-e.top}}function _(t){var e,n,i=[],r=[];for("string"==typeof t?r=t.split(/\s*,\s*/):"function"==typeof t?r=[t]:ht.isArray(t)&&(r=t),e=0;e<r.length;e++)n=r[e],"string"==typeof n?i.push("-"===n.charAt(0)?{field:n.substring(1),order:-1}:{field:n,order:1}):"function"==typeof n&&i.push({func:n});return i}function x(t,e,n,i,r){var o,s;for(o=0;o<n.length;o++)if(s=O(t,e,n[o],i,r))return s;return 0}function O(t,e,n,i,r){if(n.func)return n.func(t,e);var o=t[n.field],s=e[n.field];return null==o&&i&&(o=i[n.field]),null==s&&r&&(s=r[n.field]),F(o,s)*(n.order||1)}function F(t,e){return t||e?null==e?-1:null==t?1:"string"===ht.type(t)||"string"===ht.type(e)?String(t).localeCompare(String(e)):t-e:0}function z(t,e){return pt.duration({days:t.clone().stripTime().diff(e.clone().stripTime(),"days"),ms:t.time()-e.time()})}function B(t,e){return pt.duration({days:t.clone().stripTime().diff(e.clone().stripTime(),"days")})}function A(t,e,n){return pt.duration(Math.round(t.diff(e,n,!0)),n)}function k(t,n){var i,r,o;for(i=0;i<e.unitsDesc.length&&(r=e.unitsDesc[i],!((o=V(r,t,n))>=1&&ut(o)));i++);return r}function L(t,e){var n=k(t);return"week"===n&&"object"==typeof e&&e.days&&(n="day"),n}function V(t,e,n){return null!=n?n.diff(e,t,!0):pt.isDuration(e)?e.as(t):e.end.diff(e.start,t,!0)}function G(t,e,n){var i;return U(n)?(e-t)/n:(i=n.asMonths(),Math.abs(i)>=1&&ut(i)?e.diff(t,"months",!0)/i:e.diff(t,"days",!0)/n.asDays())}function N(t,e){var n,i;return U(t)||U(e)?t/e:(n=t.asMonths(),i=e.asMonths(),Math.abs(n)>=1&&ut(n)&&Math.abs(i)>=1&&ut(i)?n/i:t.asDays()/e.asDays())}function j(t,e){var n;return U(t)?pt.duration(t*e):(n=t.asMonths(),Math.abs(n)>=1&&ut(n)?pt.duration({months:n*e}):pt.duration({days:t.asDays()*e}))}function U(t){return Boolean(t.hours()||t.minutes()||t.seconds()||t.milliseconds())}function W(t){return"[object Date]"===Object.prototype.toString.call(t)||t instanceof Date}function q(t){return"string"==typeof t&&/^\d+\:\d+(?:\:\d+\.?(?:\d{3})?)?$/.test(t)}function Y(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=window.console;if(n&&n.log)return n.log.apply(n,t)}function Z(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=window.console;return n&&n.warn?n.warn.apply(n,t):Y.apply(null,t)}function Q(t,e){var n,i,r,o,s,a,l={};if(e)for(n=0;n<e.length;n++){for(i=e[n],r=[],o=t.length-1;o>=0;o--)if("object"==typeof(s=t[o][i]))r.unshift(s);else if(void 0!==s){l[i]=s;break}r.length&&(l[i]=Q(r))}for(n=t.length-1;n>=0;n--){a=t[n];for(i in a)i in l||(l[i]=a[i])}return l}function X(t,e){for(var n in t)$(t,n)&&(e[n]=t[n])}function $(t,e){return gt.call(t,e)}function K(t,e,n){if(ht.isFunction(t)&&(t=[t]),t){var i=void 0,r=void 0;for(i=0;i<t.length;i++)r=t[i].apply(e,n)||r;return r}}function J(t,e){for(var n=0,i=0;i<t.length;)e(t[i])?(t.splice(i,1),n++):i++;return n}function tt(t,e){for(var n=0,i=0;i<t.length;)t[i]===e?(t.splice(i,1),n++):i++;return n}function et(t,e){var n,i=t.length;if(null==i||i!==e.length)return!1;for(n=0;n<i;n++)if(t[n]!==e[n])return!1;return!0}function nt(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];for(var n=0;n<t.length;n++)if(void 0!==t[n])return t[n]}function it(t){return(t+"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/'/g,"'").replace(/"/g,""").replace(/\n/g,"<br />")}function rt(t){return t.replace(/&.*?;/g,"")}function ot(t){var e=[];return ht.each(t,function(t,n){null!=n&&e.push(t+":"+n)}),e.join(";")}function st(t){var e=[];return ht.each(t,function(t,n){null!=n&&e.push(t+'="'+it(n)+'"')}),e.join(" ")}function at(t){return t.charAt(0).toUpperCase()+t.slice(1)}function lt(t,e){return t-e}function ut(t){return t%1==0}function dt(t,e){var n=t[e];return function(){return n.apply(t,arguments)}}function ct(t,e,n){void 0===n&&(n=!1);var i,r,o,s,a,l=function(){var u=+new Date-s;u<e?i=setTimeout(l,e-u):(i=null,n||(a=t.apply(o,r),o=r=null))};return function(){o=this,r=arguments,s=+new Date;var u=n&&!i;return i||(i=setTimeout(l,e)),u&&(a=t.apply(o,r),o=r=null),a}}Object.defineProperty(e,"__esModule",{value:!0});var pt=n(0),ht=n(3);e.compensateScroll=i,e.uncompensateScroll=r,e.disableCursor=o,e.enableCursor=s,e.distributeHeight=a,e.undistributeHeight=l,e.matchCellWidths=u,e.subtractInnerElHeight=d,e.getScrollParent=c,e.getOuterRect=p,e.getClientRect=h,e.getContentRect=f,e.getScrollbarWidths=g;var ft=null;e.isPrimaryMouseButton=w,e.getEvX=D,e.getEvY=E,e.getEvIsTouch=S,e.preventSelection=C,e.allowSelection=R,e.preventDefault=T,e.intersectRects=M,e.constrainPoint=I,e.getRectCenter=H,e.diffPoints=P,e.parseFieldSpecs=_,e.compareByFieldSpecs=x,e.compareByFieldSpec=O,e.flexibleCompare=F,e.dayIDs=["sun","mon","tue","wed","thu","fri","sat"],e.unitsDesc=["year","month","week","day","hour","minute","second","millisecond"],e.diffDayTime=z,e.diffDay=B,e.diffByUnit=A,e.computeGreatestUnit=k,e.computeDurationGreatestUnit=L,e.divideRangeByDuration=G,e.divideDurationByDuration=N,e.multiplyDuration=j,e.durationHasTime=U,e.isNativeDate=W,e.isTimeString=q,e.log=Y,e.warn=Z;var gt={}.hasOwnProperty;e.mergeProps=Q,e.copyOwnProps=X,e.hasOwnProp=$,e.applyAll=K,e.removeMatching=J,e.removeExact=tt,e.isArraysEqual=et,e.firstDefined=nt,e.htmlEscape=it,e.stripHtmlEntities=rt,e.cssToStr=ot,e.attrsToStr=st,e.capitaliseFirstLetter=at,e.compareNumbers=lt,e.isInt=ut,e.proxy=dt,e.debounce=ct},function(t,e,n){function i(t,e){return t.startMs-e.startMs}Object.defineProperty(e,"__esModule",{value:!0});var r=n(0),o=n(10),s=function(){function t(t,e){this.isStart=!0,this.isEnd=!0,r.isMoment(t)&&(t=t.clone().stripZone()),r.isMoment(e)&&(e=e.clone().stripZone()),t&&(this.startMs=t.valueOf()),e&&(this.endMs=e.valueOf())}return t.invertRanges=function(e,n){var r,o,s=[],a=n.startMs;for(e.sort(i),r=0;r<e.length;r++)o=e[r],o.startMs>a&&s.push(new t(a,o.startMs)),o.endMs>a&&(a=o.endMs);return a<n.endMs&&s.push(new t(a,n.endMs)),s},t.prototype.intersect=function(e){var n=this.startMs,i=this.endMs,r=null;return null!=e.startMs&&(n=null==n?e.startMs:Math.max(n,e.startMs)),null!=e.endMs&&(i=null==i?e.endMs:Math.min(i,e.endMs)),(null==n||null==i||n<i)&&(r=new t(n,i),r.isStart=this.isStart&&n===this.startMs,r.isEnd=this.isEnd&&i===this.endMs),r},t.prototype.intersectsWith=function(t){return(null==this.endMs||null==t.startMs||this.endMs>t.startMs)&&(null==this.startMs||null==t.endMs||this.startMs<t.endMs)},t.prototype.containsRange=function(t){return(null==this.startMs||null!=t.startMs&&t.startMs>=this.startMs)&&(null==this.endMs||null!=t.endMs&&t.endMs<=this.endMs)},t.prototype.containsDate=function(t){var e=t.valueOf();return(null==this.startMs||e>=this.startMs)&&(null==this.endMs||e<this.endMs)},t.prototype.constrainDate=function(t){var e=t.valueOf();return null!=this.startMs&&e<this.startMs&&(e=this.startMs),null!=this.endMs&&e>=this.endMs&&(e=this.endMs-1),e},t.prototype.equals=function(t){return this.startMs===t.startMs&&this.endMs===t.endMs},t.prototype.clone=function(){var e=new t(this.startMs,this.endMs);return e.isStart=this.isStart,e.isEnd=this.isEnd,e},t.prototype.getStart=function(){return null!=this.startMs?o.default.utc(this.startMs).stripZone():null},t.prototype.getEnd=function(){return null!=this.endMs?o.default.utc(this.endMs).stripZone():null},t.prototype.as=function(t){return r.utc(this.endMs).diff(r.utc(this.startMs),t,!0)},t}();e.default=s},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(3),o=n(208),s=n(33),a=n(49),l=function(t){function e(n){var i=t.call(this)||this;return i.calendar=n,i.className=[],i.uid=String(e.uuid++),i}return i.__extends(e,t),e.parse=function(t,e){var n=new this(e);return!("object"!=typeof t||!n.applyProps(t))&&n},e.normalizeId=function(t){return t?String(t):null},e.prototype.fetch=function(t,e,n){},e.prototype.removeEventDefsById=function(t){},e.prototype.removeAllEventDefs=function(){},e.prototype.getPrimitive=function(t){},e.prototype.parseEventDefs=function(t){var e,n,i=[];for(e=0;e<t.length;e++)(n=this.parseEventDef(t[e]))&&i.push(n);return i},e.prototype.parseEventDef=function(t){var e=this.calendar.opt("eventDataTransform"),n=this.eventDataTransform;return e&&(t=e(t,this.calendar)),n&&(t=n(t,this.calendar)),a.default.parse(t,this)},e.prototype.applyManualStandardProps=function(t){return null!=t.id&&(this.id=e.normalizeId(t.id)),r.isArray(t.className)?this.className=t.className:"string"==typeof t.className&&(this.className=t.className.split(/\s+/)),!0},e.uuid=0,e.defineStandardProps=o.default.defineStandardProps,e.copyVerbatimStandardProps=o.default.copyVerbatimStandardProps,e}(s.default);e.default=l,o.default.mixInto(l),l.defineStandardProps({id:!1,className:!1,color:!0,backgroundColor:!0,borderColor:!0,textColor:!0,editable:!0,startEditable:!0,durationEditable:!0,rendering:!0,overlap:!0,constraint:!0,allDayDefault:!0,eventDataTransform:!0})},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(3),o=n(14),s=0,a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.__extends(e,t),e.prototype.listenTo=function(t,e,n){if("object"==typeof e)for(var i in e)e.hasOwnProperty(i)&&this.listenTo(t,i,e[i]);else"string"==typeof e&&t.on(e+"."+this.getListenerNamespace(),r.proxy(n,this))},e.prototype.stopListeningTo=function(t,e){t.off((e||"")+"."+this.getListenerNamespace())},e.prototype.getListenerNamespace=function(){return null==this.listenerId&&(this.listenerId=s++),"_listener"+this.listenerId},e}(o.default);e.default=a},,,function(t,e,n){function i(t,e){return c.format.call(t,e)}function r(t,e,n){void 0===e&&(e=!1),void 0===n&&(n=!1);var i,r,d,c,p=t[0],h=1===t.length&&"string"==typeof p;return o.isMoment(p)||a.isNativeDate(p)||void 0===p?c=o.apply(null,t):(i=!1,r=!1,h?l.test(p)?(p+="-01",t=[p],i=!0,r=!0):(d=u.exec(p))&&(i=!d[5],r=!0):s.isArray(p)&&(r=!0),c=e||i?o.utc.apply(o,t):o.apply(null,t),i?(c._ambigTime=!0,c._ambigZone=!0):n&&(r?c._ambigZone=!0:h&&c.utcOffset(p))),c._fullCalendar=!0,c}Object.defineProperty(e,"__esModule",{value:!0});var o=n(0),s=n(3),a=n(4),l=/^\s*\d{4}-\d\d$/,u=/^\s*\d{4}-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?)?$/,d=o.fn;e.newMomentProto=d;var c=s.extend({},d);e.oldMomentProto=c;var p=o.momentProperties;p.push("_fullCalendar"),p.push("_ambigTime"),p.push("_ambigZone"),e.oldMomentFormat=i;var h=function(){return r(arguments)};e.default=h,h.utc=function(){var t=r(arguments,!0);return t.hasTime()&&t.utc(),t},h.parseZone=function(){return r(arguments,!0,!0)},d.week=d.weeks=function(t){var e=this._locale._fullCalendar_weekCalc;return null==t&&"function"==typeof e?e(this):"ISO"===e?c.isoWeek.apply(this,arguments):c.week.apply(this,arguments)},d.time=function(t){if(!this._fullCalendar)return c.time.apply(this,arguments);if(null==t)return o.duration({hours:this.hours(),minutes:this.minutes(),seconds:this.seconds(),milliseconds:this.milliseconds()});this._ambigTime=!1,o.isDuration(t)||o.isMoment(t)||(t=o.duration(t));var e=0;return o.isDuration(t)&&(e=24*Math.floor(t.asDays())),this.hours(e+t.hours()).minutes(t.minutes()).seconds(t.seconds()).milliseconds(t.milliseconds())},d.stripTime=function(){return this._ambigTime||(this.utc(!0),this.set({hours:0,minutes:0,seconds:0,ms:0}),this._ambigTime=!0,this._ambigZone=!0),this},d.hasTime=function(){return!this._ambigTime},d.stripZone=function(){var t;return this._ambigZone||(t=this._ambigTime,this.utc(!0),this._ambigTime=t||!1,this._ambigZone=!0),this},d.hasZone=function(){return!this._ambigZone},d.local=function(t){return c.local.call(this,this._ambigZone||t),this._ambigTime=!1,this._ambigZone=!1,this},d.utc=function(t){return c.utc.call(this,t),this._ambigTime=!1,this._ambigZone=!1,this},d.utcOffset=function(t){return null!=t&&(this._ambigTime=!1,this._ambigZone=!1),c.utcOffset.apply(this,arguments)}},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(3),o=n(14),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.__extends(e,t),e.prototype.on=function(t,e){return r(this).on(t,this._prepareIntercept(e)),this},e.prototype.one=function(t,e){return r(this).one(t,this._prepareIntercept(e)),this},e.prototype._prepareIntercept=function(t){var e=function(e,n){return t.apply(n.context||this,n.args||[])};return t.guid||(t.guid=r.guid++),e.guid=t.guid,e},e.prototype.off=function(t,e){return r(this).off(t,e),this},e.prototype.trigger=function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];return r(this).triggerHandler(t,{args:e}),this},e.prototype.triggerWith=function(t,e,n){return r(this).triggerHandler(t,{context:e,args:n}),this},e.prototype.hasHandlers=function(t){var e=r._data(this,"events");return e&&e[t]&&e[t].length>0},e}(o.default);e.default=s},function(t,e){Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){this.isAllDay=!1,this.unzonedRange=t,this.isAllDay=e}return t.prototype.toLegacy=function(t){return{start:t.msToMoment(this.unzonedRange.startMs,this.isAllDay),end:t.msToMoment(this.unzonedRange.endMs,this.isAllDay)}},t}();e.default=n},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(34),o=n(209),s=n(17),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.__extends(e,t),e.prototype.buildInstances=function(){return[this.buildInstance()]},e.prototype.buildInstance=function(){return new o.default(this,this.dateProfile)},e.prototype.isAllDay=function(){return this.dateProfile.isAllDay()},e.prototype.clone=function(){var e=t.prototype.clone.call(this);return e.dateProfile=this.dateProfile,e},e.prototype.rezone=function(){var t=this.source.calendar,e=this.dateProfile;this.dateProfile=new s.default(t.moment(e.start),e.end?t.moment(e.end):null,t)},e.prototype.applyManualStandardProps=function(e){var n=t.prototype.applyManualStandardProps.call(this,e),i=s.default.parse(e,this.source);return!!i&&(this.dateProfile=i,null!=e.date&&(this.miscProps.date=e.date),n)},e}(r.default);e.default=a,a.defineStandardProps({start:!1,date:!1,end:!1,allDay:!1})},function(t,e){Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(){}return t.mixInto=function(t){var e=this;Object.getOwnPropertyNames(this.prototype).forEach(function(n){t.prototype[n]||(t.prototype[n]=e.prototype[n])})},t.mixOver=function(t){var e=this;Object.getOwnPropertyNames(this.prototype).forEach(function(n){t.prototype[n]=e.prototype[n]})},t}();e.default=n},function(t,e){Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t){this.view=t._getView(),this.component=t}return t.prototype.opt=function(t){return this.view.opt(t)},t.prototype.end=function(){},t}();e.default=n},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0}),e.version="3.9.0",e.internalApiVersion=12;var i=n(4);e.applyAll=i.applyAll,e.debounce=i.debounce,e.isInt=i.isInt,e.htmlEscape=i.htmlEscape,e.cssToStr=i.cssToStr,e.proxy=i.proxy,e.capitaliseFirstLetter=i.capitaliseFirstLetter,e.getOuterRect=i.getOuterRect,e.getClientRect=i.getClientRect,e.getContentRect=i.getContentRect,e.getScrollbarWidths=i.getScrollbarWidths,e.preventDefault=i.preventDefault,e.parseFieldSpecs=i.parseFieldSpecs,e.compareByFieldSpecs=i.compareByFieldSpecs,e.compareByFieldSpec=i.compareByFieldSpec,e.flexibleCompare=i.flexibleCompare,e.computeGreatestUnit=i.computeGreatestUnit,e.divideRangeByDuration=i.divideRangeByDuration,e.divideDurationByDuration=i.divideDurationByDuration,e.multiplyDuration=i.multiplyDuration,e.durationHasTime=i.durationHasTime,e.log=i.log,e.warn=i.warn,e.removeExact=i.removeExact,e.intersectRects=i.intersectRects;var r=n(47);e.formatDate=r.formatDate,e.formatRange=r.formatRange,e.queryMostGranularFormatUnit=r.queryMostGranularFormatUnit;var o=n(31);e.datepickerLocale=o.datepickerLocale,e.locale=o.locale;var s=n(10);e.moment=s.default;var a=n(11);e.EmitterMixin=a.default;var l=n(7);e.ListenerMixin=l.default;var u=n(48);e.Model=u.default;var d=n(207);e.Constraints=d.default;var c=n(5);e.UnzonedRange=c.default;var p=n(12);e.ComponentFootprint=p.default;var h=n(212);e.BusinessHourGenerator=h.default;var f=n(34);e.EventDef=f.default;var g=n(37);e.EventDefMutation=g.default;var v=n(38);e.EventSourceParser=v.default;var y=n(6);e.EventSource=y.default;var m=n(51);e.defineThemeSystem=m.defineThemeSystem;var b=n(18);e.EventInstanceGroup=b.default;var w=n(52);e.ArrayEventSource=w.default;var D=n(215);e.FuncEventSource=D.default;var E=n(216);e.JsonFeedEventSource=E.default;var S=n(36);e.EventFootprint=S.default;var C=n(33);e.Class=C.default;var R=n(14);e.Mixin=R.default;var T=n(53);e.CoordCache=T.default;var M=n(54);e.DragListener=M.default;var I=n(20);e.Promise=I.default;var H=n(217);e.TaskQueue=H.default;var P=n(218);e.RenderQueue=P.default;var _=n(39);e.Scroller=_.default;var x=n(19);e.Theme=x.default;var O=n(219);e.DateComponent=O.default;var F=n(40);e.InteractiveDateComponent=F.default;var z=n(220);e.Calendar=z.default;var B=n(41);e.View=B.default;var A=n(22);e.defineView=A.defineView,e.getViewConfig=A.getViewConfig;var k=n(55);e.DayTableMixin=k.default;var L=n(56);e.BusinessHourRenderer=L.default;var V=n(42);e.EventRenderer=V.default;var G=n(57);e.FillRenderer=G.default;var N=n(58);e.HelperRenderer=N.default;var j=n(222);e.ExternalDropping=j.default;var U=n(223);e.EventResizing=U.default;var W=n(59);e.EventPointing=W.default;var q=n(224);e.EventDragging=q.default;var Y=n(225);e.DateSelecting=Y.default;var Z=n(60);e.StandardInteractionsMixin=Z.default;var Q=n(226);e.AgendaView=Q.default;var X=n(227);e.TimeGrid=X.default;var $=n(61);e.DayGrid=$.default;var K=n(62);e.BasicView=K.default;var J=n(229);e.MonthView=J.default;var tt=n(230);e.ListView=tt.default},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(5),r=function(){function t(t,e,n){this.start=t,this.end=e||null,this.unzonedRange=this.buildUnzonedRange(n)}return t.parse=function(e,n){var i=e.start||e.date,r=e.end;if(!i)return!1;var o=n.calendar,s=o.moment(i),a=r?o.moment(r):null,l=e.allDay,u=o.opt("forceEventDuration");return!!s.isValid()&&(!a||a.isValid()&&a.isAfter(s)||(a=null),null==l&&null==(l=n.allDayDefault)&&(l=o.opt("allDayDefault")),!0===l?(s.stripTime(),a&&a.stripTime()):!1===l&&(s.hasTime()||s.time(0),a&&!a.hasTime()&&a.time(0)),!a&&u&&(a=o.getDefaultEventEnd(!s.hasTime(),s)),new t(s,a,o))},t.isStandardProp=function(t){return"start"===t||"date"===t||"end"===t||"allDay"===t},t.prototype.isAllDay=function(){return!(this.start.hasTime()||this.end&&this.end.hasTime())},t.prototype.buildUnzonedRange=function(t){var e=this.start.clone().stripZone().valueOf(),n=this.getEnd(t).stripZone().valueOf();return new i.default(e,n)},t.prototype.getEnd=function(t){return this.end?this.end.clone():t.getDefaultEventEnd(this.isAllDay(),this.start)},t}();e.default=r},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(5),r=n(35),o=n(211),s=function(){function t(t){this.eventInstances=t||[]}return t.prototype.getAllEventRanges=function(t){return t?this.sliceNormalRenderRanges(t):this.eventInstances.map(r.eventInstanceToEventRange)},t.prototype.sliceRenderRanges=function(t){return this.isInverse()?this.sliceInverseRenderRanges(t):this.sliceNormalRenderRanges(t)},t.prototype.sliceNormalRenderRanges=function(t){var e,n,i,r=this.eventInstances,s=[];for(e=0;e<r.length;e++)n=r[e],(i=n.dateProfile.unzonedRange.intersect(t))&&s.push(new o.default(i,n.def,n));return s},t.prototype.sliceInverseRenderRanges=function(t){var e=this.eventInstances.map(r.eventInstanceToUnzonedRange),n=this.getEventDef();return e=i.default.invertRanges(e,t),e.map(function(t){return new o.default(t,n)})},t.prototype.isInverse=function(){return this.getEventDef().hasInverseRendering()},t.prototype.getEventDef=function(){return this.explicitEventDef||this.eventInstances[0].def},t}();e.default=s},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(3),r=function(){function t(t){this.optionsManager=t,this.processIconOverride()}return t.prototype.processIconOverride=function(){this.iconOverrideOption&&this.setIconOverride(this.optionsManager.get(this.iconOverrideOption))},t.prototype.setIconOverride=function(t){var e,n;if(i.isPlainObject(t)){e=i.extend({},this.iconClasses);for(n in t)e[n]=this.applyIconOverridePrefix(t[n]);this.iconClasses=e}else!1===t&&(this.iconClasses={})},t.prototype.applyIconOverridePrefix=function(t){var e=this.iconOverridePrefix;return e&&0!==t.indexOf(e)&&(t=e+t),t},t.prototype.getClass=function(t){return this.classes[t]||""},t.prototype.getIconClass=function(t){var e=this.iconClasses[t];return e?this.baseIconClass+" "+e:""},t.prototype.getCustomButtonIconClass=function(t){var e;return this.iconOverrideCustomButtonOption&&(e=t[this.iconOverrideCustomButtonOption])?this.baseIconClass+" "+this.applyIconOverridePrefix(e):""},t}();e.default=r,r.prototype.classes={},r.prototype.iconClasses={},r.prototype.baseIconClass="",r.prototype.iconOverridePrefix=""},function(t,e,n){function i(t,e){t.then=function(n){return"function"==typeof n?s.resolve(n(e)):t}}function r(t){t.then=function(e,n){return"function"==typeof n&&n(),t}}Object.defineProperty(e,"__esModule",{value:!0});var o=n(3),s={construct:function(t){var e=o.Deferred(),n=e.promise();return"function"==typeof t&&t(function(t){e.resolve(t),i(n,t)},function(){e.reject(),r(n)}),n},resolve:function(t){var e=o.Deferred().resolve(t),n=e.promise();return i(n,t),n},reject:function(){var t=o.Deferred().reject(),e=t.promise();return r(e),e}};e.default=s},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(3),r=n(16),o=n(11),s=n(7);r.touchMouseIgnoreWait=500;var a=null,l=0,u=function(){function t(){this.isTouching=!1,this.mouseIgnoreDepth=0}return t.get=function(){return a||(a=new t,a.bind()),a},t.needed=function(){t.get(),l++},t.unneeded=function(){--l||(a.unbind(),a=null)},t.prototype.bind=function(){var t=this;this.listenTo(i(document),{touchstart:this.handleTouchStart,touchcancel:this.handleTouchCancel,touchend:this.handleTouchEnd,mousedown:this.handleMouseDown,mousemove:this.handleMouseMove,mouseup:this.handleMouseUp,click:this.handleClick,selectstart:this.handleSelectStart,contextmenu:this.handleContextMenu}),window.addEventListener("touchmove",this.handleTouchMoveProxy=function(e){t.handleTouchMove(i.Event(e))},{passive:!1}),window.addEventListener("scroll",this.handleScrollProxy=function(e){t.handleScroll(i.Event(e))},!0)},t.prototype.unbind=function(){this.stopListeningTo(i(document)),window.removeEventListener("touchmove",this.handleTouchMoveProxy),window.removeEventListener("scroll",this.handleScrollProxy,!0)},t.prototype.handleTouchStart=function(t){this.stopTouch(t,!0),this.isTouching=!0,this.trigger("touchstart",t)},t.prototype.handleTouchMove=function(t){this.isTouching&&this.trigger("touchmove",t)},t.prototype.handleTouchCancel=function(t){this.isTouching&&(this.trigger("touchcancel",t),this.stopTouch(t))},t.prototype.handleTouchEnd=function(t){this.stopTouch(t)},t.prototype.handleMouseDown=function(t){this.shouldIgnoreMouse()||this.trigger("mousedown",t)},t.prototype.handleMouseMove=function(t){this.shouldIgnoreMouse()||this.trigger("mousemove",t)},t.prototype.handleMouseUp=function(t){this.shouldIgnoreMouse()||this.trigger("mouseup",t)},t.prototype.handleClick=function(t){this.shouldIgnoreMouse()||this.trigger("click",t)},t.prototype.handleSelectStart=function(t){this.trigger("selectstart",t)},t.prototype.handleContextMenu=function(t){this.trigger("contextmenu",t)},t.prototype.handleScroll=function(t){this.trigger("scroll",t)},t.prototype.stopTouch=function(t,e){void 0===e&&(e=!1),this.isTouching&&(this.isTouching=!1,this.trigger("touchend",t),e||this.startTouchMouseIgnore())},t.prototype.startTouchMouseIgnore=function(){var t=this,e=r.touchMouseIgnoreWait;e&&(this.mouseIgnoreDepth++,setTimeout(function(){t.mouseIgnoreDepth--},e))},t.prototype.shouldIgnoreMouse=function(){return this.isTouching||Boolean(this.mouseIgnoreDepth)},t}();e.default=u,s.default.mixInto(u),o.default.mixInto(u)},function(t,e,n){function i(t,n){e.viewHash[t]=n}function r(t){return e.viewHash[t]}Object.defineProperty(e,"__esModule",{value:!0});var o=n(16);e.viewHash={},o.views=e.viewHash,e.defineView=i,e.getViewConfig=r},function(t,e,n){function i(t,e){return!t&&!e||!(!t||!e)&&(t.component===e.component&&r(t,e)&&r(e,t))}function r(t,e){for(var n in t)if(!/^(component|left|right|top|bottom)$/.test(n)&&t[n]!==e[n])return!1;return!0}Object.defineProperty(e,"__esModule",{value:!0});var o=n(2),s=n(4),a=n(54),l=function(t){function e(e,n){var i=t.call(this,n)||this;return i.component=e,i}return o.__extends(e,t),e.prototype.handleInteractionStart=function(e){var n,i,r,o=this.subjectEl;this.component.hitsNeeded(),this.computeScrollBounds(),e?(i={left:s.getEvX(e),top:s.getEvY(e)},r=i,o&&(n=s.getOuterRect(o),r=s.constrainPoint(r,n)),this.origHit=this.queryHit(r.left,r.top),o&&this.options.subjectCenter&&(this.origHit&&(n=s.intersectRects(this.origHit,n)||n),r=s.getRectCenter(n)),this.coordAdjust=s.diffPoints(r,i)):(this.origHit=null,this.coordAdjust=null),t.prototype.handleInteractionStart.call(this,e)},e.prototype.handleDragStart=function(e){var n;t.prototype.handleDragStart.call(this,e),(n=this.queryHit(s.getEvX(e),s.getEvY(e)))&&this.handleHitOver(n)},e.prototype.handleDrag=function(e,n,r){var o;t.prototype.handleDrag.call(this,e,n,r),o=this.queryHit(s.getEvX(r),s.getEvY(r)),i(o,this.hit)||(this.hit&&this.handleHitOut(),o&&this.handleHitOver(o))},e.prototype.handleDragEnd=function(e){this.handleHitDone(),t.prototype.handleDragEnd.call(this,e)},e.prototype.handleHitOver=function(t){var e=i(t,this.origHit);this.hit=t,this.trigger("hitOver",this.hit,e,this.origHit)},e.prototype.handleHitOut=function(){this.hit&&(this.trigger("hitOut",this.hit),this.handleHitDone(),this.hit=null)},e.prototype.handleHitDone=function(){this.hit&&this.trigger("hitDone",this.hit)},e.prototype.handleInteractionEnd=function(e,n){t.prototype.handleInteractionEnd.call(this,e,n),this.origHit=null,this.hit=null,this.component.hitsNotNeeded()},e.prototype.handleScrollEnd=function(){t.prototype.handleScrollEnd.call(this),this.isDragging&&(this.component.releaseHits(),this.component.prepareHits())},e.prototype.queryHit=function(t,e){return this.coordAdjust&&(t+=this.coordAdjust.left,e+=this.coordAdjust.top),this.component.queryHit(t,e)},e}(a.default);e.default=l},,,,,,,,function(t,e,n){function i(t){a.each(f,function(e,n){null==t[e]&&(t[e]=n(t))})}function r(t,n,i){var r=e.localeOptionHash[t]||(e.localeOptionHash[t]={});r.isRTL=i.isRTL,r.weekNumberTitle=i.weekHeader,a.each(p,function(t,e){r[t]=e(i)});var o=a.datepicker;o&&(o.regional[n]=o.regional[t]=i,o.regional.en=o.regional[""],o.setDefaults(i))}function o(t,n){var i,r;i=e.localeOptionHash[t]||(e.localeOptionHash[t]={}),n&&(i=e.localeOptionHash[t]=d.mergeOptions([i,n])),r=s(t),a.each(h,function(t,e){null==i[t]&&(i[t]=e(r,i))}),d.globalDefaults.locale=t}function s(t){return l.localeData(t)||l.localeData("en")}Object.defineProperty(e,"__esModule",{value:!0});var a=n(3),l=n(0),u=n(16),d=n(32),c=n(4);e.localeOptionHash={},u.locales=e.localeOptionHash;var p={buttonText:function(t){return{prev:c.stripHtmlEntities(t.prevText),next:c.stripHtmlEntities(t.nextText),today:c.stripHtmlEntities(t.currentText)}},monthYearFormat:function(t){return t.showMonthAfterYear?"YYYY["+t.yearSuffix+"] MMMM":"MMMM YYYY["+t.yearSuffix+"]"}},h={dayOfMonthFormat:function(t,e){var n=t.longDateFormat("l");return n=n.replace(/^Y+[^\w\s]*|[^\w\s]*Y+$/g,""),e.isRTL?n+=" ddd":n="ddd "+n,n},
-mediumTimeFormat:function(t){return t.longDateFormat("LT").replace(/\s*a$/i,"a")},smallTimeFormat:function(t){return t.longDateFormat("LT").replace(":mm","(:mm)").replace(/(\Wmm)$/,"($1)").replace(/\s*a$/i,"a")},extraSmallTimeFormat:function(t){return t.longDateFormat("LT").replace(":mm","(:mm)").replace(/(\Wmm)$/,"($1)").replace(/\s*a$/i,"t")},hourFormat:function(t){return t.longDateFormat("LT").replace(":mm","").replace(/(\Wmm)$/,"").replace(/\s*a$/i,"a")},noMeridiemTimeFormat:function(t){return t.longDateFormat("LT").replace(/\s*a$/i,"")}},f={smallDayDateFormat:function(t){return t.isRTL?"D dd":"dd D"},weekFormat:function(t){return t.isRTL?"w[ "+t.weekNumberTitle+"]":"["+t.weekNumberTitle+" ]w"},smallWeekFormat:function(t){return t.isRTL?"w["+t.weekNumberTitle+"]":"["+t.weekNumberTitle+"]w"}};e.populateInstanceComputableOptions=i,e.datepickerLocale=r,e.locale=o,e.getMomentLocaleData=s,o("en",d.englishDefaults)},function(t,e,n){function i(t){return r.mergeProps(t,o)}Object.defineProperty(e,"__esModule",{value:!0});var r=n(4);e.globalDefaults={titleRangeSeparator:" – ",monthYearFormat:"MMMM YYYY",defaultTimedEventDuration:"02:00:00",defaultAllDayEventDuration:{days:1},forceEventDuration:!1,nextDayThreshold:"09:00:00",columnHeader:!0,defaultView:"month",aspectRatio:1.35,header:{left:"title",center:"",right:"today prev,next"},weekends:!0,weekNumbers:!1,weekNumberTitle:"W",weekNumberCalculation:"local",scrollTime:"06:00:00",minTime:"00:00:00",maxTime:"24:00:00",showNonCurrentDates:!0,lazyFetching:!0,startParam:"start",endParam:"end",timezoneParam:"timezone",timezone:!1,locale:null,isRTL:!1,buttonText:{prev:"prev",next:"next",prevYear:"prev year",nextYear:"next year",year:"year",today:"today",month:"month",week:"week",day:"day"},allDayText:"all-day",agendaEventMinHeight:0,theme:!1,dragOpacity:.75,dragRevertDuration:500,dragScroll:!0,unselectAuto:!0,dropAccept:"*",eventOrder:"title",eventLimit:!1,eventLimitText:"more",eventLimitClick:"popover",dayPopoverFormat:"LL",handleWindowResize:!0,windowResizeDelay:100,longPressDelay:1e3},e.englishDefaults={dayPopoverFormat:"dddd, MMMM D"},e.rtlDefaults={header:{left:"next,prev today",center:"",right:"title"},buttonIcons:{prev:"right-single-arrow",next:"left-single-arrow",prevYear:"right-double-arrow",nextYear:"left-double-arrow"},themeButtonIcons:{prev:"circle-triangle-e",next:"circle-triangle-w",nextYear:"seek-prev",prevYear:"seek-next"}};var o=["header","footer","buttonText","buttonIcons","themeButtonIcons"];e.mergeOptions=i},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(4),o=function(){function t(){}return t.extend=function(t){var e=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.__extends(e,t),e}(this);return r.copyOwnProps(t,e.prototype),e},t.mixin=function(t){r.copyOwnProps(t,this.prototype)},t}();e.default=o},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(3),r=n(208),o=function(){function t(t){this.source=t,this.className=[],this.miscProps={}}return t.parse=function(t,e){var n=new this(e);return!!n.applyProps(t)&&n},t.normalizeId=function(t){return String(t)},t.generateId=function(){return"_fc"+t.uuid++},t.prototype.clone=function(){var e=new this.constructor(this.source);return e.id=this.id,e.rawId=this.rawId,e.uid=this.uid,t.copyVerbatimStandardProps(this,e),e.className=this.className.slice(),e.miscProps=i.extend({},this.miscProps),e},t.prototype.hasInverseRendering=function(){return"inverse-background"===this.getRendering()},t.prototype.hasBgRendering=function(){var t=this.getRendering();return"inverse-background"===t||"background"===t},t.prototype.getRendering=function(){return null!=this.rendering?this.rendering:this.source.rendering},t.prototype.getConstraint=function(){return null!=this.constraint?this.constraint:null!=this.source.constraint?this.source.constraint:this.source.calendar.opt("eventConstraint")},t.prototype.getOverlap=function(){return null!=this.overlap?this.overlap:null!=this.source.overlap?this.source.overlap:this.source.calendar.opt("eventOverlap")},t.prototype.isStartExplicitlyEditable=function(){return null!=this.startEditable?this.startEditable:this.source.startEditable},t.prototype.isDurationExplicitlyEditable=function(){return null!=this.durationEditable?this.durationEditable:this.source.durationEditable},t.prototype.isExplicitlyEditable=function(){return null!=this.editable?this.editable:this.source.editable},t.prototype.toLegacy=function(){var e=i.extend({},this.miscProps);return e._id=this.uid,e.source=this.source,e.className=this.className.slice(),e.allDay=this.isAllDay(),null!=this.rawId&&(e.id=this.rawId),t.copyVerbatimStandardProps(this,e),e},t.prototype.applyManualStandardProps=function(e){return null!=e.id?this.id=t.normalizeId(this.rawId=e.id):this.id=t.generateId(),null!=e._id?this.uid=String(e._id):this.uid=t.generateId(),i.isArray(e.className)&&(this.className=e.className),"string"==typeof e.className&&(this.className=e.className.split(/\s+/)),!0},t.prototype.applyMiscProps=function(t){i.extend(this.miscProps,t)},t.uuid=0,t.defineStandardProps=r.default.defineStandardProps,t.copyVerbatimStandardProps=r.default.copyVerbatimStandardProps,t}();e.default=o,r.default.mixInto(o),o.defineStandardProps({_id:!1,id:!1,className:!1,source:!1,title:!0,url:!0,rendering:!0,constraint:!0,overlap:!0,editable:!0,startEditable:!0,durationEditable:!0,color:!0,backgroundColor:!0,borderColor:!0,textColor:!0})},function(t,e,n){function i(t,e){var n,i=[];for(n=0;n<t.length;n++)i.push.apply(i,t[n].buildInstances(e));return i}function r(t){return new l.default(t.dateProfile.unzonedRange,t.def,t)}function o(t){return new u.default(new d.default(t.unzonedRange,t.eventDef.isAllDay()),t.eventDef,t.eventInstance)}function s(t){return t.dateProfile.unzonedRange}function a(t){return t.componentFootprint}Object.defineProperty(e,"__esModule",{value:!0});var l=n(211),u=n(36),d=n(12);e.eventDefsToEventInstances=i,e.eventInstanceToEventRange=r,e.eventRangeToEventFootprint=o,e.eventInstanceToUnzonedRange=s,e.eventFootprintToComponentFootprint=a},function(t,e){Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e,n){this.componentFootprint=t,this.eventDef=e,n&&(this.eventInstance=n)}return t.prototype.getEventLegacy=function(){return(this.eventInstance||this.eventDef).toLegacy()},t}();e.default=n},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(4),r=n(17),o=n(34),s=n(50),a=n(13),l=function(){function t(){}return t.createFromRawProps=function(e,n,a){var l,u,d,c,p=e.def,h={},f={},g={},v={},y=null,m=null;for(l in n)r.default.isStandardProp(l)?h[l]=n[l]:p.isStandardProp(l)?f[l]=n[l]:p.miscProps[l]!==n[l]&&(g[l]=n[l]);return u=r.default.parse(h,p.source),u&&(d=s.default.createFromDiff(e.dateProfile,u,a)),f.id!==p.id&&(y=f.id),i.isArraysEqual(f.className,p.className)||(m=f.className),o.default.copyVerbatimStandardProps(f,v),c=new t,c.eventDefId=y,c.className=m,c.verbatimStandardProps=v,c.miscProps=g,d&&(c.dateMutation=d),c},t.prototype.mutateSingle=function(t){var e;return this.dateMutation&&(e=t.dateProfile,t.dateProfile=this.dateMutation.buildNewDateProfile(e,t.source.calendar)),null!=this.eventDefId&&(t.id=o.default.normalizeId(t.rawId=this.eventDefId)),this.className&&(t.className=this.className),this.verbatimStandardProps&&a.default.copyVerbatimStandardProps(this.verbatimStandardProps,t),this.miscProps&&t.applyMiscProps(this.miscProps),e?function(){t.dateProfile=e}:function(){}},t.prototype.setDateMutation=function(t){t&&!t.isEmpty()?this.dateMutation=t:this.dateMutation=null},t.prototype.isEmpty=function(){return!this.dateMutation},t}();e.default=l},function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default={sourceClasses:[],registerClass:function(t){this.sourceClasses.unshift(t)},parse:function(t,e){var n,i,r=this.sourceClasses;for(n=0;n<r.length;n++)if(i=r[n].parse(t,e))return i}}},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(3),o=n(4),s=n(33),a=function(t){function e(e){var n=t.call(this)||this;return e=e||{},n.overflowX=e.overflowX||e.overflow||"auto",n.overflowY=e.overflowY||e.overflow||"auto",n}return i.__extends(e,t),e.prototype.render=function(){this.el=this.renderEl(),this.applyOverflow()},e.prototype.renderEl=function(){return this.scrollEl=r('<div class="fc-scroller"></div>')},e.prototype.clear=function(){this.setHeight("auto"),this.applyOverflow()},e.prototype.destroy=function(){this.el.remove()},e.prototype.applyOverflow=function(){this.scrollEl.css({"overflow-x":this.overflowX,"overflow-y":this.overflowY})},e.prototype.lockOverflow=function(t){var e=this.overflowX,n=this.overflowY;t=t||this.getScrollbarWidths(),"auto"===e&&(e=t.top||t.bottom||this.scrollEl[0].scrollWidth-1>this.scrollEl[0].clientWidth?"scroll":"hidden"),"auto"===n&&(n=t.left||t.right||this.scrollEl[0].scrollHeight-1>this.scrollEl[0].clientHeight?"scroll":"hidden"),this.scrollEl.css({"overflow-x":e,"overflow-y":n})},e.prototype.setHeight=function(t){this.scrollEl.height(t)},e.prototype.getScrollTop=function(){return this.scrollEl.scrollTop()},e.prototype.setScrollTop=function(t){this.scrollEl.scrollTop(t)},e.prototype.getClientWidth=function(){return this.scrollEl[0].clientWidth},e.prototype.getClientHeight=function(){return this.scrollEl[0].clientHeight},e.prototype.getScrollbarWidths=function(){return o.getScrollbarWidths(this.scrollEl)},e}(s.default);e.default=a},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(3),o=n(4),s=n(219),a=n(21),l=function(t){function e(e,n){var i=t.call(this,e,n)||this;return i.segSelector=".fc-event-container > *",i.dateSelectingClass&&(i.dateClicking=new i.dateClickingClass(i)),i.dateSelectingClass&&(i.dateSelecting=new i.dateSelectingClass(i)),i.eventPointingClass&&(i.eventPointing=new i.eventPointingClass(i)),i.eventDraggingClass&&i.eventPointing&&(i.eventDragging=new i.eventDraggingClass(i,i.eventPointing)),i.eventResizingClass&&i.eventPointing&&(i.eventResizing=new i.eventResizingClass(i,i.eventPointing)),i.externalDroppingClass&&(i.externalDropping=new i.externalDroppingClass(i)),i}return i.__extends(e,t),e.prototype.setElement=function(e){t.prototype.setElement.call(this,e),this.dateClicking&&this.dateClicking.bindToEl(e),this.dateSelecting&&this.dateSelecting.bindToEl(e),this.bindAllSegHandlersToEl(e)},e.prototype.removeElement=function(){this.endInteractions(),t.prototype.removeElement.call(this)},e.prototype.executeEventUnrender=function(){this.endInteractions(),t.prototype.executeEventUnrender.call(this)},e.prototype.bindGlobalHandlers=function(){t.prototype.bindGlobalHandlers.call(this),this.externalDropping&&this.externalDropping.bindToDocument()},e.prototype.unbindGlobalHandlers=function(){t.prototype.unbindGlobalHandlers.call(this),this.externalDropping&&this.externalDropping.unbindFromDocument()},e.prototype.bindDateHandlerToEl=function(t,e,n){var i=this;this.el.on(e,function(t){if(!r(t.target).is(i.segSelector+":not(.fc-helper),"+i.segSelector+":not(.fc-helper) *,.fc-more,a[data-goto]"))return n.call(i,t)})},e.prototype.bindAllSegHandlersToEl=function(t){[this.eventPointing,this.eventDragging,this.eventResizing].forEach(function(e){e&&e.bindToEl(t)})},e.prototype.bindSegHandlerToEl=function(t,e,n){var i=this;t.on(e,this.segSelector,function(t){var e=r(t.currentTarget);if(!e.is(".fc-helper")){var o=e.data("fc-seg");if(o&&!i.shouldIgnoreEventPointing())return n.call(i,o,t)}})},e.prototype.shouldIgnoreMouse=function(){return a.default.get().shouldIgnoreMouse()},e.prototype.shouldIgnoreTouch=function(){var t=this._getView();return t.isSelected||t.selectedEvent},e.prototype.shouldIgnoreEventPointing=function(){return this.eventDragging&&this.eventDragging.isDragging||this.eventResizing&&this.eventResizing.isResizing},e.prototype.canStartSelection=function(t,e){return o.getEvIsTouch(e)&&!this.canStartResize(t,e)&&(this.isEventDefDraggable(t.footprint.eventDef)||this.isEventDefResizable(t.footprint.eventDef))},e.prototype.canStartDrag=function(t,e){return!this.canStartResize(t,e)&&this.isEventDefDraggable(t.footprint.eventDef)},e.prototype.canStartResize=function(t,e){var n=this._getView(),i=t.footprint.eventDef;return(!o.getEvIsTouch(e)||n.isEventDefSelected(i))&&this.isEventDefResizable(i)&&r(e.target).is(".fc-resizer")},e.prototype.endInteractions=function(){[this.dateClicking,this.dateSelecting,this.eventPointing,this.eventDragging,this.eventResizing].forEach(function(t){t&&t.end()})},e.prototype.isEventDefDraggable=function(t){return this.isEventDefStartEditable(t)},e.prototype.isEventDefStartEditable=function(t){var e=t.isStartExplicitlyEditable();return null==e&&null==(e=this.opt("eventStartEditable"))&&(e=this.isEventDefGenerallyEditable(t)),e},e.prototype.isEventDefGenerallyEditable=function(t){var e=t.isExplicitlyEditable();return null==e&&(e=this.opt("editable")),e},e.prototype.isEventDefResizableFromStart=function(t){return this.opt("eventResizableFromStart")&&this.isEventDefResizable(t)},e.prototype.isEventDefResizableFromEnd=function(t){return this.isEventDefResizable(t)},e.prototype.isEventDefResizable=function(t){var e=t.isDurationExplicitlyEditable();return null==e&&null==(e=this.opt("eventDurationEditable"))&&(e=this.isEventDefGenerallyEditable(t)),e},e.prototype.diffDates=function(t,e){return this.largeUnit?o.diffByUnit(t,e,this.largeUnit):o.diffDayTime(t,e)},e.prototype.isEventInstanceGroupAllowed=function(t){var e,n=this._getView(),i=this.dateProfile,r=this.eventRangesToEventFootprints(t.getAllEventRanges());for(e=0;e<r.length;e++)if(!i.validUnzonedRange.containsRange(r[e].componentFootprint.unzonedRange))return!1;return n.calendar.constraints.isEventInstanceGroupAllowed(t)},e.prototype.isExternalInstanceGroupAllowed=function(t){var e,n=this._getView(),i=this.dateProfile,r=this.eventRangesToEventFootprints(t.getAllEventRanges());for(e=0;e<r.length;e++)if(!i.validUnzonedRange.containsRange(r[e].componentFootprint.unzonedRange))return!1;for(e=0;e<r.length;e++)if(!n.calendar.constraints.isSelectionFootprintAllowed(r[e].componentFootprint))return!1;return!0},e}(s.default);e.default=l},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(3),o=n(0),s=n(4),a=n(218),l=n(221),u=n(40),d=n(21),c=n(5),p=function(t){function e(e,n){var i=t.call(this,null,n.options)||this;return i.batchRenderDepth=0,i.isSelected=!1,i.calendar=e,i.viewSpec=n,i.type=n.type,i.name=i.type,i.initRenderQueue(),i.initHiddenDays(),i.dateProfileGenerator=new i.dateProfileGeneratorClass(i),i.bindBaseRenderHandlers(),i.eventOrderSpecs=s.parseFieldSpecs(i.opt("eventOrder")),i.initialize&&i.initialize(),i}return i.__extends(e,t),e.prototype._getView=function(){return this},e.prototype.opt=function(t){return this.options[t]},e.prototype.initRenderQueue=function(){this.renderQueue=new a.default({event:this.opt("eventRenderWait")}),this.renderQueue.on("start",this.onRenderQueueStart.bind(this)),this.renderQueue.on("stop",this.onRenderQueueStop.bind(this)),this.on("before:change",this.startBatchRender),this.on("change",this.stopBatchRender)},e.prototype.onRenderQueueStart=function(){this.calendar.freezeContentHeight(),this.addScroll(this.queryScroll())},e.prototype.onRenderQueueStop=function(){this.calendar.updateViewSize()&&this.popScroll(),this.calendar.thawContentHeight()},e.prototype.startBatchRender=function(){this.batchRenderDepth++||this.renderQueue.pause()},e.prototype.stopBatchRender=function(){--this.batchRenderDepth||this.renderQueue.resume()},e.prototype.requestRender=function(t,e,n){this.renderQueue.queue(t,e,n)},e.prototype.whenSizeUpdated=function(t){this.renderQueue.isRunning?this.renderQueue.one("stop",t.bind(this)):t.call(this)},e.prototype.computeTitle=function(t){var e;return e=/^(year|month)$/.test(t.currentRangeUnit)?t.currentUnzonedRange:t.activeUnzonedRange,this.formatRange({start:this.calendar.msToMoment(e.startMs,t.isRangeAllDay),end:this.calendar.msToMoment(e.endMs,t.isRangeAllDay)},t.isRangeAllDay,this.opt("titleFormat")||this.computeTitleFormat(t),this.opt("titleRangeSeparator"))},e.prototype.computeTitleFormat=function(t){var e=t.currentRangeUnit;return"year"===e?"YYYY":"month"===e?this.opt("monthYearFormat"):t.currentUnzonedRange.as("days")>1?"ll":"LL"},e.prototype.setDate=function(t){var e=this.get("dateProfile"),n=this.dateProfileGenerator.build(t,void 0,!0);e&&e.activeUnzonedRange.equals(n.activeUnzonedRange)||this.set("dateProfile",n)},e.prototype.unsetDate=function(){this.unset("dateProfile")},e.prototype.fetchInitialEvents=function(t){var e=this.calendar,n=t.isRangeAllDay&&!this.usesMinMaxTime;return e.requestEvents(e.msToMoment(t.activeUnzonedRange.startMs,n),e.msToMoment(t.activeUnzonedRange.endMs,n))},e.prototype.bindEventChanges=function(){this.listenTo(this.calendar,"eventsReset",this.resetEvents)},e.prototype.unbindEventChanges=function(){this.stopListeningTo(this.calendar,"eventsReset")},e.prototype.setEvents=function(t){this.set("currentEvents",t),this.set("hasEvents",!0)},e.prototype.unsetEvents=function(){this.unset("currentEvents"),this.unset("hasEvents")},e.prototype.resetEvents=function(t){this.startBatchRender(),this.unsetEvents(),this.setEvents(t),this.stopBatchRender()},e.prototype.requestDateRender=function(t){var e=this;this.requestRender(function(){e.executeDateRender(t)},"date","init")},e.prototype.requestDateUnrender=function(){var t=this;this.requestRender(function(){t.executeDateUnrender()},"date","destroy")},e.prototype.executeDateRender=function(e){t.prototype.executeDateRender.call(this,e),this.render&&this.render(),this.trigger("datesRendered"),this.addScroll({isDateInit:!0}),this.startNowIndicator()},e.prototype.executeDateUnrender=function(){this.unselect(),this.stopNowIndicator(),this.trigger("before:datesUnrendered"),this.destroy&&this.destroy(),t.prototype.executeDateUnrender.call(this)},e.prototype.bindBaseRenderHandlers=function(){var t=this;this.on("datesRendered",function(){t.whenSizeUpdated(t.triggerViewRender)}),this.on("before:datesUnrendered",function(){t.triggerViewDestroy()})},e.prototype.triggerViewRender=function(){this.publiclyTrigger("viewRender",{context:this,args:[this,this.el]})},e.prototype.triggerViewDestroy=function(){this.publiclyTrigger("viewDestroy",{context:this,args:[this,this.el]})},e.prototype.requestEventsRender=function(t){var e=this;this.requestRender(function(){e.executeEventRender(t),e.whenSizeUpdated(e.triggerAfterEventsRendered)},"event","init")},e.prototype.requestEventsUnrender=function(){var t=this;this.requestRender(function(){t.triggerBeforeEventsDestroyed(),t.executeEventUnrender()},"event","destroy")},e.prototype.requestBusinessHoursRender=function(t){var e=this;this.requestRender(function(){e.renderBusinessHours(t)},"businessHours","init")},e.prototype.requestBusinessHoursUnrender=function(){var t=this;this.requestRender(function(){t.unrenderBusinessHours()},"businessHours","destroy")},e.prototype.bindGlobalHandlers=function(){t.prototype.bindGlobalHandlers.call(this),this.listenTo(d.default.get(),{touchstart:this.processUnselect,mousedown:this.handleDocumentMousedown})},e.prototype.unbindGlobalHandlers=function(){t.prototype.unbindGlobalHandlers.call(this),this.stopListeningTo(d.default.get())},e.prototype.startNowIndicator=function(){var t,e,n,i=this;this.opt("nowIndicator")&&(t=this.getNowIndicatorUnit())&&(e=s.proxy(this,"updateNowIndicator"),this.initialNowDate=this.calendar.getNow(),this.initialNowQueriedMs=(new Date).valueOf(),n=this.initialNowDate.clone().startOf(t).add(1,t).valueOf()-this.initialNowDate.valueOf(),this.nowIndicatorTimeoutID=setTimeout(function(){i.nowIndicatorTimeoutID=null,e(),n=+o.duration(1,t),n=Math.max(100,n),i.nowIndicatorIntervalID=setInterval(e,n)},n))},e.prototype.updateNowIndicator=function(){this.isDatesRendered&&this.initialNowDate&&(this.unrenderNowIndicator(),this.renderNowIndicator(this.initialNowDate.clone().add((new Date).valueOf()-this.initialNowQueriedMs)),this.isNowIndicatorRendered=!0)},e.prototype.stopNowIndicator=function(){this.isNowIndicatorRendered&&(this.nowIndicatorTimeoutID&&(clearTimeout(this.nowIndicatorTimeoutID),this.nowIndicatorTimeoutID=null),this.nowIndicatorIntervalID&&(clearInterval(this.nowIndicatorIntervalID),this.nowIndicatorIntervalID=null),this.unrenderNowIndicator(),this.isNowIndicatorRendered=!1)},e.prototype.updateSize=function(e,n,i){this.setHeight?this.setHeight(e,n):t.prototype.updateSize.call(this,e,n,i),this.updateNowIndicator()},e.prototype.addScroll=function(t){var e=this.queuedScroll||(this.queuedScroll={});r.extend(e,t)},e.prototype.popScroll=function(){this.applyQueuedScroll(),this.queuedScroll=null},e.prototype.applyQueuedScroll=function(){this.queuedScroll&&this.applyScroll(this.queuedScroll)},e.prototype.queryScroll=function(){var t={};return this.isDatesRendered&&r.extend(t,this.queryDateScroll()),t},e.prototype.applyScroll=function(t){t.isDateInit&&this.isDatesRendered&&r.extend(t,this.computeInitialDateScroll()),this.isDatesRendered&&this.applyDateScroll(t)},e.prototype.computeInitialDateScroll=function(){return{}},e.prototype.queryDateScroll=function(){return{}},e.prototype.applyDateScroll=function(t){},e.prototype.reportEventDrop=function(t,e,n,i){var r=this.calendar.eventManager,s=r.mutateEventsWithId(t.def.id,e),a=e.dateMutation;a&&(t.dateProfile=a.buildNewDateProfile(t.dateProfile,this.calendar)),this.triggerEventDrop(t,a&&a.dateDelta||o.duration(),s,n,i)},e.prototype.triggerEventDrop=function(t,e,n,i,r){this.publiclyTrigger("eventDrop",{context:i[0],args:[t.toLegacy(),e,n,r,{},this]})},e.prototype.reportExternalDrop=function(t,e,n,i,r,o){e&&this.calendar.eventManager.addEventDef(t,n),this.triggerExternalDrop(t,e,i,r,o)},e.prototype.triggerExternalDrop=function(t,e,n,i,r){this.publiclyTrigger("drop",{context:n[0],args:[t.dateProfile.start.clone(),i,r,this]}),e&&this.publiclyTrigger("eventReceive",{context:this,args:[t.buildInstance().toLegacy(),this]})},e.prototype.reportEventResize=function(t,e,n,i){var r=this.calendar.eventManager,o=r.mutateEventsWithId(t.def.id,e);t.dateProfile=e.dateMutation.buildNewDateProfile(t.dateProfile,this.calendar),this.triggerEventResize(t,e.dateMutation.endDelta,o,n,i)},e.prototype.triggerEventResize=function(t,e,n,i,r){this.publiclyTrigger("eventResize",{context:i[0],args:[t.toLegacy(),e,n,r,{},this]})},e.prototype.select=function(t,e){this.unselect(e),this.renderSelectionFootprint(t),this.reportSelection(t,e)},e.prototype.renderSelectionFootprint=function(e){this.renderSelection?this.renderSelection(e.toLegacy(this.calendar)):t.prototype.renderSelectionFootprint.call(this,e)},e.prototype.reportSelection=function(t,e){this.isSelected=!0,this.triggerSelect(t,e)},e.prototype.triggerSelect=function(t,e){var n=this.calendar.footprintToDateProfile(t);this.publiclyTrigger("select",{context:this,args:[n.start,n.end,e,this]})},e.prototype.unselect=function(t){this.isSelected&&(this.isSelected=!1,this.destroySelection&&this.destroySelection(),this.unrenderSelection(),this.publiclyTrigger("unselect",{context:this,args:[t,this]}))},e.prototype.selectEventInstance=function(t){this.selectedEventInstance&&this.selectedEventInstance===t||(this.unselectEventInstance(),this.getEventSegs().forEach(function(e){e.footprint.eventInstance===t&&e.el&&e.el.addClass("fc-selected")}),this.selectedEventInstance=t)},e.prototype.unselectEventInstance=function(){this.selectedEventInstance&&(this.getEventSegs().forEach(function(t){t.el&&t.el.removeClass("fc-selected")}),this.selectedEventInstance=null)},e.prototype.isEventDefSelected=function(t){return this.selectedEventInstance&&this.selectedEventInstance.def.id===t.id},e.prototype.handleDocumentMousedown=function(t){s.isPrimaryMouseButton(t)&&this.processUnselect(t)},e.prototype.processUnselect=function(t){this.processRangeUnselect(t),this.processEventUnselect(t)},e.prototype.processRangeUnselect=function(t){var e;this.isSelected&&this.opt("unselectAuto")&&((e=this.opt("unselectCancel"))&&r(t.target).closest(e).length||this.unselect(t))},e.prototype.processEventUnselect=function(t){this.selectedEventInstance&&(r(t.target).closest(".fc-selected").length||this.unselectEventInstance())},e.prototype.triggerBaseRendered=function(){this.publiclyTrigger("viewRender",{context:this,args:[this,this.el]})},e.prototype.triggerBaseUnrendered=function(){this.publiclyTrigger("viewDestroy",{context:this,args:[this,this.el]})},e.prototype.triggerDayClick=function(t,e,n){var i=this.calendar.footprintToDateProfile(t);this.publiclyTrigger("dayClick",{context:e,args:[i.start,n,this]})},e.prototype.isDateInOtherMonth=function(t,e){return!1},e.prototype.getUnzonedRangeOption=function(t){var e=this.opt(t);if("function"==typeof e&&(e=e.apply(null,Array.prototype.slice.call(arguments,1))),e)return this.calendar.parseUnzonedRange(e)},e.prototype.initHiddenDays=function(){var t,e=this.opt("hiddenDays")||[],n=[],i=0;for(!1===this.opt("weekends")&&e.push(0,6),t=0;t<7;t++)(n[t]=-1!==r.inArray(t,e))||i++;if(!i)throw new Error("invalid hiddenDays");this.isHiddenDayHash=n},e.prototype.trimHiddenDays=function(t){var e=t.getStart(),n=t.getEnd();return e&&(e=this.skipHiddenDays(e)),n&&(n=this.skipHiddenDays(n,-1,!0)),null===e||null===n||e<n?new c.default(e,n):null},e.prototype.isHiddenDay=function(t){return o.isMoment(t)&&(t=t.day()),this.isHiddenDayHash[t]},e.prototype.skipHiddenDays=function(t,e,n){void 0===e&&(e=1),void 0===n&&(n=!1);for(var i=t.clone();this.isHiddenDayHash[(i.day()+(n?e:0)+7)%7];)i.add(e,"days");return i},e}(u.default);e.default=p,p.prototype.usesMinMaxTime=!1,p.prototype.dateProfileGeneratorClass=l.default,p.watch("displayingDates",["isInDom","dateProfile"],function(t){this.requestDateRender(t.dateProfile)},function(){this.requestDateUnrender()}),p.watch("displayingBusinessHours",["displayingDates","businessHourGenerator"],function(t){this.requestBusinessHoursRender(t.businessHourGenerator)},function(){this.requestBusinessHoursUnrender()}),p.watch("initialEvents",["dateProfile"],function(t){return this.fetchInitialEvents(t.dateProfile)}),p.watch("bindingEvents",["initialEvents"],function(t){this.setEvents(t.initialEvents),this.bindEventChanges()},function(){this.unbindEventChanges(),this.unsetEvents()}),p.watch("displayingEvents",["displayingDates","hasEvents"],function(){this.requestEventsRender(this.get("currentEvents"))},function(){this.requestEventsUnrender()}),p.watch("title",["dateProfile"],function(t){return this.title=this.computeTitle(t.dateProfile)}),p.watch("legacyDateProps",["dateProfile"],function(t){var e=this.calendar,n=t.dateProfile;this.start=e.msToMoment(n.activeUnzonedRange.startMs,n.isRangeAllDay),this.end=e.msToMoment(n.activeUnzonedRange.endMs,n.isRangeAllDay),this.intervalStart=e.msToMoment(n.currentUnzonedRange.startMs,n.isRangeAllDay),this.intervalEnd=e.msToMoment(n.currentUnzonedRange.endMs,n.isRangeAllDay)})},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(3),r=n(4),o=function(){function t(t,e){this.view=t._getView(),this.component=t,this.fillRenderer=e}return t.prototype.opt=function(t){return this.view.opt(t)},t.prototype.rangeUpdated=function(){var t,e;this.eventTimeFormat=this.opt("eventTimeFormat")||this.opt("timeFormat")||this.computeEventTimeFormat(),t=this.opt("displayEventTime"),null==t&&(t=this.computeDisplayEventTime()),e=this.opt("displayEventEnd"),null==e&&(e=this.computeDisplayEventEnd()),this.displayEventTime=t,this.displayEventEnd=e},t.prototype.render=function(t){var e,n,i,r=this.component._getDateProfile(),o=[],s=[];for(e in t)n=t[e],i=n.sliceRenderRanges(r.activeUnzonedRange),n.getEventDef().hasBgRendering()?o.push.apply(o,i):s.push.apply(s,i);this.renderBgRanges(o),this.renderFgRanges(s)},t.prototype.unrender=function(){this.unrenderBgRanges(),this.unrenderFgRanges()},t.prototype.renderFgRanges=function(t){var e=this.component.eventRangesToEventFootprints(t),n=this.component.eventFootprintsToSegs(e);n=this.renderFgSegEls(n),!1!==this.renderFgSegs(n)&&(this.fgSegs=n)},t.prototype.unrenderFgRanges=function(){this.unrenderFgSegs(this.fgSegs||[]),this.fgSegs=null},t.prototype.renderBgRanges=function(t){var e=this.component.eventRangesToEventFootprints(t),n=this.component.eventFootprintsToSegs(e);!1!==this.renderBgSegs(n)&&(this.bgSegs=n)},t.prototype.unrenderBgRanges=function(){this.unrenderBgSegs(),this.bgSegs=null},t.prototype.getSegs=function(){return(this.bgSegs||[]).concat(this.fgSegs||[])},t.prototype.renderFgSegs=function(t){return!1},t.prototype.unrenderFgSegs=function(t){},t.prototype.renderBgSegs=function(t){var e=this;if(!this.fillRenderer)return!1;this.fillRenderer.renderSegs("bgEvent",t,{getClasses:function(t){return e.getBgClasses(t.footprint.eventDef)},getCss:function(t){return{"background-color":e.getBgColor(t.footprint.eventDef)}},filterEl:function(t,n){return e.filterEventRenderEl(t.footprint,n)}})},t.prototype.unrenderBgSegs=function(){this.fillRenderer&&this.fillRenderer.unrender("bgEvent")},t.prototype.renderFgSegEls=function(t,e){var n=this;void 0===e&&(e=!1);var r,o=this.view.hasPublicHandlers("eventRender"),s="",a=[];if(t.length){for(r=0;r<t.length;r++)this.beforeFgSegHtml(t[r]),s+=this.fgSegHtml(t[r],e);i(s).each(function(e,r){var s=t[e],l=i(r);o&&(l=n.filterEventRenderEl(s.footprint,l)),l&&(l.data("fc-seg",s),s.el=l,a.push(s))})}return a},t.prototype.beforeFgSegHtml=function(t){},t.prototype.fgSegHtml=function(t,e){},t.prototype.getSegClasses=function(t,e,n){var i=["fc-event",t.isStart?"fc-start":"fc-not-start",t.isEnd?"fc-end":"fc-not-end"].concat(this.getClasses(t.footprint.eventDef));return e&&i.push("fc-draggable"),n&&i.push("fc-resizable"),this.view.isEventDefSelected(t.footprint.eventDef)&&i.push("fc-selected"),i},t.prototype.filterEventRenderEl=function(t,e){var n=t.getEventLegacy(),r=this.view.publiclyTrigger("eventRender",{context:n,args:[n,e,this.view]});return!1===r?e=null:r&&!0!==r&&(e=i(r)),e},t.prototype.getTimeText=function(t,e,n){return this._getTimeText(t.eventInstance.dateProfile.start,t.eventInstance.dateProfile.end,t.componentFootprint.isAllDay,e,n)},t.prototype._getTimeText=function(t,e,n,i,r){return null==i&&(i=this.eventTimeFormat),null==r&&(r=this.displayEventEnd),this.displayEventTime&&!n?r&&e?this.view.formatRange({start:t,end:e},!1,i):t.format(i):""},t.prototype.computeEventTimeFormat=function(){return this.opt("smallTimeFormat")},t.prototype.computeDisplayEventTime=function(){return!0},t.prototype.computeDisplayEventEnd=function(){return!0},t.prototype.getBgClasses=function(t){var e=this.getClasses(t);return e.push("fc-bgevent"),e},t.prototype.getClasses=function(t){var e,n=this.getStylingObjs(t),i=[];for(e=0;e<n.length;e++)i.push.apply(i,n[e].eventClassName||n[e].className||[]);return i},t.prototype.getSkinCss=function(t){return{"background-color":this.getBgColor(t),"border-color":this.getBorderColor(t),color:this.getTextColor(t)}},t.prototype.getBgColor=function(t){var e,n,i=this.getStylingObjs(t);for(e=0;e<i.length&&!n;e++)n=i[e].eventBackgroundColor||i[e].eventColor||i[e].backgroundColor||i[e].color;return n||(n=this.opt("eventBackgroundColor")||this.opt("eventColor")),n},t.prototype.getBorderColor=function(t){var e,n,i=this.getStylingObjs(t);for(e=0;e<i.length&&!n;e++)n=i[e].eventBorderColor||i[e].eventColor||i[e].borderColor||i[e].color;return n||(n=this.opt("eventBorderColor")||this.opt("eventColor")),n},t.prototype.getTextColor=function(t){var e,n,i=this.getStylingObjs(t);for(e=0;e<i.length&&!n;e++)n=i[e].eventTextColor||i[e].textColor;return n||(n=this.opt("eventTextColor")),n},t.prototype.getStylingObjs=function(t){var e=this.getFallbackStylingObjs(t);return e.unshift(t),e},t.prototype.getFallbackStylingObjs=function(t){return[t.source]},t.prototype.sortEventSegs=function(t){t.sort(r.proxy(this,"compareEventSegs"))},t.prototype.compareEventSegs=function(t,e){var n=t.footprint,i=e.footprint,o=n.componentFootprint,s=i.componentFootprint,a=o.unzonedRange,l=s.unzonedRange
-;return a.startMs-l.startMs||l.endMs-l.startMs-(a.endMs-a.startMs)||s.isAllDay-o.isAllDay||r.compareByFieldSpecs(n.eventDef,i.eventDef,this.view.eventOrderSpecs,n.eventDef.miscProps,i.eventDef.miscProps)},t}();e.default=o},,,,,function(t,e,n){function i(t){return"en"!==t.locale()?t.clone().locale("en"):t}function r(t,e){return h(a(e).fakeFormatString,t)}function o(t,e,n,i,r){var o;return t=y.default.parseZone(t),e=y.default.parseZone(e),o=t.localeData(),n=o.longDateFormat(n)||n,s(a(n),t,e,i||" - ",r)}function s(t,e,n,i,r){var o,s,a,l=t.sameUnits,u=e.clone().stripZone(),d=n.clone().stripZone(),c=f(t.fakeFormatString,e),p=f(t.fakeFormatString,n),h="",v="",y="",m="",b="";for(o=0;o<l.length&&(!l[o]||u.isSame(d,l[o]));o++)h+=c[o];for(s=l.length-1;s>o&&(!l[s]||u.isSame(d,l[s]))&&(s-1!==o||"."!==c[s]);s--)v=c[s]+v;for(a=o;a<=s;a++)y+=c[a],m+=p[a];return(y||m)&&(b=r?m+i+y:y+i+m),g(h+b+v)}function a(t){return C[t]||(C[t]=l(t))}function l(t){var e=u(t);return{fakeFormatString:c(e),sameUnits:p(e)}}function u(t){for(var e,n=[],i=/\[([^\]]*)\]|\(([^\)]*)\)|(LTS|LT|(\w)\4*o?)|([^\w\[\(]+)/g;e=i.exec(t);)e[1]?n.push.apply(n,d(e[1])):e[2]?n.push({maybe:u(e[2])}):e[3]?n.push({token:e[3]}):e[5]&&n.push.apply(n,d(e[5]));return n}function d(t){return". "===t?["."," "]:[t]}function c(t){var e,n,i=[];for(e=0;e<t.length;e++)n=t[e],"string"==typeof n?i.push("["+n+"]"):n.token?n.token in E?i.push(b+"["+n.token+"]"):i.push(n.token):n.maybe&&i.push(w+c(n.maybe)+w);return i.join(m)}function p(t){var e,n,i,r=[];for(e=0;e<t.length;e++)n=t[e],n.token?(i=S[n.token.charAt(0)],r.push(i?i.unit:"second")):n.maybe?r.push.apply(r,p(n.maybe)):r.push(null);return r}function h(t,e){return g(f(t,e).join(""))}function f(t,e){var n,i,r=[],o=y.oldMomentFormat(e,t),s=o.split(m);for(n=0;n<s.length;n++)i=s[n],i.charAt(0)===b?r.push(E[i.substring(1)](e)):r.push(i);return r}function g(t){return t.replace(D,function(t,e){return e.match(/[1-9]/)?e:""})}function v(t){var e,n,i,r,o=u(t);for(e=0;e<o.length;e++)n=o[e],n.token&&(i=S[n.token.charAt(0)])&&(!r||i.value>r.value)&&(r=i);return r?r.unit:null}Object.defineProperty(e,"__esModule",{value:!0});var y=n(10);y.newMomentProto.format=function(){return this._fullCalendar&&arguments[0]?r(this,arguments[0]):this._ambigTime?y.oldMomentFormat(i(this),"YYYY-MM-DD"):this._ambigZone?y.oldMomentFormat(i(this),"YYYY-MM-DD[T]HH:mm:ss"):this._fullCalendar?y.oldMomentFormat(i(this)):y.oldMomentProto.format.apply(this,arguments)},y.newMomentProto.toISOString=function(){return this._ambigTime?y.oldMomentFormat(i(this),"YYYY-MM-DD"):this._ambigZone?y.oldMomentFormat(i(this),"YYYY-MM-DD[T]HH:mm:ss"):this._fullCalendar?y.oldMomentProto.toISOString.apply(i(this),arguments):y.oldMomentProto.toISOString.apply(this,arguments)};var m="\v",b="\1f",w="\1e",D=new RegExp(w+"([^"+w+"]*)"+w,"g"),E={t:function(t){return y.oldMomentFormat(t,"a").charAt(0)},T:function(t){return y.oldMomentFormat(t,"A").charAt(0)}},S={Y:{value:1,unit:"year"},M:{value:2,unit:"month"},W:{value:3,unit:"week"},w:{value:3,unit:"week"},D:{value:4,unit:"day"},d:{value:4,unit:"day"}};e.formatDate=r,e.formatRange=o;var C={};e.queryMostGranularFormatUnit=v},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(33),o=n(11),s=n(7),a=function(t){function e(){var e=t.call(this)||this;return e._watchers={},e._props={},e.applyGlobalWatchers(),e.constructed(),e}return i.__extends(e,t),e.watch=function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];this.prototype.hasOwnProperty("_globalWatchArgs")||(this.prototype._globalWatchArgs=Object.create(this.prototype._globalWatchArgs)),this.prototype._globalWatchArgs[t]=e},e.prototype.constructed=function(){},e.prototype.applyGlobalWatchers=function(){var t,e=this._globalWatchArgs;for(t in e)this.watch.apply(this,[t].concat(e[t]))},e.prototype.has=function(t){return t in this._props},e.prototype.get=function(t){return void 0===t?this._props:this._props[t]},e.prototype.set=function(t,e){var n;"string"==typeof t?(n={},n[t]=void 0===e?null:e):n=t,this.setProps(n)},e.prototype.reset=function(t){var e,n=this._props,i={};for(e in n)i[e]=void 0;for(e in t)i[e]=t[e];this.setProps(i)},e.prototype.unset=function(t){var e,n,i={};for(e="string"==typeof t?[t]:t,n=0;n<e.length;n++)i[e[n]]=void 0;this.setProps(i)},e.prototype.setProps=function(t){var e,n,i={},r=0;for(e in t)"object"!=typeof(n=t[e])&&n===this._props[e]||(i[e]=n,r++);if(r){this.trigger("before:batchChange",i);for(e in i)n=i[e],this.trigger("before:change",e,n),this.trigger("before:change:"+e,n);for(e in i)n=i[e],void 0===n?delete this._props[e]:this._props[e]=n,this.trigger("change:"+e,n),this.trigger("change",e,n);this.trigger("batchChange",i)}},e.prototype.watch=function(t,e,n,i){var r=this;this.unwatch(t),this._watchers[t]=this._watchDeps(e,function(e){var i=n.call(r,e);i&&i.then?(r.unset(t),i.then(function(e){r.set(t,e)})):r.set(t,i)},function(e){r.unset(t),i&&i.call(r,e)})},e.prototype.unwatch=function(t){var e=this._watchers[t];e&&(delete this._watchers[t],e.teardown())},e.prototype._watchDeps=function(t,e,n){var i=this,r=0,o=t.length,s=0,a={},l=[],u=!1,d=function(t,e,i){1===++r&&s===o&&(u=!0,n(a),u=!1)},c=function(t,n,i){void 0===n?(i||void 0===a[t]||s--,delete a[t]):(i||void 0!==a[t]||s++,a[t]=n),--r||s===o&&(u||e(a))},p=function(t,e){i.on(t,e),l.push([t,e])};return t.forEach(function(t){var e=!1;"?"===t.charAt(0)&&(t=t.substring(1),e=!0),p("before:change:"+t,function(t){d()}),p("change:"+t,function(n){c(t,n,e)})}),t.forEach(function(t){var e=!1;"?"===t.charAt(0)&&(t=t.substring(1),e=!0),i.has(t)?(a[t]=i.get(t),s++):e&&s++}),s===o&&e(a),{teardown:function(){for(var t=0;t<l.length;t++)i.off(l[t][0],l[t][1]);l=null,s===o&&n()},flash:function(){s===o&&(n(),e(a))}}},e.prototype.flash=function(t){var e=this._watchers[t];e&&e.flash()},e}(r.default);e.default=a,a.prototype._globalWatchArgs={},o.default.mixInto(a),s.default.mixInto(a)},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(0),r=n(4),o=n(13),s=n(210);e.default={parse:function(t,e){return r.isTimeString(t.start)||i.isDuration(t.start)||r.isTimeString(t.end)||i.isDuration(t.end)?s.default.parse(t,e):o.default.parse(t,e)}}},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(4),r=n(17),o=function(){function t(){this.clearEnd=!1,this.forceTimed=!1,this.forceAllDay=!1}return t.createFromDiff=function(e,n,r){function o(t,e){return r?i.diffByUnit(t,e,r):n.isAllDay()?i.diffDay(t,e):i.diffDayTime(t,e)}var s,a,l,u,d=e.end&&!n.end,c=e.isAllDay()&&!n.isAllDay(),p=!e.isAllDay()&&n.isAllDay();return s=o(n.start,e.start),n.end&&(a=o(n.unzonedRange.getEnd(),e.unzonedRange.getEnd()),l=a.subtract(s)),u=new t,u.clearEnd=d,u.forceTimed=c,u.forceAllDay=p,u.setDateDelta(s),u.setEndDelta(l),u},t.prototype.buildNewDateProfile=function(t,e){var n=t.start.clone(),i=null,o=!1;return t.end&&!this.clearEnd?i=t.end.clone():this.endDelta&&!i&&(i=e.getDefaultEventEnd(t.isAllDay(),n)),this.forceTimed?(o=!0,n.hasTime()||n.time(0),i&&!i.hasTime()&&i.time(0)):this.forceAllDay&&(n.hasTime()&&n.stripTime(),i&&i.hasTime()&&i.stripTime()),this.dateDelta&&(o=!0,n.add(this.dateDelta),i&&i.add(this.dateDelta)),this.endDelta&&(o=!0,i.add(this.endDelta)),this.startDelta&&(o=!0,n.add(this.startDelta)),o&&(n=e.applyTimezone(n),i&&(i=e.applyTimezone(i))),!i&&e.opt("forceEventDuration")&&(i=e.getDefaultEventEnd(t.isAllDay(),n)),new r.default(n,i,e)},t.prototype.setDateDelta=function(t){t&&t.valueOf()?this.dateDelta=t:this.dateDelta=null},t.prototype.setStartDelta=function(t){t&&t.valueOf()?this.startDelta=t:this.startDelta=null},t.prototype.setEndDelta=function(t){t&&t.valueOf()?this.endDelta=t:this.endDelta=null},t.prototype.isEmpty=function(){return!(this.clearEnd||this.forceTimed||this.forceAllDay||this.dateDelta||this.startDelta||this.endDelta)},t}();e.default=o},function(t,e,n){function i(t,e){a[t]=e}function r(t){return t?!0===t?s.default:a[t]:o.default}Object.defineProperty(e,"__esModule",{value:!0});var o=n(213),s=n(214),a={};e.defineThemeSystem=i,e.getThemeSystemClass=r},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(3),o=n(4),s=n(20),a=n(6),l=n(13),u=function(t){function e(e){var n=t.call(this,e)||this;return n.eventDefs=[],n}return i.__extends(e,t),e.parse=function(t,e){var n;return r.isArray(t.events)?n=t:r.isArray(t)&&(n={events:t}),!!n&&a.default.parse.call(this,n,e)},e.prototype.setRawEventDefs=function(t){this.rawEventDefs=t,this.eventDefs=this.parseEventDefs(t)},e.prototype.fetch=function(t,e,n){var i,r=this.eventDefs;if(null!=this.currentTimezone&&this.currentTimezone!==n)for(i=0;i<r.length;i++)r[i]instanceof l.default&&r[i].rezone();return this.currentTimezone=n,s.default.resolve(r)},e.prototype.addEventDef=function(t){this.eventDefs.push(t)},e.prototype.removeEventDefsById=function(t){return o.removeMatching(this.eventDefs,function(e){return e.id===t})},e.prototype.removeAllEventDefs=function(){this.eventDefs=[]},e.prototype.getPrimitive=function(){return this.rawEventDefs},e.prototype.applyManualStandardProps=function(e){var n=t.prototype.applyManualStandardProps.call(this,e);return this.setRawEventDefs(e.events),n},e}(a.default);e.default=u,u.defineStandardProps({events:!1})},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(3),r=n(4),o=function(){function t(t){this.isHorizontal=!1,this.isVertical=!1,this.els=i(t.els),this.isHorizontal=t.isHorizontal,this.isVertical=t.isVertical,this.forcedOffsetParentEl=t.offsetParent?i(t.offsetParent):null}return t.prototype.build=function(){var t=this.forcedOffsetParentEl;!t&&this.els.length>0&&(t=this.els.eq(0).offsetParent()),this.origin=t?t.offset():null,this.boundingRect=this.queryBoundingRect(),this.isHorizontal&&this.buildElHorizontals(),this.isVertical&&this.buildElVerticals()},t.prototype.clear=function(){this.origin=null,this.boundingRect=null,this.lefts=null,this.rights=null,this.tops=null,this.bottoms=null},t.prototype.ensureBuilt=function(){this.origin||this.build()},t.prototype.buildElHorizontals=function(){var t=[],e=[];this.els.each(function(n,r){var o=i(r),s=o.offset().left,a=o.outerWidth();t.push(s),e.push(s+a)}),this.lefts=t,this.rights=e},t.prototype.buildElVerticals=function(){var t=[],e=[];this.els.each(function(n,r){var o=i(r),s=o.offset().top,a=o.outerHeight();t.push(s),e.push(s+a)}),this.tops=t,this.bottoms=e},t.prototype.getHorizontalIndex=function(t){this.ensureBuilt();var e,n=this.lefts,i=this.rights,r=n.length;for(e=0;e<r;e++)if(t>=n[e]&&t<i[e])return e},t.prototype.getVerticalIndex=function(t){this.ensureBuilt();var e,n=this.tops,i=this.bottoms,r=n.length;for(e=0;e<r;e++)if(t>=n[e]&&t<i[e])return e},t.prototype.getLeftOffset=function(t){return this.ensureBuilt(),this.lefts[t]},t.prototype.getLeftPosition=function(t){return this.ensureBuilt(),this.lefts[t]-this.origin.left},t.prototype.getRightOffset=function(t){return this.ensureBuilt(),this.rights[t]},t.prototype.getRightPosition=function(t){return this.ensureBuilt(),this.rights[t]-this.origin.left},t.prototype.getWidth=function(t){return this.ensureBuilt(),this.rights[t]-this.lefts[t]},t.prototype.getTopOffset=function(t){return this.ensureBuilt(),this.tops[t]},t.prototype.getTopPosition=function(t){return this.ensureBuilt(),this.tops[t]-this.origin.top},t.prototype.getBottomOffset=function(t){return this.ensureBuilt(),this.bottoms[t]},t.prototype.getBottomPosition=function(t){return this.ensureBuilt(),this.bottoms[t]-this.origin.top},t.prototype.getHeight=function(t){return this.ensureBuilt(),this.bottoms[t]-this.tops[t]},t.prototype.queryBoundingRect=function(){var t;return this.els.length>0&&(t=r.getScrollParent(this.els.eq(0)),!t.is(document))?r.getClientRect(t):null},t.prototype.isPointInBounds=function(t,e){return this.isLeftInBounds(t)&&this.isTopInBounds(e)},t.prototype.isLeftInBounds=function(t){return!this.boundingRect||t>=this.boundingRect.left&&t<this.boundingRect.right},t.prototype.isTopInBounds=function(t){return!this.boundingRect||t>=this.boundingRect.top&&t<this.boundingRect.bottom},t}();e.default=o},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(3),r=n(4),o=n(7),s=n(21),a=function(){function t(t){this.isInteracting=!1,this.isDistanceSurpassed=!1,this.isDelayEnded=!1,this.isDragging=!1,this.isTouch=!1,this.isGeneric=!1,this.shouldCancelTouchScroll=!0,this.scrollAlwaysKills=!1,this.isAutoScroll=!1,this.scrollSensitivity=30,this.scrollSpeed=200,this.scrollIntervalMs=50,this.options=t||{}}return t.prototype.startInteraction=function(t,e){if(void 0===e&&(e={}),"mousedown"===t.type){if(s.default.get().shouldIgnoreMouse())return;if(!r.isPrimaryMouseButton(t))return;t.preventDefault()}this.isInteracting||(this.delay=r.firstDefined(e.delay,this.options.delay,0),this.minDistance=r.firstDefined(e.distance,this.options.distance,0),this.subjectEl=this.options.subjectEl,r.preventSelection(i("body")),this.isInteracting=!0,this.isTouch=r.getEvIsTouch(t),this.isGeneric="dragstart"===t.type,this.isDelayEnded=!1,this.isDistanceSurpassed=!1,this.originX=r.getEvX(t),this.originY=r.getEvY(t),this.scrollEl=r.getScrollParent(i(t.target)),this.bindHandlers(),this.initAutoScroll(),this.handleInteractionStart(t),this.startDelay(t),this.minDistance||this.handleDistanceSurpassed(t))},t.prototype.handleInteractionStart=function(t){this.trigger("interactionStart",t)},t.prototype.endInteraction=function(t,e){this.isInteracting&&(this.endDrag(t),this.delayTimeoutId&&(clearTimeout(this.delayTimeoutId),this.delayTimeoutId=null),this.destroyAutoScroll(),this.unbindHandlers(),this.isInteracting=!1,this.handleInteractionEnd(t,e),r.allowSelection(i("body")))},t.prototype.handleInteractionEnd=function(t,e){this.trigger("interactionEnd",t,e||!1)},t.prototype.bindHandlers=function(){var t=s.default.get();this.isGeneric?this.listenTo(i(document),{drag:this.handleMove,dragstop:this.endInteraction}):this.isTouch?this.listenTo(t,{touchmove:this.handleTouchMove,touchend:this.endInteraction,scroll:this.handleTouchScroll}):this.listenTo(t,{mousemove:this.handleMouseMove,mouseup:this.endInteraction}),this.listenTo(t,{selectstart:r.preventDefault,contextmenu:r.preventDefault})},t.prototype.unbindHandlers=function(){this.stopListeningTo(s.default.get()),this.stopListeningTo(i(document))},t.prototype.startDrag=function(t,e){this.startInteraction(t,e),this.isDragging||(this.isDragging=!0,this.handleDragStart(t))},t.prototype.handleDragStart=function(t){this.trigger("dragStart",t)},t.prototype.handleMove=function(t){var e=r.getEvX(t)-this.originX,n=r.getEvY(t)-this.originY,i=this.minDistance;this.isDistanceSurpassed||e*e+n*n>=i*i&&this.handleDistanceSurpassed(t),this.isDragging&&this.handleDrag(e,n,t)},t.prototype.handleDrag=function(t,e,n){this.trigger("drag",t,e,n),this.updateAutoScroll(n)},t.prototype.endDrag=function(t){this.isDragging&&(this.isDragging=!1,this.handleDragEnd(t))},t.prototype.handleDragEnd=function(t){this.trigger("dragEnd",t)},t.prototype.startDelay=function(t){var e=this;this.delay?this.delayTimeoutId=setTimeout(function(){e.handleDelayEnd(t)},this.delay):this.handleDelayEnd(t)},t.prototype.handleDelayEnd=function(t){this.isDelayEnded=!0,this.isDistanceSurpassed&&this.startDrag(t)},t.prototype.handleDistanceSurpassed=function(t){this.isDistanceSurpassed=!0,this.isDelayEnded&&this.startDrag(t)},t.prototype.handleTouchMove=function(t){this.isDragging&&this.shouldCancelTouchScroll&&t.preventDefault(),this.handleMove(t)},t.prototype.handleMouseMove=function(t){this.handleMove(t)},t.prototype.handleTouchScroll=function(t){this.isDragging&&!this.scrollAlwaysKills||this.endInteraction(t,!0)},t.prototype.trigger=function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];this.options[t]&&this.options[t].apply(this,e),this["_"+t]&&this["_"+t].apply(this,e)},t.prototype.initAutoScroll=function(){var t=this.scrollEl;this.isAutoScroll=this.options.scroll&&t&&!t.is(window)&&!t.is(document),this.isAutoScroll&&this.listenTo(t,"scroll",r.debounce(this.handleDebouncedScroll,100))},t.prototype.destroyAutoScroll=function(){this.endAutoScroll(),this.isAutoScroll&&this.stopListeningTo(this.scrollEl,"scroll")},t.prototype.computeScrollBounds=function(){this.isAutoScroll&&(this.scrollBounds=r.getOuterRect(this.scrollEl))},t.prototype.updateAutoScroll=function(t){var e,n,i,o,s=this.scrollSensitivity,a=this.scrollBounds,l=0,u=0;a&&(e=(s-(r.getEvY(t)-a.top))/s,n=(s-(a.bottom-r.getEvY(t)))/s,i=(s-(r.getEvX(t)-a.left))/s,o=(s-(a.right-r.getEvX(t)))/s,e>=0&&e<=1?l=e*this.scrollSpeed*-1:n>=0&&n<=1&&(l=n*this.scrollSpeed),i>=0&&i<=1?u=i*this.scrollSpeed*-1:o>=0&&o<=1&&(u=o*this.scrollSpeed)),this.setScrollVel(l,u)},t.prototype.setScrollVel=function(t,e){this.scrollTopVel=t,this.scrollLeftVel=e,this.constrainScrollVel(),!this.scrollTopVel&&!this.scrollLeftVel||this.scrollIntervalId||(this.scrollIntervalId=setInterval(r.proxy(this,"scrollIntervalFunc"),this.scrollIntervalMs))},t.prototype.constrainScrollVel=function(){var t=this.scrollEl;this.scrollTopVel<0?t.scrollTop()<=0&&(this.scrollTopVel=0):this.scrollTopVel>0&&t.scrollTop()+t[0].clientHeight>=t[0].scrollHeight&&(this.scrollTopVel=0),this.scrollLeftVel<0?t.scrollLeft()<=0&&(this.scrollLeftVel=0):this.scrollLeftVel>0&&t.scrollLeft()+t[0].clientWidth>=t[0].scrollWidth&&(this.scrollLeftVel=0)},t.prototype.scrollIntervalFunc=function(){var t=this.scrollEl,e=this.scrollIntervalMs/1e3;this.scrollTopVel&&t.scrollTop(t.scrollTop()+this.scrollTopVel*e),this.scrollLeftVel&&t.scrollLeft(t.scrollLeft()+this.scrollLeftVel*e),this.constrainScrollVel(),this.scrollTopVel||this.scrollLeftVel||this.endAutoScroll()},t.prototype.endAutoScroll=function(){this.scrollIntervalId&&(clearInterval(this.scrollIntervalId),this.scrollIntervalId=null,this.handleScrollEnd())},t.prototype.handleDebouncedScroll=function(){this.scrollIntervalId||this.handleScrollEnd()},t.prototype.handleScrollEnd=function(){},t}();e.default=a,o.default.mixInto(a)},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(4),o=n(14),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.__extends(e,t),e.prototype.updateDayTable=function(){for(var t,e,n,i=this,r=i.view,o=r.calendar,s=o.msToUtcMoment(i.dateProfile.renderUnzonedRange.startMs,!0),a=o.msToUtcMoment(i.dateProfile.renderUnzonedRange.endMs,!0),l=-1,u=[],d=[];s.isBefore(a);)r.isHiddenDay(s)?u.push(l+.5):(l++,u.push(l),d.push(s.clone())),s.add(1,"days");if(this.breakOnWeeks){for(e=d[0].day(),t=1;t<d.length&&d[t].day()!==e;t++);n=Math.ceil(d.length/t)}else n=1,t=d.length;this.dayDates=d,this.dayIndices=u,this.daysPerRow=t,this.rowCnt=n,this.updateDayTableCols()},e.prototype.updateDayTableCols=function(){this.colCnt=this.computeColCnt(),this.colHeadFormat=this.opt("columnHeaderFormat")||this.opt("columnFormat")||this.computeColHeadFormat()},e.prototype.computeColCnt=function(){return this.daysPerRow},e.prototype.getCellDate=function(t,e){return this.dayDates[this.getCellDayIndex(t,e)].clone()},e.prototype.getCellRange=function(t,e){var n=this.getCellDate(t,e);return{start:n,end:n.clone().add(1,"days")}},e.prototype.getCellDayIndex=function(t,e){return t*this.daysPerRow+this.getColDayIndex(e)},e.prototype.getColDayIndex=function(t){return this.isRTL?this.colCnt-1-t:t},e.prototype.getDateDayIndex=function(t){var e=this.dayIndices,n=t.diff(this.dayDates[0],"days");return n<0?e[0]-1:n>=e.length?e[e.length-1]+1:e[n]},e.prototype.computeColHeadFormat=function(){return this.rowCnt>1||this.colCnt>10?"ddd":this.colCnt>1?this.opt("dayOfMonthFormat"):"dddd"},e.prototype.sliceRangeByRow=function(t){var e,n,i,r,o,s=this.daysPerRow,a=this.view.computeDayRange(t),l=this.getDateDayIndex(a.start),u=this.getDateDayIndex(a.end.clone().subtract(1,"days")),d=[];for(e=0;e<this.rowCnt;e++)n=e*s,i=n+s-1,r=Math.max(l,n),o=Math.min(u,i),r=Math.ceil(r),o=Math.floor(o),r<=o&&d.push({row:e,firstRowDayIndex:r-n,lastRowDayIndex:o-n,isStart:r===l,isEnd:o===u});return d},e.prototype.sliceRangeByDay=function(t){var e,n,i,r,o,s,a=this.daysPerRow,l=this.view.computeDayRange(t),u=this.getDateDayIndex(l.start),d=this.getDateDayIndex(l.end.clone().subtract(1,"days")),c=[];for(e=0;e<this.rowCnt;e++)for(n=e*a,i=n+a-1,r=n;r<=i;r++)o=Math.max(u,r),s=Math.min(d,r),o=Math.ceil(o),s=Math.floor(s),o<=s&&c.push({row:e,firstRowDayIndex:o-n,lastRowDayIndex:s-n,isStart:o===u,isEnd:s===d});return c},e.prototype.renderHeadHtml=function(){var t=this.view.calendar.theme;return'<div class="fc-row '+t.getClass("headerRow")+'"><table class="'+t.getClass("tableGrid")+'"><thead>'+this.renderHeadTrHtml()+"</thead></table></div>"},e.prototype.renderHeadIntroHtml=function(){return this.renderIntroHtml()},e.prototype.renderHeadTrHtml=function(){return"<tr>"+(this.isRTL?"":this.renderHeadIntroHtml())+this.renderHeadDateCellsHtml()+(this.isRTL?this.renderHeadIntroHtml():"")+"</tr>"},e.prototype.renderHeadDateCellsHtml=function(){var t,e,n=[];for(t=0;t<this.colCnt;t++)e=this.getCellDate(0,t),n.push(this.renderHeadDateCellHtml(e));return n.join("")},e.prototype.renderHeadDateCellHtml=function(t,e,n){var i,o=this,s=o.view,a=o.dateProfile.activeUnzonedRange.containsDate(t),l=["fc-day-header",s.calendar.theme.getClass("widgetHeader")];return i="function"==typeof o.opt("columnHeaderHtml")?o.opt("columnHeaderHtml")(t):"function"==typeof o.opt("columnHeaderText")?r.htmlEscape(o.opt("columnHeaderText")(t)):r.htmlEscape(t.format(o.colHeadFormat)),1===o.rowCnt?l=l.concat(o.getDayClasses(t,!0)):l.push("fc-"+r.dayIDs[t.day()]),'<th class="'+l.join(" ")+'"'+(1===(a&&o.rowCnt)?' data-date="'+t.format("YYYY-MM-DD")+'"':"")+(e>1?' colspan="'+e+'"':"")+(n?" "+n:"")+">"+(a?s.buildGotoAnchorHtml({date:t,forceOff:o.rowCnt>1||1===o.colCnt},i):i)+"</th>"},e.prototype.renderBgTrHtml=function(t){return"<tr>"+(this.isRTL?"":this.renderBgIntroHtml(t))+this.renderBgCellsHtml(t)+(this.isRTL?this.renderBgIntroHtml(t):"")+"</tr>"},e.prototype.renderBgIntroHtml=function(t){return this.renderIntroHtml()},e.prototype.renderBgCellsHtml=function(t){var e,n,i=[];for(e=0;e<this.colCnt;e++)n=this.getCellDate(t,e),i.push(this.renderBgCellHtml(n));return i.join("")},e.prototype.renderBgCellHtml=function(t,e){var n=this,i=n.view,r=n.dateProfile.activeUnzonedRange.containsDate(t),o=n.getDayClasses(t);return o.unshift("fc-day",i.calendar.theme.getClass("widgetContent")),'<td class="'+o.join(" ")+'"'+(r?' data-date="'+t.format("YYYY-MM-DD")+'"':"")+(e?" "+e:"")+"></td>"},e.prototype.renderIntroHtml=function(){},e.prototype.bookendCells=function(t){var e=this.renderIntroHtml();e&&(this.isRTL?t.append(e):t.prepend(e))},e}(o.default);e.default=s},function(t,e){Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){this.component=t,this.fillRenderer=e}return t.prototype.render=function(t){var e=this.component,n=e._getDateProfile().activeUnzonedRange,i=t.buildEventInstanceGroup(e.hasAllDayBusinessHours,n),r=i?e.eventRangesToEventFootprints(i.sliceRenderRanges(n)):[];this.renderEventFootprints(r)},t.prototype.renderEventFootprints=function(t){var e=this.component.eventFootprintsToSegs(t);this.renderSegs(e),this.segs=e},t.prototype.renderSegs=function(t){this.fillRenderer&&this.fillRenderer.renderSegs("businessHours",t,{getClasses:function(t){return["fc-nonbusiness","fc-bgevent"]}})},t.prototype.unrender=function(){this.fillRenderer&&this.fillRenderer.unrender("businessHours"),this.segs=null},t.prototype.getSegs=function(){return this.segs||[]},t}();e.default=n},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(3),r=n(4),o=function(){function t(t){this.fillSegTag="div",this.component=t,this.elsByFill={}}return t.prototype.renderFootprint=function(t,e,n){this.renderSegs(t,this.component.componentFootprintToSegs(e),n)},t.prototype.renderSegs=function(t,e,n){var i;return e=this.buildSegEls(t,e,n),i=this.attachSegEls(t,e),i&&this.reportEls(t,i),e},t.prototype.unrender=function(t){var e=this.elsByFill[t];e&&(e.remove(),delete this.elsByFill[t])},t.prototype.buildSegEls=function(t,e,n){var r,o=this,s="",a=[];if(e.length){for(r=0;r<e.length;r++)s+=this.buildSegHtml(t,e[r],n);i(s).each(function(t,r){var s=e[t],l=i(r);n.filterEl&&(l=n.filterEl(s,l)),l&&(l=i(l),l.is(o.fillSegTag)&&(s.el=l,a.push(s)))})}return a},t.prototype.buildSegHtml=function(t,e,n){var i=n.getClasses?n.getClasses(e):[],o=r.cssToStr(n.getCss?n.getCss(e):{});return"<"+this.fillSegTag+(i.length?' class="'+i.join(" ")+'"':"")+(o?' style="'+o+'"':"")+" />"},t.prototype.attachSegEls=function(t,e){},t.prototype.reportEls=function(t,e){this.elsByFill[t]?this.elsByFill[t]=this.elsByFill[t].add(e):this.elsByFill[t]=i(e)},t}();e.default=o},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(13),r=n(36),o=n(6),s=function(){function t(t,e){this.view=t._getView(),this.component=t,this.eventRenderer=e}return t.prototype.renderComponentFootprint=function(t){this.renderEventFootprints([this.fabricateEventFootprint(t)])},t.prototype.renderEventDraggingFootprints=function(t,e,n){this.renderEventFootprints(t,e,"fc-dragging",n?null:this.view.opt("dragOpacity"))},t.prototype.renderEventResizingFootprints=function(t,e,n){this.renderEventFootprints(t,e,"fc-resizing")},t.prototype.renderEventFootprints=function(t,e,n,i){var r,o=this.component.eventFootprintsToSegs(t),s="fc-helper "+(n||"");for(o=this.eventRenderer.renderFgSegEls(o),r=0;r<o.length;r++)o[r].el.addClass(s);if(null!=i)for(r=0;r<o.length;r++)o[r].el.css("opacity",i);this.helperEls=this.renderSegs(o,e)},t.prototype.renderSegs=function(t,e){},t.prototype.unrender=function(){this.helperEls&&(this.helperEls.remove(),this.helperEls=null)},t.prototype.fabricateEventFootprint=function(t){var e,n=this.view.calendar,s=n.footprintToDateProfile(t),a=new i.default(new o.default(n));return a.dateProfile=s,e=a.buildInstance(),new r.default(t,a,e)},t}();e.default=s},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(21),o=n(15),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.__extends(e,t),e.prototype.bindToEl=function(t){var e=this.component;e.bindSegHandlerToEl(t,"click",this.handleClick.bind(this)),e.bindSegHandlerToEl(t,"mouseenter",this.handleMouseover.bind(this)),e.bindSegHandlerToEl(t,"mouseleave",this.handleMouseout.bind(this))},e.prototype.handleClick=function(t,e){!1===this.component.publiclyTrigger("eventClick",{context:t.el[0],args:[t.footprint.getEventLegacy(),e,this.view]})&&e.preventDefault()},e.prototype.handleMouseover=function(t,e){r.default.get().shouldIgnoreMouse()||this.mousedOverSeg||(this.mousedOverSeg=t,this.view.isEventDefResizable(t.footprint.eventDef)&&t.el.addClass("fc-allow-mouse-resize"),this.component.publiclyTrigger("eventMouseover",{context:t.el[0],args:[t.footprint.getEventLegacy(),e,this.view]}))},e.prototype.handleMouseout=function(t,e){this.mousedOverSeg&&(this.mousedOverSeg=null,this.view.isEventDefResizable(t.footprint.eventDef)&&t.el.removeClass("fc-allow-mouse-resize"),this.component.publiclyTrigger("eventMouseout",{context:t.el[0],args:[t.footprint.getEventLegacy(),e||{},this.view]}))},e.prototype.end=function(){this.mousedOverSeg&&this.handleMouseout(this.mousedOverSeg)},e}(o.default);e.default=s},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(14),o=n(245),s=n(225),a=n(59),l=n(224),u=n(223),d=n(222),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.__extends(e,t),e}(r.default);e.default=c,c.prototype.dateClickingClass=o.default,c.prototype.dateSelectingClass=s.default,c.prototype.eventPointingClass=a.default,c.prototype.eventDraggingClass=l.default,c.prototype.eventResizingClass=u.default,c.prototype.externalDroppingClass=d.default},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(3),o=n(4),s=n(53),a=n(249),l=n(5),u=n(12),d=n(36),c=n(56),p=n(60),h=n(40),f=n(55),g=n(250),v=n(251),y=n(252),m=function(t){function e(e){var n=t.call(this,e)||this;return n.cellWeekNumbersVisible=!1,n.bottomCoordPadding=0,n.isRigid=!1,n.hasAllDayBusinessHours=!0,n}return i.__extends(e,t),e.prototype.componentFootprintToSegs=function(t){var e,n,i=this.sliceRangeByRow(t.unzonedRange);for(e=0;e<i.length;e++)n=i[e],this.isRTL?(n.leftCol=this.daysPerRow-1-n.lastRowDayIndex,n.rightCol=this.daysPerRow-1-n.firstRowDayIndex):(n.leftCol=n.firstRowDayIndex,n.rightCol=n.lastRowDayIndex);return i},e.prototype.renderDates=function(t){this.dateProfile=t,this.updateDayTable(),this.renderGrid()},e.prototype.unrenderDates=function(){this.removeSegPopover()},e.prototype.renderGrid=function(){var t,e,n=this.view,i=this.rowCnt,r=this.colCnt,o="";for(this.headContainerEl&&this.headContainerEl.html(this.renderHeadHtml()),t=0;t<i;t++)o+=this.renderDayRowHtml(t,this.isRigid);for(this.el.html(o),this.rowEls=this.el.find(".fc-row"),this.cellEls=this.el.find(".fc-day, .fc-disabled-day"),this.rowCoordCache=new s.default({els:this.rowEls,isVertical:!0}),this.colCoordCache=new s.default({els:this.cellEls.slice(0,this.colCnt),isHorizontal:!0}),t=0;t<i;t++)for(e=0;e<r;e++)this.publiclyTrigger("dayRender",{context:n,args:[this.getCellDate(t,e),this.getCellEl(t,e),n]})},e.prototype.renderDayRowHtml=function(t,e){var n=this.view.calendar.theme,i=["fc-row","fc-week",n.getClass("dayRow")];return e&&i.push("fc-rigid"),'<div class="'+i.join(" ")+'"><div class="fc-bg"><table class="'+n.getClass("tableGrid")+'">'+this.renderBgTrHtml(t)+'</table></div><div class="fc-content-skeleton"><table>'+(this.getIsNumbersVisible()?"<thead>"+this.renderNumberTrHtml(t)+"</thead>":"")+"</table></div></div>"},e.prototype.getIsNumbersVisible=function(){return this.getIsDayNumbersVisible()||this.cellWeekNumbersVisible},e.prototype.getIsDayNumbersVisible=function(){return this.rowCnt>1},e.prototype.renderNumberTrHtml=function(t){return"<tr>"+(this.isRTL?"":this.renderNumberIntroHtml(t))+this.renderNumberCellsHtml(t)+(this.isRTL?this.renderNumberIntroHtml(t):"")+"</tr>"},e.prototype.renderNumberIntroHtml=function(t){return this.renderIntroHtml()},e.prototype.renderNumberCellsHtml=function(t){var e,n,i=[];for(e=0;e<this.colCnt;e++)n=this.getCellDate(t,e),i.push(this.renderNumberCellHtml(n));return i.join("")},e.prototype.renderNumberCellHtml=function(t){var e,n,i=this.view,r="",o=this.dateProfile.activeUnzonedRange.containsDate(t),s=this.getIsDayNumbersVisible()&&o;return s||this.cellWeekNumbersVisible?(e=this.getDayClasses(t),e.unshift("fc-day-top"),this.cellWeekNumbersVisible&&(n="ISO"===t._locale._fullCalendar_weekCalc?1:t._locale.firstDayOfWeek()),r+='<td class="'+e.join(" ")+'"'+(o?' data-date="'+t.format()+'"':"")+">",this.cellWeekNumbersVisible&&t.day()===n&&(r+=i.buildGotoAnchorHtml({date:t,type:"week"},{class:"fc-week-number"},t.format("w"))),s&&(r+=i.buildGotoAnchorHtml(t,{class:"fc-day-number"},t.format("D"))),r+="</td>"):"<td/>"},e.prototype.prepareHits=function(){this.colCoordCache.build(),this.rowCoordCache.build(),this.rowCoordCache.bottoms[this.rowCnt-1]+=this.bottomCoordPadding},e.prototype.releaseHits=function(){this.colCoordCache.clear(),this.rowCoordCache.clear()},e.prototype.queryHit=function(t,e){if(this.colCoordCache.isLeftInBounds(t)&&this.rowCoordCache.isTopInBounds(e)){var n=this.colCoordCache.getHorizontalIndex(t),i=this.rowCoordCache.getVerticalIndex(e);if(null!=i&&null!=n)return this.getCellHit(i,n)}},e.prototype.getHitFootprint=function(t){var e=this.getCellRange(t.row,t.col);return new u.default(new l.default(e.start,e.end),!0)},e.prototype.getHitEl=function(t){return this.getCellEl(t.row,t.col)},e.prototype.getCellHit=function(t,e){return{row:t,col:e,component:this,left:this.colCoordCache.getLeftOffset(e),right:this.colCoordCache.getRightOffset(e),top:this.rowCoordCache.getTopOffset(t),bottom:this.rowCoordCache.getBottomOffset(t)}},e.prototype.getCellEl=function(t,e){return this.cellEls.eq(t*this.colCnt+e)},e.prototype.executeEventUnrender=function(){this.removeSegPopover(),t.prototype.executeEventUnrender.call(this)},e.prototype.getOwnEventSegs=function(){
-return t.prototype.getOwnEventSegs.call(this).concat(this.popoverSegs||[])},e.prototype.renderDrag=function(t,e,n){var i;for(i=0;i<t.length;i++)this.renderHighlight(t[i].componentFootprint);if(t.length&&e&&e.component!==this)return this.helperRenderer.renderEventDraggingFootprints(t,e,n),!0},e.prototype.unrenderDrag=function(){this.unrenderHighlight(),this.helperRenderer.unrender()},e.prototype.renderEventResize=function(t,e,n){var i;for(i=0;i<t.length;i++)this.renderHighlight(t[i].componentFootprint);this.helperRenderer.renderEventResizingFootprints(t,e,n)},e.prototype.unrenderEventResize=function(){this.unrenderHighlight(),this.helperRenderer.unrender()},e.prototype.removeSegPopover=function(){this.segPopover&&this.segPopover.hide()},e.prototype.limitRows=function(t){var e,n,i=this.eventRenderer.rowStructs||[];for(e=0;e<i.length;e++)this.unlimitRow(e),!1!==(n=!!t&&("number"==typeof t?t:this.computeRowLevelLimit(e)))&&this.limitRow(e,n)},e.prototype.computeRowLevelLimit=function(t){function e(t,e){o=Math.max(o,r(e).outerHeight())}var n,i,o,s=this.rowEls.eq(t),a=s.height(),l=this.eventRenderer.rowStructs[t].tbodyEl.children();for(n=0;n<l.length;n++)if(i=l.eq(n).removeClass("fc-limited"),o=0,i.find("> td > :first-child").each(e),i.position().top+o>a)return n;return!1},e.prototype.limitRow=function(t,e){var n,i,o,s,a,l,u,d,c,p,h,f,g,v,y,m=this,b=this.eventRenderer.rowStructs[t],w=[],D=0,E=function(n){for(;D<n;)l=m.getCellSegs(t,D,e),l.length&&(c=i[e-1][D],y=m.renderMoreLink(t,D,l),v=r("<div/>").append(y),c.append(v),w.push(v[0])),D++};if(e&&e<b.segLevels.length){for(n=b.segLevels[e-1],i=b.cellMatrix,o=b.tbodyEl.children().slice(e).addClass("fc-limited").get(),s=0;s<n.length;s++){for(a=n[s],E(a.leftCol),d=[],u=0;D<=a.rightCol;)l=this.getCellSegs(t,D,e),d.push(l),u+=l.length,D++;if(u){for(c=i[e-1][a.leftCol],p=c.attr("rowspan")||1,h=[],f=0;f<d.length;f++)g=r('<td class="fc-more-cell"/>').attr("rowspan",p),l=d[f],y=this.renderMoreLink(t,a.leftCol+f,[a].concat(l)),v=r("<div/>").append(y),g.append(v),h.push(g[0]),w.push(g[0]);c.addClass("fc-limited").after(r(h)),o.push(c[0])}}E(this.colCnt),b.moreEls=r(w),b.limitedEls=r(o)}},e.prototype.unlimitRow=function(t){var e=this.eventRenderer.rowStructs[t];e.moreEls&&(e.moreEls.remove(),e.moreEls=null),e.limitedEls&&(e.limitedEls.removeClass("fc-limited"),e.limitedEls=null)},e.prototype.renderMoreLink=function(t,e,n){var i=this,o=this.view;return r('<a class="fc-more"/>').text(this.getMoreLinkText(n.length)).on("click",function(s){var a=i.opt("eventLimitClick"),l=i.getCellDate(t,e),u=r(s.currentTarget),d=i.getCellEl(t,e),c=i.getCellSegs(t,e),p=i.resliceDaySegs(c,l),h=i.resliceDaySegs(n,l);"function"==typeof a&&(a=i.publiclyTrigger("eventLimitClick",{context:o,args:[{date:l.clone(),dayEl:d,moreEl:u,segs:p,hiddenSegs:h},s,o]})),"popover"===a?i.showSegPopover(t,e,u,p):"string"==typeof a&&o.calendar.zoomTo(l,a)})},e.prototype.showSegPopover=function(t,e,n,i){var r,o,s=this,l=this.view,u=n.parent();r=1===this.rowCnt?l.el:this.rowEls.eq(t),o={className:"fc-more-popover "+l.calendar.theme.getClass("popover"),content:this.renderSegPopoverContent(t,e,i),parentEl:l.el,top:r.offset().top,autoHide:!0,viewportConstrain:this.opt("popoverViewportConstrain"),hide:function(){s.popoverSegs&&s.triggerBeforeEventSegsDestroyed(s.popoverSegs),s.segPopover.removeElement(),s.segPopover=null,s.popoverSegs=null}},this.isRTL?o.right=u.offset().left+u.outerWidth()+1:o.left=u.offset().left-1,this.segPopover=new a.default(o),this.segPopover.show(),this.bindAllSegHandlersToEl(this.segPopover.el),this.triggerAfterEventSegsRendered(i)},e.prototype.renderSegPopoverContent=function(t,e,n){var i,s=this.view,a=s.calendar.theme,l=this.getCellDate(t,e).format(this.opt("dayPopoverFormat")),u=r('<div class="fc-header '+a.getClass("popoverHeader")+'"><span class="fc-close '+a.getIconClass("close")+'"></span><span class="fc-title">'+o.htmlEscape(l)+'</span><div class="fc-clear"/></div><div class="fc-body '+a.getClass("popoverContent")+'"><div class="fc-event-container"></div></div>'),d=u.find(".fc-event-container");for(n=this.eventRenderer.renderFgSegEls(n,!0),this.popoverSegs=n,i=0;i<n.length;i++)this.hitsNeeded(),n[i].hit=this.getCellHit(t,e),this.hitsNotNeeded(),d.append(n[i].el);return u},e.prototype.resliceDaySegs=function(t,e){var n,i,o,s=e.clone(),a=s.clone().add(1,"days"),c=new l.default(s,a),p=[];for(n=0;n<t.length;n++)i=t[n],(o=i.footprint.componentFootprint.unzonedRange.intersect(c))&&p.push(r.extend({},i,{footprint:new d.default(new u.default(o,i.footprint.componentFootprint.isAllDay),i.footprint.eventDef,i.footprint.eventInstance),isStart:i.isStart&&o.isStart,isEnd:i.isEnd&&o.isEnd}));return this.eventRenderer.sortEventSegs(p),p},e.prototype.getMoreLinkText=function(t){var e=this.opt("eventLimitText");return"function"==typeof e?e(t):"+"+t+" "+e},e.prototype.getCellSegs=function(t,e,n){for(var i,r=this.eventRenderer.rowStructs[t].segMatrix,o=n||0,s=[];o<r.length;)i=r[o][e],i&&s.push(i),o++;return s},e}(h.default);e.default=m,m.prototype.eventRendererClass=g.default,m.prototype.businessHourRendererClass=c.default,m.prototype.helperRendererClass=v.default,m.prototype.fillRendererClass=y.default,p.default.mixInto(m),f.default.mixInto(m)},function(t,e,n){function i(t){return function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.colWeekNumbersVisible=!1,e}return r.__extends(e,t),e.prototype.renderHeadIntroHtml=function(){var t=this.view;return this.colWeekNumbersVisible?'<th class="fc-week-number '+t.calendar.theme.getClass("widgetHeader")+'" '+t.weekNumberStyleAttr()+"><span>"+s.htmlEscape(this.opt("weekNumberTitle"))+"</span></th>":""},e.prototype.renderNumberIntroHtml=function(t){var e=this.view,n=this.getCellDate(t,0);return this.colWeekNumbersVisible?'<td class="fc-week-number" '+e.weekNumberStyleAttr()+">"+e.buildGotoAnchorHtml({date:n,type:"week",forceOff:1===this.colCnt},n.format("w"))+"</td>":""},e.prototype.renderBgIntroHtml=function(){var t=this.view;return this.colWeekNumbersVisible?'<td class="fc-week-number '+t.calendar.theme.getClass("widgetContent")+'" '+t.weekNumberStyleAttr()+"></td>":""},e.prototype.renderIntroHtml=function(){var t=this.view;return this.colWeekNumbersVisible?'<td class="fc-week-number" '+t.weekNumberStyleAttr()+"></td>":""},e.prototype.getIsNumbersVisible=function(){return d.default.prototype.getIsNumbersVisible.apply(this,arguments)||this.colWeekNumbersVisible},e}(t)}Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),o=n(3),s=n(4),a=n(39),l=n(41),u=n(228),d=n(61),c=function(t){function e(e,n){var i=t.call(this,e,n)||this;return i.dayGrid=i.instantiateDayGrid(),i.dayGrid.isRigid=i.hasRigidRows(),i.opt("weekNumbers")&&(i.opt("weekNumbersWithinDays")?(i.dayGrid.cellWeekNumbersVisible=!0,i.dayGrid.colWeekNumbersVisible=!1):(i.dayGrid.cellWeekNumbersVisible=!1,i.dayGrid.colWeekNumbersVisible=!0)),i.addChild(i.dayGrid),i.scroller=new a.default({overflowX:"hidden",overflowY:"auto"}),i}return r.__extends(e,t),e.prototype.instantiateDayGrid=function(){return new(i(this.dayGridClass))(this)},e.prototype.executeDateRender=function(e){this.dayGrid.breakOnWeeks=/year|month|week/.test(e.currentRangeUnit),t.prototype.executeDateRender.call(this,e)},e.prototype.renderSkeleton=function(){var t,e;this.el.addClass("fc-basic-view").html(this.renderSkeletonHtml()),this.scroller.render(),t=this.scroller.el.addClass("fc-day-grid-container"),e=o('<div class="fc-day-grid" />').appendTo(t),this.el.find(".fc-body > tr > td").append(t),this.dayGrid.headContainerEl=this.el.find(".fc-head-container"),this.dayGrid.setElement(e)},e.prototype.unrenderSkeleton=function(){this.dayGrid.removeElement(),this.scroller.destroy()},e.prototype.renderSkeletonHtml=function(){var t=this.calendar.theme;return'<table class="'+t.getClass("tableGrid")+'">'+(this.opt("columnHeader")?'<thead class="fc-head"><tr><td class="fc-head-container '+t.getClass("widgetHeader")+'"> </td></tr></thead>':"")+'<tbody class="fc-body"><tr><td class="'+t.getClass("widgetContent")+'"></td></tr></tbody></table>'},e.prototype.weekNumberStyleAttr=function(){return null!=this.weekNumberWidth?'style="width:'+this.weekNumberWidth+'px"':""},e.prototype.hasRigidRows=function(){var t=this.opt("eventLimit");return t&&"number"!=typeof t},e.prototype.updateSize=function(e,n,i){var r,o,a=this.opt("eventLimit"),l=this.dayGrid.headContainerEl.find(".fc-row");if(!this.dayGrid.rowEls)return void(n||(r=this.computeScrollerHeight(e),this.scroller.setHeight(r)));t.prototype.updateSize.call(this,e,n,i),this.dayGrid.colWeekNumbersVisible&&(this.weekNumberWidth=s.matchCellWidths(this.el.find(".fc-week-number"))),this.scroller.clear(),s.uncompensateScroll(l),this.dayGrid.removeSegPopover(),a&&"number"==typeof a&&this.dayGrid.limitRows(a),r=this.computeScrollerHeight(e),this.setGridHeight(r,n),a&&"number"!=typeof a&&this.dayGrid.limitRows(a),n||(this.scroller.setHeight(r),o=this.scroller.getScrollbarWidths(),(o.left||o.right)&&(s.compensateScroll(l,o),r=this.computeScrollerHeight(e),this.scroller.setHeight(r)),this.scroller.lockOverflow(o))},e.prototype.computeScrollerHeight=function(t){return t-s.subtractInnerElHeight(this.el,this.scroller.el)},e.prototype.setGridHeight=function(t,e){e?s.undistributeHeight(this.dayGrid.rowEls):s.distributeHeight(this.dayGrid.rowEls,t,!0)},e.prototype.computeInitialDateScroll=function(){return{top:0}},e.prototype.queryDateScroll=function(){return{top:this.scroller.getScrollTop()}},e.prototype.applyDateScroll=function(t){void 0!==t.top&&this.scroller.setScrollTop(t.top)},e}(l.default);e.default=c,c.prototype.dateProfileGeneratorClass=u.default,c.prototype.dayGridClass=d.default},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(t,e,n){function i(t,e,n){var i;for(i=0;i<t.length;i++)if(!e(t[i].eventInstance.toLegacy(),n?n.toLegacy():null))return!1;return!0}function r(t,e){var n,i,r,o,s=e.toLegacy();for(n=0;n<t.length;n++){if(i=t[n].eventInstance,r=i.def,!1===(o=r.getOverlap()))return!1;if("function"==typeof o&&!o(i.toLegacy(),s))return!1}return!0}Object.defineProperty(e,"__esModule",{value:!0});var o=n(5),s=n(12),a=n(49),l=n(6),u=n(35),d=function(){function t(t,e){this.eventManager=t,this._calendar=e}return t.prototype.opt=function(t){return this._calendar.opt(t)},t.prototype.isEventInstanceGroupAllowed=function(t){var e,n=t.getEventDef(),i=this.eventRangesToEventFootprints(t.getAllEventRanges()),r=this.getPeerEventInstances(n),o=r.map(u.eventInstanceToEventRange),s=this.eventRangesToEventFootprints(o),a=n.getConstraint(),l=n.getOverlap(),d=this.opt("eventAllow");for(e=0;e<i.length;e++)if(!this.isFootprintAllowed(i[e].componentFootprint,s,a,l,i[e].eventInstance))return!1;if(d)for(e=0;e<i.length;e++)if(!1===d(i[e].componentFootprint.toLegacy(this._calendar),i[e].getEventLegacy()))return!1;return!0},t.prototype.getPeerEventInstances=function(t){return this.eventManager.getEventInstancesWithoutId(t.id)},t.prototype.isSelectionFootprintAllowed=function(t){var e,n=this.eventManager.getEventInstances(),i=n.map(u.eventInstanceToEventRange),r=this.eventRangesToEventFootprints(i);return!!this.isFootprintAllowed(t,r,this.opt("selectConstraint"),this.opt("selectOverlap"))&&(!(e=this.opt("selectAllow"))||!1!==e(t.toLegacy(this._calendar)))},t.prototype.isFootprintAllowed=function(t,e,n,o,s){var a,l;if(null!=n&&(a=this.constraintValToFootprints(n,t.isAllDay),!this.isFootprintWithinConstraints(t,a)))return!1;if(l=this.collectOverlapEventFootprints(e,t),!1===o){if(l.length)return!1}else if("function"==typeof o&&!i(l,o,s))return!1;return!(s&&!r(l,s))},t.prototype.isFootprintWithinConstraints=function(t,e){var n;for(n=0;n<e.length;n++)if(this.footprintContainsFootprint(e[n],t))return!0;return!1},t.prototype.constraintValToFootprints=function(t,e){var n;return"businessHours"===t?this.buildCurrentBusinessFootprints(e):"object"==typeof t?(n=this.parseEventDefToInstances(t),n?this.eventInstancesToFootprints(n):this.parseFootprints(t)):null!=t?(n=this.eventManager.getEventInstancesWithId(t),this.eventInstancesToFootprints(n)):void 0},t.prototype.buildCurrentBusinessFootprints=function(t){var e=this._calendar.view,n=e.get("businessHourGenerator"),i=e.dateProfile.activeUnzonedRange,r=n.buildEventInstanceGroup(t,i);return r?this.eventInstancesToFootprints(r.eventInstances):[]},t.prototype.eventInstancesToFootprints=function(t){var e=t.map(u.eventInstanceToEventRange);return this.eventRangesToEventFootprints(e).map(u.eventFootprintToComponentFootprint)},t.prototype.collectOverlapEventFootprints=function(t,e){var n,i=[];for(n=0;n<t.length;n++)this.footprintsIntersect(e,t[n].componentFootprint)&&i.push(t[n]);return i},t.prototype.parseEventDefToInstances=function(t){var e=this.eventManager,n=a.default.parse(t,new l.default(this._calendar));return!!n&&n.buildInstances(e.currentPeriod.unzonedRange)},t.prototype.eventRangesToEventFootprints=function(t){var e,n=[];for(e=0;e<t.length;e++)n.push.apply(n,this.eventRangeToEventFootprints(t[e]));return n},t.prototype.eventRangeToEventFootprints=function(t){return[u.eventRangeToEventFootprint(t)]},t.prototype.parseFootprints=function(t){var e,n;return t.start&&(e=this._calendar.moment(t.start),e.isValid()||(e=null)),t.end&&(n=this._calendar.moment(t.end),n.isValid()||(n=null)),[new s.default(new o.default(e,n),e&&!e.hasTime()||n&&!n.hasTime())]},t.prototype.footprintContainsFootprint=function(t,e){return t.unzonedRange.containsRange(e.unzonedRange)},t.prototype.footprintsIntersect=function(t,e){return t.unzonedRange.intersectsWith(e.unzonedRange)},t}();e.default=d},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(4),o=n(14),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.__extends(e,t),e.defineStandardProps=function(t){var e=this.prototype;e.hasOwnProperty("standardPropMap")||(e.standardPropMap=Object.create(e.standardPropMap)),r.copyOwnProps(t,e.standardPropMap)},e.copyVerbatimStandardProps=function(t,e){var n,i=this.prototype.standardPropMap;for(n in i)null!=t[n]&&!0===i[n]&&(e[n]=t[n])},e.prototype.applyProps=function(t){var e,n=this.standardPropMap,i={},r={};for(e in t)!0===n[e]?this[e]=t[e]:!1===n[e]?i[e]=t[e]:r[e]=t[e];return this.applyMiscProps(r),this.applyManualStandardProps(i)},e.prototype.applyManualStandardProps=function(t){return!0},e.prototype.applyMiscProps=function(t){},e.prototype.isStandardProp=function(t){return t in this.standardPropMap},e}(o.default);e.default=s,s.prototype.standardPropMap={}},function(t,e){Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){this.def=t,this.dateProfile=e}return t.prototype.toLegacy=function(){var t=this.dateProfile,e=this.def.toLegacy();return e.start=t.start.clone(),e.end=t.end?t.end.clone():null,e},t}();e.default=n},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(3),o=n(0),s=n(34),a=n(209),l=n(17),u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.__extends(e,t),e.prototype.isAllDay=function(){return!this.startTime&&!this.endTime},e.prototype.buildInstances=function(t){for(var e,n,i,r=this.source.calendar,o=t.getStart(),s=t.getEnd(),u=[];o.isBefore(s);)this.dowHash&&!this.dowHash[o.day()]||(e=r.applyTimezone(o),n=e.clone(),i=null,this.startTime?n.time(this.startTime):n.stripTime(),this.endTime&&(i=e.clone().time(this.endTime)),u.push(new a.default(this,new l.default(n,i,r)))),o.add(1,"days");return u},e.prototype.setDow=function(t){this.dowHash||(this.dowHash={});for(var e=0;e<t.length;e++)this.dowHash[t[e]]=!0},e.prototype.clone=function(){var e=t.prototype.clone.call(this);return e.startTime&&(e.startTime=o.duration(this.startTime)),e.endTime&&(e.endTime=o.duration(this.endTime)),this.dowHash&&(e.dowHash=r.extend({},this.dowHash)),e},e}(s.default);e.default=u,u.prototype.applyProps=function(t){var e=s.default.prototype.applyProps.call(this,t);return t.start&&(this.startTime=o.duration(t.start)),t.end&&(this.endTime=o.duration(t.end)),t.dow&&this.setDow(t.dow),e},u.defineStandardProps({start:!1,end:!1,dow:!1})},function(t,e){Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e,n){this.unzonedRange=t,this.eventDef=e,n&&(this.eventInstance=n)}return t}();e.default=n},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(3),r=n(35),o=n(18),s=n(210),a=n(6),l={start:"09:00",end:"17:00",dow:[1,2,3,4,5],rendering:"inverse-background"},u=function(){function t(t,e){this.rawComplexDef=t,this.calendar=e}return t.prototype.buildEventInstanceGroup=function(t,e){var n,i=this.buildEventDefs(t);if(i.length)return n=new o.default(r.eventDefsToEventInstances(i,e)),n.explicitEventDef=i[0],n},t.prototype.buildEventDefs=function(t){var e,n=this.rawComplexDef,r=[],o=!1,s=[];for(!0===n?r=[{}]:i.isPlainObject(n)?r=[n]:i.isArray(n)&&(r=n,o=!0),e=0;e<r.length;e++)o&&!r[e].dow||s.push(this.buildEventDef(t,r[e]));return s},t.prototype.buildEventDef=function(t,e){var n=i.extend({},l,e);return t&&(n.start=null,n.end=null),s.default.parse(n,new a.default(this.calendar))},t}();e.default=u},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(19),o=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.__extends(e,t),e}(r.default);e.default=o,o.prototype.classes={widget:"fc-unthemed",widgetHeader:"fc-widget-header",widgetContent:"fc-widget-content",buttonGroup:"fc-button-group",button:"fc-button",cornerLeft:"fc-corner-left",cornerRight:"fc-corner-right",stateDefault:"fc-state-default",stateActive:"fc-state-active",stateDisabled:"fc-state-disabled",stateHover:"fc-state-hover",stateDown:"fc-state-down",popoverHeader:"fc-widget-header",popoverContent:"fc-widget-content",headerRow:"fc-widget-header",dayRow:"fc-widget-content",listView:"fc-widget-content"},o.prototype.baseIconClass="fc-icon",o.prototype.iconClasses={close:"fc-icon-x",prev:"fc-icon-left-single-arrow",next:"fc-icon-right-single-arrow",prevYear:"fc-icon-left-double-arrow",nextYear:"fc-icon-right-double-arrow"},o.prototype.iconOverrideOption="buttonIcons",o.prototype.iconOverrideCustomButtonOption="icon",o.prototype.iconOverridePrefix="fc-icon-"},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(19),o=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.__extends(e,t),e}(r.default);e.default=o,o.prototype.classes={widget:"ui-widget",widgetHeader:"ui-widget-header",widgetContent:"ui-widget-content",buttonGroup:"fc-button-group",button:"ui-button",cornerLeft:"ui-corner-left",cornerRight:"ui-corner-right",stateDefault:"ui-state-default",stateActive:"ui-state-active",stateDisabled:"ui-state-disabled",stateHover:"ui-state-hover",stateDown:"ui-state-down",today:"ui-state-highlight",popoverHeader:"ui-widget-header",popoverContent:"ui-widget-content",headerRow:"ui-widget-header",dayRow:"ui-widget-content",listView:"ui-widget-content"},o.prototype.baseIconClass="ui-icon",o.prototype.iconClasses={close:"ui-icon-closethick",prev:"ui-icon-circle-triangle-w",next:"ui-icon-circle-triangle-e",prevYear:"ui-icon-seek-prev",nextYear:"ui-icon-seek-next"},o.prototype.iconOverrideOption="themeButtonIcons",o.prototype.iconOverrideCustomButtonOption="themeIcon",o.prototype.iconOverridePrefix="ui-icon-"},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(3),o=n(20),s=n(6),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.__extends(e,t),e.parse=function(t,e){var n;return r.isFunction(t.events)?n=t:r.isFunction(t)&&(n={events:t}),!!n&&s.default.parse.call(this,n,e)},e.prototype.fetch=function(t,e,n){var i=this;return this.calendar.pushLoading(),o.default.construct(function(r){i.func.call(i.calendar,t.clone(),e.clone(),n,function(t){i.calendar.popLoading(),r(i.parseEventDefs(t))})})},e.prototype.getPrimitive=function(){return this.func},e.prototype.applyManualStandardProps=function(e){var n=t.prototype.applyManualStandardProps.call(this,e);return this.func=e.events,n},e}(s.default);e.default=a,a.defineStandardProps({events:!1})},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(3),o=n(4),s=n(20),a=n(6),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.__extends(e,t),e.parse=function(t,e){var n;return"string"==typeof t.url?n=t:"string"==typeof t&&(n={url:t}),!!n&&a.default.parse.call(this,n,e)},e.prototype.fetch=function(t,n,i){var a=this,l=this.ajaxSettings,u=l.success,d=l.error,c=this.buildRequestParams(t,n,i);return this.calendar.pushLoading(),s.default.construct(function(t,n){r.ajax(r.extend({},e.AJAX_DEFAULTS,l,{url:a.url,data:c,success:function(e,i,s){var l;a.calendar.popLoading(),e?(l=o.applyAll(u,a,[e,i,s]),r.isArray(l)&&(e=l),t(a.parseEventDefs(e))):n()},error:function(t,e,i){a.calendar.popLoading(),o.applyAll(d,a,[t,e,i]),n()}}))})},e.prototype.buildRequestParams=function(t,e,n){var i,o,s,a,l=this.calendar,u=this.ajaxSettings,d={};return i=this.startParam,null==i&&(i=l.opt("startParam")),o=this.endParam,null==o&&(o=l.opt("endParam")),s=this.timezoneParam,null==s&&(s=l.opt("timezoneParam")),a=r.isFunction(u.data)?u.data():u.data||{},r.extend(d,a),d[i]=t.format(),d[o]=e.format(),n&&"local"!==n&&(d[s]=n),d},e.prototype.getPrimitive=function(){return this.url},e.prototype.applyMiscProps=function(t){this.ajaxSettings=t},e.AJAX_DEFAULTS={dataType:"json",cache:!1},e}(a.default);e.default=l,l.defineStandardProps({url:!0,startParam:!0,endParam:!0,timezoneParam:!0})},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(11),r=function(){function t(){this.q=[],this.isPaused=!1,this.isRunning=!1}return t.prototype.queue=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];this.q.push.apply(this.q,t),this.tryStart()},t.prototype.pause=function(){this.isPaused=!0},t.prototype.resume=function(){this.isPaused=!1,this.tryStart()},t.prototype.getIsIdle=function(){return!this.isRunning&&!this.isPaused},t.prototype.tryStart=function(){!this.isRunning&&this.canRunNext()&&(this.isRunning=!0,this.trigger("start"),this.runRemaining())},t.prototype.canRunNext=function(){return!this.isPaused&&this.q.length},t.prototype.runRemaining=function(){var t,e,n=this;do{if(t=this.q.shift(),(e=this.runTask(t))&&e.then)return void e.then(function(){n.canRunNext()&&n.runRemaining()})}while(this.canRunNext());this.trigger("stop"),this.isRunning=!1,this.tryStart()},t.prototype.runTask=function(t){return t()},t}();e.default=r,i.default.mixInto(r)},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(217),o=function(t){function e(e){var n=t.call(this)||this;return n.waitsByNamespace=e||{},n}return i.__extends(e,t),e.prototype.queue=function(t,e,n){var i,r={func:t,namespace:e,type:n};e&&(i=this.waitsByNamespace[e]),this.waitNamespace&&(e===this.waitNamespace&&null!=i?this.delayWait(i):(this.clearWait(),this.tryStart())),this.compoundTask(r)&&(this.waitNamespace||null==i?this.tryStart():this.startWait(e,i))},e.prototype.startWait=function(t,e){this.waitNamespace=t,this.spawnWait(e)},e.prototype.delayWait=function(t){clearTimeout(this.waitId),this.spawnWait(t)},e.prototype.spawnWait=function(t){var e=this;this.waitId=setTimeout(function(){e.waitNamespace=null,e.tryStart()},t)},e.prototype.clearWait=function(){this.waitNamespace&&(clearTimeout(this.waitId),this.waitId=null,this.waitNamespace=null)},e.prototype.canRunNext=function(){if(!t.prototype.canRunNext.call(this))return!1;if(this.waitNamespace){for(var e=this.q,n=0;n<e.length;n++)if(e[n].namespace!==this.waitNamespace)return!0;return!1}return!0},e.prototype.runTask=function(t){t.func()},e.prototype.compoundTask=function(t){var e,n,i=this.q,r=!0;if(t.namespace&&"destroy"===t.type)for(e=i.length-1;e>=0;e--)switch(n=i[e],n.type){case"init":r=!1;case"add":case"remove":i.splice(e,1)}return r&&i.push(t),r},e}(r.default);e.default=o},function(t,e,n){function i(t){var e,n,i,r=[];for(e in t)for(n=t[e].eventInstances,i=0;i<n.length;i++)r.push(n[i].toLegacy());return r}Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),o=n(3),s=n(0),a=n(4),l=n(10),u=n(47),d=n(237),c=n(35),p=function(t){function e(n,i){var r=t.call(this)||this;return r.isRTL=!1,r.hitsNeededDepth=0,r.hasAllDayBusinessHours=!1,r.isDatesRendered=!1,n&&(r.view=n),i&&(r.options=i),r.uid=String(e.guid++),r.childrenByUid={},r.nextDayThreshold=s.duration(r.opt("nextDayThreshold")),r.isRTL=r.opt("isRTL"),r.fillRendererClass&&(r.fillRenderer=new r.fillRendererClass(r)),r.eventRendererClass&&(r.eventRenderer=new r.eventRendererClass(r,r.fillRenderer)),r.helperRendererClass&&r.eventRenderer&&(r.helperRenderer=new r.helperRendererClass(r,r.eventRenderer)),r.businessHourRendererClass&&r.fillRenderer&&(r.businessHourRenderer=new r.businessHourRendererClass(r,r.fillRenderer)),r}return r.__extends(e,t),e.prototype.addChild=function(t){return!this.childrenByUid[t.uid]&&(this.childrenByUid[t.uid]=t,!0)},e.prototype.removeChild=function(t){return!!this.childrenByUid[t.uid]&&(delete this.childrenByUid[t.uid],!0)},e.prototype.updateSize=function(t,e,n){this.callChildren("updateSize",arguments)},e.prototype.opt=function(t){return this._getView().opt(t)},e.prototype.publiclyTrigger=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=this._getCalendar();return n.publiclyTrigger.apply(n,t)},e.prototype.hasPublicHandlers=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=this._getCalendar();return n.hasPublicHandlers.apply(n,t)},e.prototype.executeDateRender=function(t){this.dateProfile=t,this.renderDates(t),this.isDatesRendered=!0,this.callChildren("executeDateRender",arguments)},e.prototype.executeDateUnrender=function(){this.callChildren("executeDateUnrender",arguments),this.dateProfile=null,this.unrenderDates(),this.isDatesRendered=!1},e.prototype.renderDates=function(t){},e.prototype.unrenderDates=function(){},e.prototype.getNowIndicatorUnit=function(){},e.prototype.renderNowIndicator=function(t){this.callChildren("renderNowIndicator",arguments)},e.prototype.unrenderNowIndicator=function(){this.callChildren("unrenderNowIndicator",arguments)},e.prototype.renderBusinessHours=function(t){this.businessHourRenderer&&this.businessHourRenderer.render(t),this.callChildren("renderBusinessHours",arguments)},e.prototype.unrenderBusinessHours=function(){this.callChildren("unrenderBusinessHours",arguments),this.businessHourRenderer&&this.businessHourRenderer.unrender()},e.prototype.executeEventRender=function(t){this.eventRenderer?(this.eventRenderer.rangeUpdated(),this.eventRenderer.render(t)):this.renderEvents&&this.renderEvents(i(t)),this.callChildren("executeEventRender",arguments)},e.prototype.executeEventUnrender=function(){this.callChildren("executeEventUnrender",arguments),this.eventRenderer?this.eventRenderer.unrender():this.destroyEvents&&this.destroyEvents()},e.prototype.getBusinessHourSegs=function(){var t=this.getOwnBusinessHourSegs();return this.iterChildren(function(e){t.push.apply(t,e.getBusinessHourSegs())}),t},e.prototype.getOwnBusinessHourSegs=function(){return this.businessHourRenderer?this.businessHourRenderer.getSegs():[]},e.prototype.getEventSegs=function(){var t=this.getOwnEventSegs();return this.iterChildren(function(e){t.push.apply(t,e.getEventSegs())}),t},e.prototype.getOwnEventSegs=function(){return this.eventRenderer?this.eventRenderer.getSegs():[]},e.prototype.triggerAfterEventsRendered=function(){this.triggerAfterEventSegsRendered(this.getEventSegs()),this.publiclyTrigger("eventAfterAllRender",{context:this,args:[this]})},e.prototype.triggerAfterEventSegsRendered=function(t){var e=this;this.hasPublicHandlers("eventAfterRender")&&t.forEach(function(t){var n;t.el&&(n=t.footprint.getEventLegacy(),e.publiclyTrigger("eventAfterRender",{context:n,args:[n,t.el,e]}))})},e.prototype.triggerBeforeEventsDestroyed=function(){this.triggerBeforeEventSegsDestroyed(this.getEventSegs())},e.prototype.triggerBeforeEventSegsDestroyed=function(t){var e=this;this.hasPublicHandlers("eventDestroy")&&t.forEach(function(t){var n;t.el&&(n=t.footprint.getEventLegacy(),e.publiclyTrigger("eventDestroy",{context:n,args:[n,t.el,e]}))})},e.prototype.showEventsWithId=function(t){this.getEventSegs().forEach(function(e){e.footprint.eventDef.id===t&&e.el&&e.el.css("visibility","")}),this.callChildren("showEventsWithId",arguments)},e.prototype.hideEventsWithId=function(t){this.getEventSegs().forEach(function(e){e.footprint.eventDef.id===t&&e.el&&e.el.css("visibility","hidden")}),this.callChildren("hideEventsWithId",arguments)},e.prototype.renderDrag=function(t,e,n){var i=!1;return this.iterChildren(function(r){r.renderDrag(t,e,n)&&(i=!0)}),i},e.prototype.unrenderDrag=function(){this.callChildren("unrenderDrag",arguments)},e.prototype.renderEventResize=function(t,e,n){this.callChildren("renderEventResize",arguments)},e.prototype.unrenderEventResize=function(){this.callChildren("unrenderEventResize",arguments)},e.prototype.renderSelectionFootprint=function(t){this.renderHighlight(t),this.callChildren("renderSelectionFootprint",arguments)},e.prototype.unrenderSelection=function(){this.unrenderHighlight(),this.callChildren("unrenderSelection",arguments)},e.prototype.renderHighlight=function(t){this.fillRenderer&&this.fillRenderer.renderFootprint("highlight",t,{getClasses:function(){return["fc-highlight"]}}),this.callChildren("renderHighlight",arguments)},e.prototype.unrenderHighlight=function(){this.fillRenderer&&this.fillRenderer.unrender("highlight"),this.callChildren("unrenderHighlight",arguments)},e.prototype.hitsNeeded=function(){this.hitsNeededDepth++||this.prepareHits(),this.callChildren("hitsNeeded",arguments)},e.prototype.hitsNotNeeded=function(){this.hitsNeededDepth&&!--this.hitsNeededDepth&&this.releaseHits(),this.callChildren("hitsNotNeeded",arguments)},e.prototype.prepareHits=function(){},e.prototype.releaseHits=function(){},e.prototype.queryHit=function(t,e){var n,i,r=this.childrenByUid;for(n in r)if(i=r[n].queryHit(t,e))break;return i},e.prototype.getSafeHitFootprint=function(t){var e=this.getHitFootprint(t);return this.dateProfile.activeUnzonedRange.containsRange(e.unzonedRange)?e:null},e.prototype.getHitFootprint=function(t){},e.prototype.getHitEl=function(t){},e.prototype.eventRangesToEventFootprints=function(t){var e,n=[];for(e=0;e<t.length;e++)n.push.apply(n,this.eventRangeToEventFootprints(t[e]));return n},e.prototype.eventRangeToEventFootprints=function(t){return[c.eventRangeToEventFootprint(t)]},e.prototype.eventFootprintsToSegs=function(t){var e,n=[];for(e=0;e<t.length;e++)n.push.apply(n,this.eventFootprintToSegs(t[e]));return n},e.prototype.eventFootprintToSegs=function(t){var e,n,i,r=t.componentFootprint.unzonedRange;for(e=this.componentFootprintToSegs(t.componentFootprint),n=0;n<e.length;n++)i=e[n],r.isStart||(i.isStart=!1),r.isEnd||(i.isEnd=!1),i.footprint=t;return e},e.prototype.componentFootprintToSegs=function(t){return[]},e.prototype.callChildren=function(t,e){this.iterChildren(function(n){n[t].apply(n,e)})},e.prototype.iterChildren=function(t){var e,n=this.childrenByUid;for(e in n)t(n[e])},e.prototype._getCalendar=function(){var t=this;return t.calendar||t.view.calendar},e.prototype._getView=function(){return this.view},e.prototype._getDateProfile=function(){return this._getView().get("dateProfile")},e.prototype.buildGotoAnchorHtml=function(t,e,n){var i,r,s,u;return o.isPlainObject(t)?(i=t.date,r=t.type,s=t.forceOff):i=t,i=l.default(i),u={date:i.format("YYYY-MM-DD"),type:r||"day"},"string"==typeof e&&(n=e,e=null),e=e?" "+a.attrsToStr(e):"",n=n||"",!s&&this.opt("navLinks")?"<a"+e+' data-goto="'+a.htmlEscape(JSON.stringify(u))+'">'+n+"</a>":"<span"+e+">"+n+"</span>"},e.prototype.getAllDayHtml=function(){return this.opt("allDayHtml")||a.htmlEscape(this.opt("allDayText"))},e.prototype.getDayClasses=function(t,e){var n,i=this._getView(),r=[]
-;return this.dateProfile.activeUnzonedRange.containsDate(t)?(r.push("fc-"+a.dayIDs[t.day()]),i.isDateInOtherMonth(t,this.dateProfile)&&r.push("fc-other-month"),n=i.calendar.getNow(),t.isSame(n,"day")?(r.push("fc-today"),!0!==e&&r.push(i.calendar.theme.getClass("today"))):t<n?r.push("fc-past"):r.push("fc-future")):r.push("fc-disabled-day"),r},e.prototype.formatRange=function(t,e,n,i){var r=t.end;return e&&(r=r.clone().subtract(1)),u.formatRange(t.start,r,n,i,this.isRTL)},e.prototype.currentRangeAs=function(t){return this._getDateProfile().currentUnzonedRange.as(t)},e.prototype.computeDayRange=function(t){var e=this._getCalendar(),n=e.msToUtcMoment(t.startMs,!0),i=e.msToUtcMoment(t.endMs),r=+i.time(),o=i.clone().stripTime();return r&&r>=this.nextDayThreshold&&o.add(1,"days"),o<=n&&(o=n.clone().add(1,"days")),{start:n,end:o}},e.prototype.isMultiDayRange=function(t){var e=this.computeDayRange(t);return e.end.diff(e.start,"days")>1},e.guid=0,e}(d.default);e.default=p},function(t,e,n){function i(t,e){return null==e?t:r.isFunction(e)?t.filter(e):(e+="",t.filter(function(t){return t.id==e||t._id===e}))}Object.defineProperty(e,"__esModule",{value:!0});var r=n(3),o=n(0),s=n(4),a=n(32),l=n(238),u=n(21),d=n(11),c=n(7),p=n(239),h=n(240),f=n(241),g=n(207),v=n(31),y=n(10),m=n(5),b=n(12),w=n(17),D=n(242),E=n(212),S=n(38),C=n(49),R=n(13),T=n(37),M=n(6),I=n(51),H=function(){function t(t,e){this.loadingLevel=0,this.ignoreUpdateViewSize=0,this.freezeContentHeightDepth=0,u.default.needed(),this.el=t,this.viewsByType={},this.optionsManager=new h.default(this,e),this.viewSpecManager=new f.default(this.optionsManager,this),this.initMomentInternals(),this.initCurrentDate(),this.initEventManager(),this.constraints=new g.default(this.eventManager,this),this.constructed()}return t.prototype.constructed=function(){},t.prototype.getView=function(){return this.view},t.prototype.publiclyTrigger=function(t,e){var n,i,o=this.opt(t);if(r.isPlainObject(e)?(n=e.context,i=e.args):r.isArray(e)&&(i=e),null==n&&(n=this.el[0]),i||(i=[]),this.triggerWith(t,n,i),o)return o.apply(n,i)},t.prototype.hasPublicHandlers=function(t){return this.hasHandlers(t)||this.opt(t)},t.prototype.option=function(t,e){var n;if("string"==typeof t){if(void 0===e)return this.optionsManager.get(t);n={},n[t]=e,this.optionsManager.add(n)}else"object"==typeof t&&this.optionsManager.add(t)},t.prototype.opt=function(t){return this.optionsManager.get(t)},t.prototype.instantiateView=function(t){var e=this.viewSpecManager.getViewSpec(t);if(!e)throw new Error('View type "'+t+'" is not valid');return new e.class(this,e)},t.prototype.isValidViewType=function(t){return Boolean(this.viewSpecManager.getViewSpec(t))},t.prototype.changeView=function(t,e){e&&(e.start&&e.end?this.optionsManager.recordOverrides({visibleRange:e}):this.currentDate=this.moment(e).stripZone()),this.renderView(t)},t.prototype.zoomTo=function(t,e){var n;e=e||"day",n=this.viewSpecManager.getViewSpec(e)||this.viewSpecManager.getUnitViewSpec(e),this.currentDate=t.clone(),this.renderView(n?n.type:null)},t.prototype.initCurrentDate=function(){var t=this.opt("defaultDate");this.currentDate=null!=t?this.moment(t).stripZone():this.getNow()},t.prototype.prev=function(){var t=this.view,e=t.dateProfileGenerator.buildPrev(t.get("dateProfile"));e.isValid&&(this.currentDate=e.date,this.renderView())},t.prototype.next=function(){var t=this.view,e=t.dateProfileGenerator.buildNext(t.get("dateProfile"));e.isValid&&(this.currentDate=e.date,this.renderView())},t.prototype.prevYear=function(){this.currentDate.add(-1,"years"),this.renderView()},t.prototype.nextYear=function(){this.currentDate.add(1,"years"),this.renderView()},t.prototype.today=function(){this.currentDate=this.getNow(),this.renderView()},t.prototype.gotoDate=function(t){this.currentDate=this.moment(t).stripZone(),this.renderView()},t.prototype.incrementDate=function(t){this.currentDate.add(o.duration(t)),this.renderView()},t.prototype.getDate=function(){return this.applyTimezone(this.currentDate)},t.prototype.pushLoading=function(){this.loadingLevel++||this.publiclyTrigger("loading",[!0,this.view])},t.prototype.popLoading=function(){--this.loadingLevel||this.publiclyTrigger("loading",[!1,this.view])},t.prototype.render=function(){this.contentEl?this.elementVisible()&&(this.calcSize(),this.updateViewSize()):this.initialRender()},t.prototype.initialRender=function(){var t=this,e=this.el;e.addClass("fc"),e.on("click.fc","a[data-goto]",function(e){var n=r(e.currentTarget),i=n.data("goto"),o=t.moment(i.date),a=i.type,l=t.view.opt("navLink"+s.capitaliseFirstLetter(a)+"Click");"function"==typeof l?l(o,e):("string"==typeof l&&(a=l),t.zoomTo(o,a))}),this.optionsManager.watch("settingTheme",["?theme","?themeSystem"],function(n){var i=I.getThemeSystemClass(n.themeSystem||n.theme),r=new i(t.optionsManager),o=r.getClass("widget");t.theme=r,o&&e.addClass(o)},function(){var n=t.theme.getClass("widget");t.theme=null,n&&e.removeClass(n)}),this.optionsManager.watch("settingBusinessHourGenerator",["?businessHours"],function(e){t.businessHourGenerator=new E.default(e.businessHours,t),t.view&&t.view.set("businessHourGenerator",t.businessHourGenerator)},function(){t.businessHourGenerator=null}),this.optionsManager.watch("applyingDirClasses",["?isRTL","?locale"],function(t){e.toggleClass("fc-ltr",!t.isRTL),e.toggleClass("fc-rtl",t.isRTL)}),this.contentEl=r("<div class='fc-view-container'/>").prependTo(e),this.initToolbars(),this.renderHeader(),this.renderFooter(),this.renderView(this.opt("defaultView")),this.opt("handleWindowResize")&&r(window).resize(this.windowResizeProxy=s.debounce(this.windowResize.bind(this),this.opt("windowResizeDelay")))},t.prototype.destroy=function(){this.view&&this.clearView(),this.toolbarsManager.proxyCall("removeElement"),this.contentEl.remove(),this.el.removeClass("fc fc-ltr fc-rtl"),this.optionsManager.unwatch("settingTheme"),this.optionsManager.unwatch("settingBusinessHourGenerator"),this.el.off(".fc"),this.windowResizeProxy&&(r(window).unbind("resize",this.windowResizeProxy),this.windowResizeProxy=null),u.default.unneeded()},t.prototype.elementVisible=function(){return this.el.is(":visible")},t.prototype.bindViewHandlers=function(t){var e=this;t.watch("titleForCalendar",["title"],function(n){t===e.view&&e.setToolbarsTitle(n.title)}),t.watch("dateProfileForCalendar",["dateProfile"],function(n){t===e.view&&(e.currentDate=n.dateProfile.date,e.updateToolbarButtons(n.dateProfile))})},t.prototype.unbindViewHandlers=function(t){t.unwatch("titleForCalendar"),t.unwatch("dateProfileForCalendar")},t.prototype.renderView=function(t){var e,n=this.view;this.freezeContentHeight(),n&&t&&n.type!==t&&this.clearView(),!this.view&&t&&(e=this.view=this.viewsByType[t]||(this.viewsByType[t]=this.instantiateView(t)),this.bindViewHandlers(e),e.startBatchRender(),e.setElement(r("<div class='fc-view fc-"+t+"-view' />").appendTo(this.contentEl)),this.toolbarsManager.proxyCall("activateButton",t)),this.view&&(this.view.get("businessHourGenerator")!==this.businessHourGenerator&&this.view.set("businessHourGenerator",this.businessHourGenerator),this.view.setDate(this.currentDate),e&&e.stopBatchRender()),this.thawContentHeight()},t.prototype.clearView=function(){var t=this.view;this.toolbarsManager.proxyCall("deactivateButton",t.type),this.unbindViewHandlers(t),t.removeElement(),t.unsetDate(),this.view=null},t.prototype.reinitView=function(){var t=this.view,e=t.queryScroll();this.freezeContentHeight(),this.clearView(),this.calcSize(),this.renderView(t.type),this.view.applyScroll(e),this.thawContentHeight()},t.prototype.getSuggestedViewHeight=function(){return null==this.suggestedViewHeight&&this.calcSize(),this.suggestedViewHeight},t.prototype.isHeightAuto=function(){return"auto"===this.opt("contentHeight")||"auto"===this.opt("height")},t.prototype.updateViewSize=function(t){void 0===t&&(t=!1);var e,n=this.view;if(!this.ignoreUpdateViewSize&&n)return t&&(this.calcSize(),e=n.queryScroll()),this.ignoreUpdateViewSize++,n.updateSize(this.getSuggestedViewHeight(),this.isHeightAuto(),t),this.ignoreUpdateViewSize--,t&&n.applyScroll(e),!0},t.prototype.calcSize=function(){this.elementVisible()&&this._calcSize()},t.prototype._calcSize=function(){var t=this.opt("contentHeight"),e=this.opt("height");this.suggestedViewHeight="number"==typeof t?t:"function"==typeof t?t():"number"==typeof e?e-this.queryToolbarsHeight():"function"==typeof e?e()-this.queryToolbarsHeight():"parent"===e?this.el.parent().height()-this.queryToolbarsHeight():Math.round(this.contentEl.width()/Math.max(this.opt("aspectRatio"),.5))},t.prototype.windowResize=function(t){t.target===window&&this.view&&this.view.isDatesRendered&&this.updateViewSize(!0)&&this.publiclyTrigger("windowResize",[this.view])},t.prototype.freezeContentHeight=function(){this.freezeContentHeightDepth++||this.forceFreezeContentHeight()},t.prototype.forceFreezeContentHeight=function(){this.contentEl.css({width:"100%",height:this.contentEl.height(),overflow:"hidden"})},t.prototype.thawContentHeight=function(){this.freezeContentHeightDepth--,this.contentEl.css({width:"",height:"",overflow:""}),this.freezeContentHeightDepth&&this.forceFreezeContentHeight()},t.prototype.initToolbars=function(){this.header=new p.default(this,this.computeHeaderOptions()),this.footer=new p.default(this,this.computeFooterOptions()),this.toolbarsManager=new l.default([this.header,this.footer])},t.prototype.computeHeaderOptions=function(){return{extraClasses:"fc-header-toolbar",layout:this.opt("header")}},t.prototype.computeFooterOptions=function(){return{extraClasses:"fc-footer-toolbar",layout:this.opt("footer")}},t.prototype.renderHeader=function(){var t=this.header;t.setToolbarOptions(this.computeHeaderOptions()),t.render(),t.el&&this.el.prepend(t.el)},t.prototype.renderFooter=function(){var t=this.footer;t.setToolbarOptions(this.computeFooterOptions()),t.render(),t.el&&this.el.append(t.el)},t.prototype.setToolbarsTitle=function(t){this.toolbarsManager.proxyCall("updateTitle",t)},t.prototype.updateToolbarButtons=function(t){var e=this.getNow(),n=this.view,i=n.dateProfileGenerator.build(e),r=n.dateProfileGenerator.buildPrev(n.get("dateProfile")),o=n.dateProfileGenerator.buildNext(n.get("dateProfile"));this.toolbarsManager.proxyCall(i.isValid&&!t.currentUnzonedRange.containsDate(e)?"enableButton":"disableButton","today"),this.toolbarsManager.proxyCall(r.isValid?"enableButton":"disableButton","prev"),this.toolbarsManager.proxyCall(o.isValid?"enableButton":"disableButton","next")},t.prototype.queryToolbarsHeight=function(){return this.toolbarsManager.items.reduce(function(t,e){return t+(e.el?e.el.outerHeight(!0):0)},0)},t.prototype.select=function(t,e){this.view.select(this.buildSelectFootprint.apply(this,arguments))},t.prototype.unselect=function(){this.view&&this.view.unselect()},t.prototype.buildSelectFootprint=function(t,e){var n,i=this.moment(t).stripZone();return n=e?this.moment(e).stripZone():i.hasTime()?i.clone().add(this.defaultTimedEventDuration):i.clone().add(this.defaultAllDayEventDuration),new b.default(new m.default(i,n),!i.hasTime())},t.prototype.initMomentInternals=function(){var t=this;this.defaultAllDayEventDuration=o.duration(this.opt("defaultAllDayEventDuration")),this.defaultTimedEventDuration=o.duration(this.opt("defaultTimedEventDuration")),this.optionsManager.watch("buildingMomentLocale",["?locale","?monthNames","?monthNamesShort","?dayNames","?dayNamesShort","?firstDay","?weekNumberCalculation"],function(e){var n,i=e.weekNumberCalculation,r=e.firstDay;"iso"===i&&(i="ISO");var o=Object.create(v.getMomentLocaleData(e.locale));e.monthNames&&(o._months=e.monthNames),e.monthNamesShort&&(o._monthsShort=e.monthNamesShort),e.dayNames&&(o._weekdays=e.dayNames),e.dayNamesShort&&(o._weekdaysShort=e.dayNamesShort),null==r&&"ISO"===i&&(r=1),null!=r&&(n=Object.create(o._week),n.dow=r,o._week=n),"ISO"!==i&&"local"!==i&&"function"!=typeof i||(o._fullCalendar_weekCalc=i),t.localeData=o,t.currentDate&&t.localizeMoment(t.currentDate)})},t.prototype.moment=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n;return"local"===this.opt("timezone")?(n=y.default.apply(null,t),n.hasTime()&&n.local()):n="UTC"===this.opt("timezone")?y.default.utc.apply(null,t):y.default.parseZone.apply(null,t),this.localizeMoment(n),n},t.prototype.msToMoment=function(t,e){var n=y.default.utc(t);return e?n.stripTime():n=this.applyTimezone(n),this.localizeMoment(n),n},t.prototype.msToUtcMoment=function(t,e){var n=y.default.utc(t);return e&&n.stripTime(),this.localizeMoment(n),n},t.prototype.localizeMoment=function(t){t._locale=this.localeData},t.prototype.getIsAmbigTimezone=function(){return"local"!==this.opt("timezone")&&"UTC"!==this.opt("timezone")},t.prototype.applyTimezone=function(t){if(!t.hasTime())return t.clone();var e,n=this.moment(t.toArray()),i=t.time().asMilliseconds()-n.time().asMilliseconds();return i&&(e=n.clone().add(i),t.time().asMilliseconds()-e.time().asMilliseconds()==0&&(n=e)),n},t.prototype.footprintToDateProfile=function(t,e){void 0===e&&(e=!1);var n,i=y.default.utc(t.unzonedRange.startMs);return e||(n=y.default.utc(t.unzonedRange.endMs)),t.isAllDay?(i.stripTime(),n&&n.stripTime()):(i=this.applyTimezone(i),n&&(n=this.applyTimezone(n))),new w.default(i,n,this)},t.prototype.getNow=function(){var t=this.opt("now");return"function"==typeof t&&(t=t()),this.moment(t).stripZone()},t.prototype.humanizeDuration=function(t){return t.locale(this.opt("locale")).humanize()},t.prototype.parseUnzonedRange=function(t){var e=null,n=null;return t.start&&(e=this.moment(t.start).stripZone()),t.end&&(n=this.moment(t.end).stripZone()),e||n?e&&n&&n.isBefore(e)?null:new m.default(e,n):null},t.prototype.initEventManager=function(){var t=this,e=new D.default(this),n=this.opt("eventSources")||[],i=this.opt("events");this.eventManager=e,i&&n.unshift(i),e.on("release",function(e){t.trigger("eventsReset",e)}),e.freeze(),n.forEach(function(n){var i=S.default.parse(n,t);i&&e.addSource(i)}),e.thaw()},t.prototype.requestEvents=function(t,e){return this.eventManager.requestEvents(t,e,this.opt("timezone"),!this.opt("lazyFetching"))},t.prototype.getEventEnd=function(t){return t.end?t.end.clone():this.getDefaultEventEnd(t.allDay,t.start)},t.prototype.getDefaultEventEnd=function(t,e){var n=e.clone();return t?n.stripTime().add(this.defaultAllDayEventDuration):n.add(this.defaultTimedEventDuration),this.getIsAmbigTimezone()&&n.stripZone(),n},t.prototype.rerenderEvents=function(){this.view.flash("displayingEvents")},t.prototype.refetchEvents=function(){this.eventManager.refetchAllSources()},t.prototype.renderEvents=function(t,e){this.eventManager.freeze();for(var n=0;n<t.length;n++)this.renderEvent(t[n],e);this.eventManager.thaw()},t.prototype.renderEvent=function(t,e){void 0===e&&(e=!1);var n=this.eventManager,i=C.default.parse(t,t.source||n.stickySource);i&&n.addEventDef(i,e)},t.prototype.removeEvents=function(t){var e,n,r=this.eventManager,o=[],s={};if(null==t)r.removeAllEventDefs();else{for(r.getEventInstances().forEach(function(t){o.push(t.toLegacy())}),o=i(o,t),n=0;n<o.length;n++)e=this.eventManager.getEventDefByUid(o[n]._id),s[e.id]=!0;r.freeze();for(n in s)r.removeEventDefsById(n);r.thaw()}},t.prototype.clientEvents=function(t){var e=[];return this.eventManager.getEventInstances().forEach(function(t){e.push(t.toLegacy())}),i(e,t)},t.prototype.updateEvents=function(t){this.eventManager.freeze();for(var e=0;e<t.length;e++)this.updateEvent(t[e]);this.eventManager.thaw()},t.prototype.updateEvent=function(t){var e,n,i=this.eventManager.getEventDefByUid(t._id);i instanceof R.default&&(e=i.buildInstance(),n=T.default.createFromRawProps(e,t,null),this.eventManager.mutateEventsWithId(i.id,n))},t.prototype.getEventSources=function(){return this.eventManager.otherSources.slice()},t.prototype.getEventSourceById=function(t){return this.eventManager.getSourceById(M.default.normalizeId(t))},t.prototype.addEventSource=function(t){var e=S.default.parse(t,this);e&&this.eventManager.addSource(e)},t.prototype.removeEventSources=function(t){var e,n,i=this.eventManager;if(null==t)this.eventManager.removeAllSources();else{for(e=i.multiQuerySources(t),i.freeze(),n=0;n<e.length;n++)i.removeSource(e[n]);i.thaw()}},t.prototype.removeEventSource=function(t){var e,n=this.eventManager,i=n.querySources(t);for(n.freeze(),e=0;e<i.length;e++)n.removeSource(i[e]);n.thaw()},t.prototype.refetchEventSources=function(t){var e,n=this.eventManager,i=n.multiQuerySources(t);for(n.freeze(),e=0;e<i.length;e++)n.refetchSource(i[e]);n.thaw()},t.defaults=a.globalDefaults,t.englishDefaults=a.englishDefaults,t.rtlDefaults=a.rtlDefaults,t}();e.default=H,d.default.mixInto(H),c.default.mixInto(H)},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(0),r=n(4),o=n(5),s=function(){function t(t){this._view=t}return t.prototype.opt=function(t){return this._view.opt(t)},t.prototype.trimHiddenDays=function(t){return this._view.trimHiddenDays(t)},t.prototype.msToUtcMoment=function(t,e){return this._view.calendar.msToUtcMoment(t,e)},t.prototype.buildPrev=function(t){var e=t.date.clone().startOf(t.currentRangeUnit).subtract(t.dateIncrement);return this.build(e,-1)},t.prototype.buildNext=function(t){var e=t.date.clone().startOf(t.currentRangeUnit).add(t.dateIncrement);return this.build(e,1)},t.prototype.build=function(t,e,n){void 0===n&&(n=!1);var r,o,s,a,l,u,d=!t.hasTime(),c=null,p=null;return r=this.buildValidRange(),r=this.trimHiddenDays(r),n&&(t=this.msToUtcMoment(r.constrainDate(t),d)),o=this.buildCurrentRangeInfo(t,e),s=/^(year|month|week|day)$/.test(o.unit),a=this.buildRenderRange(this.trimHiddenDays(o.unzonedRange),o.unit,s),a=this.trimHiddenDays(a),l=a.clone(),this.opt("showNonCurrentDates")||(l=l.intersect(o.unzonedRange)),c=i.duration(this.opt("minTime")),p=i.duration(this.opt("maxTime")),l=this.adjustActiveRange(l,c,p),l=l.intersect(r),l&&(t=this.msToUtcMoment(l.constrainDate(t),d)),u=o.unzonedRange.intersectsWith(r),{validUnzonedRange:r,currentUnzonedRange:o.unzonedRange,currentRangeUnit:o.unit,isRangeAllDay:s,activeUnzonedRange:l,renderUnzonedRange:a,minTime:c,maxTime:p,isValid:u,date:t,dateIncrement:this.buildDateIncrement(o.duration)}},t.prototype.buildValidRange=function(){return this._view.getUnzonedRangeOption("validRange",this._view.calendar.getNow())||new o.default},t.prototype.buildCurrentRangeInfo=function(t,e){var n,i=this._view.viewSpec,o=null,s=null,a=null;return i.duration?(o=i.duration,s=i.durationUnit,a=this.buildRangeFromDuration(t,e,o,s)):(n=this.opt("dayCount"))?(s="day",a=this.buildRangeFromDayCount(t,e,n)):(a=this.buildCustomVisibleRange(t))?s=r.computeGreatestUnit(a.getStart(),a.getEnd()):(o=this.getFallbackDuration(),s=r.computeGreatestUnit(o),a=this.buildRangeFromDuration(t,e,o,s)),{duration:o,unit:s,unzonedRange:a}},t.prototype.getFallbackDuration=function(){return i.duration({days:1})},t.prototype.adjustActiveRange=function(t,e,n){var i=t.getStart(),r=t.getEnd();return this._view.usesMinMaxTime&&(e<0&&i.time(0).add(e),n>864e5&&r.time(n-864e5)),new o.default(i,r)},t.prototype.buildRangeFromDuration=function(t,e,n,s){function a(){d=t.clone().startOf(h),c=d.clone().add(n),p=new o.default(d,c)}var l,u,d,c,p,h=this.opt("dateAlignment");return h||(l=this.opt("dateIncrement"),l?(u=i.duration(l),h=u<n?r.computeDurationGreatestUnit(u,l):s):h=s),n.as("days")<=1&&this._view.isHiddenDay(d)&&(d=this._view.skipHiddenDays(d,e),d.startOf("day")),a(),this.trimHiddenDays(p)||(t=this._view.skipHiddenDays(t,e),a()),p},t.prototype.buildRangeFromDayCount=function(t,e,n){var i,r=this.opt("dateAlignment"),s=0,a=t.clone();r&&a.startOf(r),a.startOf("day"),a=this._view.skipHiddenDays(a,e),i=a.clone();do{i.add(1,"day"),this._view.isHiddenDay(i)||s++}while(s<n);return new o.default(a,i)},t.prototype.buildCustomVisibleRange=function(t){var e=this._view.getUnzonedRangeOption("visibleRange",this._view.calendar.applyTimezone(t));return!e||null!=e.startMs&&null!=e.endMs?e:null},t.prototype.buildRenderRange=function(t,e,n){return t.clone()},t.prototype.buildDateIncrement=function(t){var e,n=this.opt("dateIncrement");return n?i.duration(n):(e=this.opt("dateAlignment"))?i.duration(1,e):t||i.duration({days:1})},t}();e.default=s},function(t,e,n){function i(t){var e,n,i,r,l=a.dataAttrPrefix;return l&&(l+="-"),e=t.data(l+"event")||null,e&&(e="object"==typeof e?o.extend({},e):{},n=e.start,null==n&&(n=e.time),i=e.duration,r=e.stick,delete e.start,delete e.time,delete e.duration,delete e.stick),null==n&&(n=t.data(l+"start")),null==n&&(n=t.data(l+"time")),null==i&&(i=t.data(l+"duration")),null==r&&(r=t.data(l+"stick")),n=null!=n?s.duration(n):null,i=null!=i?s.duration(i):null,r=Boolean(r),{eventProps:e,startTime:n,duration:i,stick:r}}Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),o=n(3),s=n(0),a=n(16),l=n(4),u=n(10),d=n(7),c=n(23),p=n(13),h=n(18),f=n(6),g=n(15),v=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.isDragging=!1,e}return r.__extends(e,t),e.prototype.end=function(){this.dragListener&&this.dragListener.endInteraction()},e.prototype.bindToDocument=function(){this.listenTo(o(document),{dragstart:this.handleDragStart,sortstart:this.handleDragStart})},e.prototype.unbindFromDocument=function(){this.stopListeningTo(o(document))},e.prototype.handleDragStart=function(t,e){var n,i;this.opt("droppable")&&(n=o((e?e.item:null)||t.target),i=this.opt("dropAccept"),(o.isFunction(i)?i.call(n[0],n):n.is(i))&&(this.isDragging||this.listenToExternalDrag(n,t,e)))},e.prototype.listenToExternalDrag=function(t,e,n){var r,o=this,s=this.component,a=this.view,u=i(t);(this.dragListener=new c.default(s,{interactionStart:function(){o.isDragging=!0},hitOver:function(t){var e,n=!0,i=t.component.getSafeHitFootprint(t);i?(r=o.computeExternalDrop(i,u),r?(e=new h.default(r.buildInstances()),n=u.eventProps?s.isEventInstanceGroupAllowed(e):s.isExternalInstanceGroupAllowed(e)):n=!1):n=!1,n||(r=null,l.disableCursor()),r&&s.renderDrag(s.eventRangesToEventFootprints(e.sliceRenderRanges(s.dateProfile.renderUnzonedRange,a.calendar)))},hitOut:function(){r=null},hitDone:function(){l.enableCursor(),s.unrenderDrag()},interactionEnd:function(e){r&&a.reportExternalDrop(r,Boolean(u.eventProps),Boolean(u.stick),t,e,n),o.isDragging=!1,o.dragListener=null}})).startDrag(e)},e.prototype.computeExternalDrop=function(t,e){var n,i=this.view.calendar,r=u.default.utc(t.unzonedRange.startMs).stripZone();return t.isAllDay&&(e.startTime?r.time(e.startTime):r.stripTime()),e.duration&&(n=r.clone().add(e.duration)),r=i.applyTimezone(r),n&&(n=i.applyTimezone(n)),p.default.parse(o.extend({},e.eventProps,{start:r,end:n}),new f.default(i))},e}(g.default);e.default=v,d.default.mixInto(v),a.dataAttrPrefix=""},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(3),o=n(4),s=n(37),a=n(50),l=n(23),u=n(15),d=function(t){function e(e,n){var i=t.call(this,e)||this;return i.isResizing=!1,i.eventPointing=n,i}return i.__extends(e,t),e.prototype.end=function(){this.dragListener&&this.dragListener.endInteraction()},e.prototype.bindToEl=function(t){var e=this.component;e.bindSegHandlerToEl(t,"mousedown",this.handleMouseDown.bind(this)),e.bindSegHandlerToEl(t,"touchstart",this.handleTouchStart.bind(this))},e.prototype.handleMouseDown=function(t,e){this.component.canStartResize(t,e)&&this.buildDragListener(t,r(e.target).is(".fc-start-resizer")).startInteraction(e,{distance:5})},e.prototype.handleTouchStart=function(t,e){this.component.canStartResize(t,e)&&this.buildDragListener(t,r(e.target).is(".fc-start-resizer")).startInteraction(e)},e.prototype.buildDragListener=function(t,e){var n,i,r=this,s=this.component,a=this.view,u=a.calendar,d=u.eventManager,c=t.el,p=t.footprint.eventDef,h=t.footprint.eventInstance;return this.dragListener=new l.default(s,{scroll:this.opt("dragScroll"),subjectEl:c,interactionStart:function(){n=!1},dragStart:function(e){n=!0,r.eventPointing.handleMouseout(t,e),r.segResizeStart(t,e)},hitOver:function(n,l,c){var h,f=!0,g=s.getSafeHitFootprint(c),v=s.getSafeHitFootprint(n);g&&v?(i=e?r.computeEventStartResizeMutation(g,v,t.footprint):r.computeEventEndResizeMutation(g,v,t.footprint),i?(h=d.buildMutatedEventInstanceGroup(p.id,i),f=s.isEventInstanceGroupAllowed(h)):f=!1):f=!1,f?i.isEmpty()&&(i=null):(i=null,o.disableCursor()),i&&(a.hideEventsWithId(t.footprint.eventDef.id),a.renderEventResize(s.eventRangesToEventFootprints(h.sliceRenderRanges(s.dateProfile.renderUnzonedRange,u)),t))},hitOut:function(){i=null},hitDone:function(){a.unrenderEventResize(t),a.showEventsWithId(t.footprint.eventDef.id),o.enableCursor()},interactionEnd:function(e){n&&r.segResizeStop(t,e),i&&a.reportEventResize(h,i,c,e),r.dragListener=null}})},e.prototype.segResizeStart=function(t,e){this.isResizing=!0,this.component.publiclyTrigger("eventResizeStart",{context:t.el[0],args:[t.footprint.getEventLegacy(),e,{},this.view]})},e.prototype.segResizeStop=function(t,e){this.isResizing=!1,this.component.publiclyTrigger("eventResizeStop",{context:t.el[0],args:[t.footprint.getEventLegacy(),e,{},this.view]})},e.prototype.computeEventStartResizeMutation=function(t,e,n){var i,r,o=n.componentFootprint.unzonedRange,l=this.component.diffDates(e.unzonedRange.getStart(),t.unzonedRange.getStart());return o.getStart().add(l)<o.getEnd()&&(i=new a.default,i.setStartDelta(l),r=new s.default,r.setDateMutation(i),r)},e.prototype.computeEventEndResizeMutation=function(t,e,n){var i,r,o=n.componentFootprint.unzonedRange,l=this.component.diffDates(e.unzonedRange.getEnd(),t.unzonedRange.getEnd());return o.getEnd().add(l)>o.getStart()&&(i=new a.default,i.setEndDelta(l),r=new s.default,r.setDateMutation(i),r)},e}(u.default);e.default=d},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(4),o=n(37),s=n(50),a=n(54),l=n(23),u=n(244),d=n(15),c=function(t){function e(e,n){var i=t.call(this,e)||this;return i.isDragging=!1,i.eventPointing=n,i}return i.__extends(e,t),e.prototype.end=function(){this.dragListener&&this.dragListener.endInteraction()},e.prototype.getSelectionDelay=function(){var t=this.opt("eventLongPressDelay");return null==t&&(t=this.opt("longPressDelay")),t},e.prototype.bindToEl=function(t){var e=this.component;e.bindSegHandlerToEl(t,"mousedown",this.handleMousedown.bind(this)),e.bindSegHandlerToEl(t,"touchstart",this.handleTouchStart.bind(this))},e.prototype.handleMousedown=function(t,e){!this.component.shouldIgnoreMouse()&&this.component.canStartDrag(t,e)&&this.buildDragListener(t).startInteraction(e,{distance:5})},e.prototype.handleTouchStart=function(t,e){var n=this.component,i={delay:this.view.isEventDefSelected(t.footprint.eventDef)?0:this.getSelectionDelay()};n.canStartDrag(t,e)?this.buildDragListener(t).startInteraction(e,i):n.canStartSelection(t,e)&&this.buildSelectListener(t).startInteraction(e,i)},e.prototype.buildSelectListener=function(t){var e=this,n=this.view,i=t.footprint.eventDef,r=t.footprint.eventInstance;if(this.dragListener)return this.dragListener;var o=this.dragListener=new a.default({dragStart:function(t){o.isTouch&&!n.isEventDefSelected(i)&&r&&n.selectEventInstance(r)},interactionEnd:function(t){e.dragListener=null}});return o},e.prototype.buildDragListener=function(t){var e,n,i,o=this,s=this.component,a=this.view,d=a.calendar,c=d.eventManager,p=t.el,h=t.footprint.eventDef,f=t.footprint.eventInstance;if(this.dragListener)return this.dragListener;var g=this.dragListener=new l.default(a,{scroll:this.opt("dragScroll"),subjectEl:p,subjectCenter:!0,interactionStart:function(i){t.component=s,e=!1,n=new u.default(t.el,{additionalClass:"fc-dragging",parentEl:a.el,opacity:g.isTouch?null:o.opt("dragOpacity"),revertDuration:o.opt("dragRevertDuration"),zIndex:2}),n.hide(),n.start(i)},dragStart:function(n){g.isTouch&&!a.isEventDefSelected(h)&&f&&a.selectEventInstance(f),e=!0,o.eventPointing.handleMouseout(t,n),o.segDragStart(t,n),a.hideEventsWithId(t.footprint.eventDef.id)},hitOver:function(e,l,u){var p,f,v,y=!0;t.hit&&(u=t.hit),p=u.component.getSafeHitFootprint(u),f=e.component.getSafeHitFootprint(e),p&&f?(i=o.computeEventDropMutation(p,f,h),i?(v=c.buildMutatedEventInstanceGroup(h.id,i),y=s.isEventInstanceGroupAllowed(v)):y=!1):y=!1,y||(i=null,r.disableCursor()),i&&a.renderDrag(s.eventRangesToEventFootprints(v.sliceRenderRanges(s.dateProfile.renderUnzonedRange,d)),t,g.isTouch)?n.hide():n.show(),l&&(i=null)},hitOut:function(){a.unrenderDrag(t),n.show(),i=null},hitDone:function(){r.enableCursor()},interactionEnd:function(r){delete t.component,n.stop(!i,function(){e&&(a.unrenderDrag(t),o.segDragStop(t,r)),a.showEventsWithId(t.footprint.eventDef.id),i&&a.reportEventDrop(f,i,p,r)}),o.dragListener=null}});return g},e.prototype.segDragStart=function(t,e){this.isDragging=!0,this.component.publiclyTrigger("eventDragStart",{context:t.el[0],args:[t.footprint.getEventLegacy(),e,{},this.view]})},e.prototype.segDragStop=function(t,e){this.isDragging=!1,this.component.publiclyTrigger("eventDragStop",{context:t.el[0],args:[t.footprint.getEventLegacy(),e,{},this.view]})},e.prototype.computeEventDropMutation=function(t,e,n){var i=new o.default;return i.setDateMutation(this.computeEventDateMutation(t,e)),i},e.prototype.computeEventDateMutation=function(t,e){var n,i,r=t.unzonedRange.getStart(),o=e.unzonedRange.getStart(),a=!1,l=!1,u=!1;return t.isAllDay!==e.isAllDay&&(a=!0,e.isAllDay?(u=!0,r.stripTime()):l=!0),n=this.component.diffDates(o,r),i=new s.default,i.clearEnd=a,i.forceTimed=l,i.forceAllDay=u,i.setDateDelta(n),i},e}(d.default);e.default=c},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(4),o=n(23),s=n(12),a=n(5),l=n(15),u=function(t){function e(e){var n=t.call(this,e)||this;return n.dragListener=n.buildDragListener(),n}return i.__extends(e,t),e.prototype.end=function(){this.dragListener.endInteraction()},e.prototype.getDelay=function(){var t=this.opt("selectLongPressDelay");return null==t&&(t=this.opt("longPressDelay")),t},e.prototype.bindToEl=function(t){var e=this,n=this.component,i=this.dragListener;n.bindDateHandlerToEl(t,"mousedown",function(t){e.opt("selectable")&&!n.shouldIgnoreMouse()&&i.startInteraction(t,{distance:e.opt("selectMinDistance")})}),n.bindDateHandlerToEl(t,"touchstart",function(t){e.opt("selectable")&&!n.shouldIgnoreTouch()&&i.startInteraction(t,{delay:e.getDelay()})}),r.preventSelection(t)},e.prototype.buildDragListener=function(){var t,e=this,n=this.component;return new o.default(n,{scroll:this.opt("dragScroll"),interactionStart:function(){t=null},dragStart:function(t){e.view.unselect(t)},hitOver:function(i,o,s){var a,l;s&&(a=n.getSafeHitFootprint(s),l=n.getSafeHitFootprint(i),t=a&&l?e.computeSelection(a,l):null,t?n.renderSelectionFootprint(t):!1===t&&r.disableCursor())},hitOut:function(){t=null,n.unrenderSelection()},hitDone:function(){r.enableCursor()},interactionEnd:function(n,i){!i&&t&&e.view.reportSelection(t,n)}})},e.prototype.computeSelection=function(t,e){var n=this.computeSelectionFootprint(t,e);return!(n&&!this.isSelectionFootprintAllowed(n))&&n},e.prototype.computeSelectionFootprint=function(t,e){var n=[t.unzonedRange.startMs,t.unzonedRange.endMs,e.unzonedRange.startMs,e.unzonedRange.endMs];return n.sort(r.compareNumbers),new s.default(new a.default(n[0],n[3]),t.isAllDay)},e.prototype.isSelectionFootprintAllowed=function(t){return this.component.dateProfile.validUnzonedRange.containsRange(t.unzonedRange)&&this.view.calendar.constraints.isSelectionFootprintAllowed(t)},e}(l.default);e.default=u},function(t,e,n){function i(t){var e,n=[],i=[];for(e=0;e<t.length;e++)t[e].componentFootprint.isAllDay?n.push(t[e]):i.push(t[e]);return{allDay:n,timed:i}}Object.defineProperty(e,"__esModule",{value:!0});var r,o,s=n(2),a=n(0),l=n(3),u=n(4),d=n(39),c=n(41),p=n(227),h=n(61),f=function(t){function e(e,n){var i=t.call(this,e,n)||this;return i.usesMinMaxTime=!0,i.timeGrid=i.instantiateTimeGrid(),i.addChild(i.timeGrid),i.opt("allDaySlot")&&(i.dayGrid=i.instantiateDayGrid(),i.addChild(i.dayGrid)),i.scroller=new d.default({overflowX:"hidden",overflowY:"auto"}),i}
-return s.__extends(e,t),e.prototype.instantiateTimeGrid=function(){var t=new this.timeGridClass(this);return u.copyOwnProps(r,t),t},e.prototype.instantiateDayGrid=function(){var t=new this.dayGridClass(this);return u.copyOwnProps(o,t),t},e.prototype.renderSkeleton=function(){var t,e;this.el.addClass("fc-agenda-view").html(this.renderSkeletonHtml()),this.scroller.render(),t=this.scroller.el.addClass("fc-time-grid-container"),e=l('<div class="fc-time-grid" />').appendTo(t),this.el.find(".fc-body > tr > td").append(t),this.timeGrid.headContainerEl=this.el.find(".fc-head-container"),this.timeGrid.setElement(e),this.dayGrid&&(this.dayGrid.setElement(this.el.find(".fc-day-grid")),this.dayGrid.bottomCoordPadding=this.dayGrid.el.next("hr").outerHeight())},e.prototype.unrenderSkeleton=function(){this.timeGrid.removeElement(),this.dayGrid&&this.dayGrid.removeElement(),this.scroller.destroy()},e.prototype.renderSkeletonHtml=function(){var t=this.calendar.theme;return'<table class="'+t.getClass("tableGrid")+'">'+(this.opt("columnHeader")?'<thead class="fc-head"><tr><td class="fc-head-container '+t.getClass("widgetHeader")+'"> </td></tr></thead>':"")+'<tbody class="fc-body"><tr><td class="'+t.getClass("widgetContent")+'">'+(this.dayGrid?'<div class="fc-day-grid"/><hr class="fc-divider '+t.getClass("widgetHeader")+'"/>':"")+"</td></tr></tbody></table>"},e.prototype.axisStyleAttr=function(){return null!=this.axisWidth?'style="width:'+this.axisWidth+'px"':""},e.prototype.getNowIndicatorUnit=function(){return this.timeGrid.getNowIndicatorUnit()},e.prototype.updateSize=function(e,n,i){var r,o,s;if(t.prototype.updateSize.call(this,e,n,i),this.axisWidth=u.matchCellWidths(this.el.find(".fc-axis")),!this.timeGrid.colEls)return void(n||(o=this.computeScrollerHeight(e),this.scroller.setHeight(o)));var a=this.el.find(".fc-row:not(.fc-scroller *)");this.timeGrid.bottomRuleEl.hide(),this.scroller.clear(),u.uncompensateScroll(a),this.dayGrid&&(this.dayGrid.removeSegPopover(),r=this.opt("eventLimit"),r&&"number"!=typeof r&&(r=5),r&&this.dayGrid.limitRows(r)),n||(o=this.computeScrollerHeight(e),this.scroller.setHeight(o),s=this.scroller.getScrollbarWidths(),(s.left||s.right)&&(u.compensateScroll(a,s),o=this.computeScrollerHeight(e),this.scroller.setHeight(o)),this.scroller.lockOverflow(s),this.timeGrid.getTotalSlatHeight()<o&&this.timeGrid.bottomRuleEl.show())},e.prototype.computeScrollerHeight=function(t){return t-u.subtractInnerElHeight(this.el,this.scroller.el)},e.prototype.computeInitialDateScroll=function(){var t=a.duration(this.opt("scrollTime")),e=this.timeGrid.computeTimeTop(t);return e=Math.ceil(e),e&&e++,{top:e}},e.prototype.queryDateScroll=function(){return{top:this.scroller.getScrollTop()}},e.prototype.applyDateScroll=function(t){void 0!==t.top&&this.scroller.setScrollTop(t.top)},e.prototype.getHitFootprint=function(t){return t.component.getHitFootprint(t)},e.prototype.getHitEl=function(t){return t.component.getHitEl(t)},e.prototype.executeEventRender=function(t){var e,n,i={},r={};for(e in t)n=t[e],n.getEventDef().isAllDay()?i[e]=n:r[e]=n;this.timeGrid.executeEventRender(r),this.dayGrid&&this.dayGrid.executeEventRender(i)},e.prototype.renderDrag=function(t,e,n){var r=i(t),o=!1;return o=this.timeGrid.renderDrag(r.timed,e,n),this.dayGrid&&(o=this.dayGrid.renderDrag(r.allDay,e,n)||o),o},e.prototype.renderEventResize=function(t,e,n){var r=i(t);this.timeGrid.renderEventResize(r.timed,e,n),this.dayGrid&&this.dayGrid.renderEventResize(r.allDay,e,n)},e.prototype.renderSelectionFootprint=function(t){t.isAllDay?this.dayGrid&&this.dayGrid.renderSelectionFootprint(t):this.timeGrid.renderSelectionFootprint(t)},e}(c.default);e.default=f,f.prototype.timeGridClass=p.default,f.prototype.dayGridClass=h.default,r={renderHeadIntroHtml:function(){var t,e=this.view,n=e.calendar,i=n.msToUtcMoment(this.dateProfile.renderUnzonedRange.startMs,!0);return this.opt("weekNumbers")?(t=i.format(this.opt("smallWeekFormat")),'<th class="fc-axis fc-week-number '+n.theme.getClass("widgetHeader")+'" '+e.axisStyleAttr()+">"+e.buildGotoAnchorHtml({date:i,type:"week",forceOff:this.colCnt>1},u.htmlEscape(t))+"</th>"):'<th class="fc-axis '+n.theme.getClass("widgetHeader")+'" '+e.axisStyleAttr()+"></th>"},renderBgIntroHtml:function(){var t=this.view;return'<td class="fc-axis '+t.calendar.theme.getClass("widgetContent")+'" '+t.axisStyleAttr()+"></td>"},renderIntroHtml:function(){return'<td class="fc-axis" '+this.view.axisStyleAttr()+"></td>"}},o={renderBgIntroHtml:function(){var t=this.view;return'<td class="fc-axis '+t.calendar.theme.getClass("widgetContent")+'" '+t.axisStyleAttr()+"><span>"+t.getAllDayHtml()+"</span></td>"},renderIntroHtml:function(){return'<td class="fc-axis" '+this.view.axisStyleAttr()+"></td>"}}},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(3),o=n(0),s=n(4),a=n(40),l=n(56),u=n(60),d=n(55),c=n(53),p=n(5),h=n(12),f=n(246),g=n(247),v=n(248),y=[{hours:1},{minutes:30},{minutes:15},{seconds:30},{seconds:15}],m=function(t){function e(e){var n=t.call(this,e)||this;return n.processOptions(),n}return i.__extends(e,t),e.prototype.componentFootprintToSegs=function(t){var e,n=this.sliceRangeByTimes(t.unzonedRange);for(e=0;e<n.length;e++)this.isRTL?n[e].col=this.daysPerRow-1-n[e].dayIndex:n[e].col=n[e].dayIndex;return n},e.prototype.sliceRangeByTimes=function(t){var e,n,i=[];for(n=0;n<this.daysPerRow;n++)(e=t.intersect(this.dayRanges[n]))&&i.push({startMs:e.startMs,endMs:e.endMs,isStart:e.isStart,isEnd:e.isEnd,dayIndex:n});return i},e.prototype.processOptions=function(){var t,e=this.opt("slotDuration"),n=this.opt("snapDuration");e=o.duration(e),n=n?o.duration(n):e,this.slotDuration=e,this.snapDuration=n,this.snapsPerSlot=e/n,t=this.opt("slotLabelFormat"),r.isArray(t)&&(t=t[t.length-1]),this.labelFormat=t||this.opt("smallTimeFormat"),t=this.opt("slotLabelInterval"),this.labelInterval=t?o.duration(t):this.computeLabelInterval(e)},e.prototype.computeLabelInterval=function(t){var e,n,i;for(e=y.length-1;e>=0;e--)if(n=o.duration(y[e]),i=s.divideDurationByDuration(n,t),s.isInt(i)&&i>1)return n;return o.duration(t)},e.prototype.renderDates=function(t){this.dateProfile=t,this.updateDayTable(),this.renderSlats(),this.renderColumns()},e.prototype.unrenderDates=function(){this.unrenderColumns()},e.prototype.renderSkeleton=function(){var t=this.view.calendar.theme;this.el.html('<div class="fc-bg"></div><div class="fc-slats"></div><hr class="fc-divider '+t.getClass("widgetHeader")+'" style="display:none" />'),this.bottomRuleEl=this.el.find("hr")},e.prototype.renderSlats=function(){var t=this.view.calendar.theme;this.slatContainerEl=this.el.find("> .fc-slats").html('<table class="'+t.getClass("tableGrid")+'">'+this.renderSlatRowHtml()+"</table>"),this.slatEls=this.slatContainerEl.find("tr"),this.slatCoordCache=new c.default({els:this.slatEls,isVertical:!0})},e.prototype.renderSlatRowHtml=function(){for(var t,e,n,i=this.view,r=i.calendar,a=r.theme,l=this.isRTL,u=this.dateProfile,d="",c=o.duration(+u.minTime),p=o.duration(0);c<u.maxTime;)t=r.msToUtcMoment(u.renderUnzonedRange.startMs).time(c),e=s.isInt(s.divideDurationByDuration(p,this.labelInterval)),n='<td class="fc-axis fc-time '+a.getClass("widgetContent")+'" '+i.axisStyleAttr()+">"+(e?"<span>"+s.htmlEscape(t.format(this.labelFormat))+"</span>":"")+"</td>",d+='<tr data-time="'+t.format("HH:mm:ss")+'"'+(e?"":' class="fc-minor"')+">"+(l?"":n)+'<td class="'+a.getClass("widgetContent")+'"/>'+(l?n:"")+"</tr>",c.add(this.slotDuration),p.add(this.slotDuration);return d},e.prototype.renderColumns=function(){var t=this.dateProfile,e=this.view.calendar.theme;this.dayRanges=this.dayDates.map(function(e){return new p.default(e.clone().add(t.minTime),e.clone().add(t.maxTime))}),this.headContainerEl&&this.headContainerEl.html(this.renderHeadHtml()),this.el.find("> .fc-bg").html('<table class="'+e.getClass("tableGrid")+'">'+this.renderBgTrHtml(0)+"</table>"),this.colEls=this.el.find(".fc-day, .fc-disabled-day"),this.colCoordCache=new c.default({els:this.colEls,isHorizontal:!0}),this.renderContentSkeleton()},e.prototype.unrenderColumns=function(){this.unrenderContentSkeleton()},e.prototype.renderContentSkeleton=function(){var t,e,n="";for(t=0;t<this.colCnt;t++)n+='<td><div class="fc-content-col"><div class="fc-event-container fc-helper-container"></div><div class="fc-event-container"></div><div class="fc-highlight-container"></div><div class="fc-bgevent-container"></div><div class="fc-business-container"></div></div></td>';e=this.contentSkeletonEl=r('<div class="fc-content-skeleton"><table><tr>'+n+"</tr></table></div>"),this.colContainerEls=e.find(".fc-content-col"),this.helperContainerEls=e.find(".fc-helper-container"),this.fgContainerEls=e.find(".fc-event-container:not(.fc-helper-container)"),this.bgContainerEls=e.find(".fc-bgevent-container"),this.highlightContainerEls=e.find(".fc-highlight-container"),this.businessContainerEls=e.find(".fc-business-container"),this.bookendCells(e.find("tr")),this.el.append(e)},e.prototype.unrenderContentSkeleton=function(){this.contentSkeletonEl&&(this.contentSkeletonEl.remove(),this.contentSkeletonEl=null,this.colContainerEls=null,this.helperContainerEls=null,this.fgContainerEls=null,this.bgContainerEls=null,this.highlightContainerEls=null,this.businessContainerEls=null)},e.prototype.groupSegsByCol=function(t){var e,n=[];for(e=0;e<this.colCnt;e++)n.push([]);for(e=0;e<t.length;e++)n[t[e].col].push(t[e]);return n},e.prototype.attachSegsByCol=function(t,e){var n,i,r;for(n=0;n<this.colCnt;n++)for(i=t[n],r=0;r<i.length;r++)e.eq(n).append(i[r].el)},e.prototype.getNowIndicatorUnit=function(){return"minute"},e.prototype.renderNowIndicator=function(t){if(this.colContainerEls){var e,n=this.componentFootprintToSegs(new h.default(new p.default(t,t.valueOf()+1),!1)),i=this.computeDateTop(t,t),o=[];for(e=0;e<n.length;e++)o.push(r('<div class="fc-now-indicator fc-now-indicator-line"></div>').css("top",i).appendTo(this.colContainerEls.eq(n[e].col))[0]);n.length>0&&o.push(r('<div class="fc-now-indicator fc-now-indicator-arrow"></div>').css("top",i).appendTo(this.el.find(".fc-content-skeleton"))[0]),this.nowIndicatorEls=r(o)}},e.prototype.unrenderNowIndicator=function(){this.nowIndicatorEls&&(this.nowIndicatorEls.remove(),this.nowIndicatorEls=null)},e.prototype.updateSize=function(e,n,i){t.prototype.updateSize.call(this,e,n,i),this.slatCoordCache.build(),i&&this.updateSegVerticals([].concat(this.eventRenderer.getSegs(),this.businessSegs||[]))},e.prototype.getTotalSlatHeight=function(){return this.slatContainerEl.outerHeight()},e.prototype.computeDateTop=function(t,e){return this.computeTimeTop(o.duration(t-e.clone().stripTime()))},e.prototype.computeTimeTop=function(t){var e,n,i=this.slatEls.length,r=this.dateProfile,o=(t-r.minTime)/this.slotDuration;return o=Math.max(0,o),o=Math.min(i,o),e=Math.floor(o),e=Math.min(e,i-1),n=o-e,this.slatCoordCache.getTopPosition(e)+this.slatCoordCache.getHeight(e)*n},e.prototype.updateSegVerticals=function(t){this.computeSegVerticals(t),this.assignSegVerticals(t)},e.prototype.computeSegVerticals=function(t){var e,n,i,r=this.opt("agendaEventMinHeight");for(e=0;e<t.length;e++)n=t[e],i=this.dayDates[n.dayIndex],n.top=this.computeDateTop(n.startMs,i),n.bottom=Math.max(n.top+r,this.computeDateTop(n.endMs,i))},e.prototype.assignSegVerticals=function(t){var e,n;for(e=0;e<t.length;e++)n=t[e],n.el.css(this.generateSegVerticalCss(n))},e.prototype.generateSegVerticalCss=function(t){return{top:t.top,bottom:-t.bottom}},e.prototype.prepareHits=function(){this.colCoordCache.build(),this.slatCoordCache.build()},e.prototype.releaseHits=function(){this.colCoordCache.clear()},e.prototype.queryHit=function(t,e){var n=this.snapsPerSlot,i=this.colCoordCache,r=this.slatCoordCache;if(i.isLeftInBounds(t)&&r.isTopInBounds(e)){var o=i.getHorizontalIndex(t),s=r.getVerticalIndex(e);if(null!=o&&null!=s){var a=r.getTopOffset(s),l=r.getHeight(s),u=(e-a)/l,d=Math.floor(u*n),c=s*n+d,p=a+d/n*l,h=a+(d+1)/n*l;return{col:o,snap:c,component:this,left:i.getLeftOffset(o),right:i.getRightOffset(o),top:p,bottom:h}}}},e.prototype.getHitFootprint=function(t){var e,n=this.getCellDate(0,t.col),i=this.computeSnapTime(t.snap);return n.time(i),e=n.clone().add(this.snapDuration),new h.default(new p.default(n,e),!1)},e.prototype.computeSnapTime=function(t){return o.duration(this.dateProfile.minTime+this.snapDuration*t)},e.prototype.getHitEl=function(t){return this.colEls.eq(t.col)},e.prototype.renderDrag=function(t,e,n){var i;if(e){if(t.length)return this.helperRenderer.renderEventDraggingFootprints(t,e,n),!0}else for(i=0;i<t.length;i++)this.renderHighlight(t[i].componentFootprint)},e.prototype.unrenderDrag=function(){this.unrenderHighlight(),this.helperRenderer.unrender()},e.prototype.renderEventResize=function(t,e,n){this.helperRenderer.renderEventResizingFootprints(t,e,n)},e.prototype.unrenderEventResize=function(){this.helperRenderer.unrender()},e.prototype.renderSelectionFootprint=function(t){this.opt("selectHelper")?this.helperRenderer.renderComponentFootprint(t):this.renderHighlight(t)},e.prototype.unrenderSelection=function(){this.helperRenderer.unrender(),this.unrenderHighlight()},e}(a.default);e.default=m,m.prototype.eventRendererClass=f.default,m.prototype.businessHourRendererClass=l.default,m.prototype.helperRendererClass=g.default,m.prototype.fillRendererClass=v.default,u.default.mixInto(m),d.default.mixInto(m)},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(5),o=n(221),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.__extends(e,t),e.prototype.buildRenderRange=function(e,n,i){var o=t.prototype.buildRenderRange.call(this,e,n,i),s=this.msToUtcMoment(o.startMs,i),a=this.msToUtcMoment(o.endMs,i);return/^(year|month)$/.test(n)&&(s.startOf("week"),a.weekday()&&a.add(1,"week").startOf("week")),new r.default(s,a)},e}(o.default);e.default=s},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(0),o=n(4),s=n(62),a=n(253),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.__extends(e,t),e.prototype.setGridHeight=function(t,e){e&&(t*=this.dayGrid.rowCnt/6),o.distributeHeight(this.dayGrid.rowEls,t,!e)},e.prototype.isDateInOtherMonth=function(t,e){return t.month()!==r.utc(e.currentUnzonedRange.startMs).month()},e}(s.default);e.default=l,l.prototype.dateProfileGeneratorClass=a.default},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(3),o=n(4),s=n(5),a=n(41),l=n(39),u=n(254),d=n(255),c=function(t){function e(e,n){var i=t.call(this,e,n)||this;return i.segSelector=".fc-list-item",i.scroller=new l.default({overflowX:"hidden",overflowY:"auto"}),i}return i.__extends(e,t),e.prototype.renderSkeleton=function(){this.el.addClass("fc-list-view "+this.calendar.theme.getClass("listView")),this.scroller.render(),this.scroller.el.appendTo(this.el),this.contentEl=this.scroller.scrollEl},e.prototype.unrenderSkeleton=function(){this.scroller.destroy()},e.prototype.updateSize=function(e,n,i){t.prototype.updateSize.call(this,e,n,i),this.scroller.clear(),n||this.scroller.setHeight(this.computeScrollerHeight(e))},e.prototype.computeScrollerHeight=function(t){return t-o.subtractInnerElHeight(this.el,this.scroller.el)},e.prototype.renderDates=function(t){for(var e=this.calendar,n=e.msToUtcMoment(t.renderUnzonedRange.startMs,!0),i=e.msToUtcMoment(t.renderUnzonedRange.endMs,!0),r=[],o=[];n<i;)r.push(n.clone()),o.push(new s.default(n,n.clone().add(1,"day"))),n.add(1,"day");this.dayDates=r,this.dayRanges=o},e.prototype.componentFootprintToSegs=function(t){var e,n,i,r=this.dayRanges,o=[];for(e=0;e<r.length;e++)if((n=t.unzonedRange.intersect(r[e]))&&(i={startMs:n.startMs,endMs:n.endMs,isStart:n.isStart,isEnd:n.isEnd,dayIndex:e},o.push(i),!i.isEnd&&!t.isAllDay&&e+1<r.length&&t.unzonedRange.endMs<r[e+1].startMs+this.nextDayThreshold)){i.endMs=t.unzonedRange.endMs,i.isEnd=!0;break}return o},e.prototype.renderEmptyMessage=function(){this.contentEl.html('<div class="fc-list-empty-wrap2"><div class="fc-list-empty-wrap1"><div class="fc-list-empty">'+o.htmlEscape(this.opt("noEventsMessage"))+"</div></div></div>")},e.prototype.renderSegList=function(t){var e,n,i,o=this.groupSegsByDay(t),s=r('<table class="fc-list-table '+this.calendar.theme.getClass("tableList")+'"><tbody/></table>'),a=s.find("tbody");for(e=0;e<o.length;e++)if(n=o[e])for(a.append(this.dayHeaderHtml(this.dayDates[e])),this.eventRenderer.sortEventSegs(n),i=0;i<n.length;i++)a.append(n[i].el);this.contentEl.empty().append(s)},e.prototype.groupSegsByDay=function(t){var e,n,i=[];for(e=0;e<t.length;e++)n=t[e],(i[n.dayIndex]||(i[n.dayIndex]=[])).push(n);return i},e.prototype.dayHeaderHtml=function(t){var e=this.opt("listDayFormat"),n=this.opt("listDayAltFormat");return'<tr class="fc-list-heading" data-date="'+t.format("YYYY-MM-DD")+'"><td class="'+(this.calendar.theme.getClass("tableListHeading")||this.calendar.theme.getClass("widgetHeader"))+'" colspan="3">'+(e?this.buildGotoAnchorHtml(t,{class:"fc-list-heading-main"},o.htmlEscape(t.format(e))):"")+(n?this.buildGotoAnchorHtml(t,{class:"fc-list-heading-alt"},o.htmlEscape(t.format(n))):"")+"</td></tr>"},e}(a.default);e.default=c,c.prototype.eventRendererClass=u.default,c.prototype.eventPointingClass=d.default},,,,,,function(t,e,n){var i=n(3),r=n(16),o=n(4),s=n(220);n(10),n(47),n(256),n(257),n(260),n(261),n(262),n(263),i.fullCalendar=r,i.fn.fullCalendar=function(t){var e=Array.prototype.slice.call(arguments,1),n=this;return this.each(function(r,a){var l,u=i(a),d=u.data("fullCalendar");"string"==typeof t?"getCalendar"===t?r||(n=d):"destroy"===t?d&&(d.destroy(),u.removeData("fullCalendar")):d?i.isFunction(d[t])?(l=d[t].apply(d,e),r||(n=l),"destroy"===t&&u.removeData("fullCalendar")):o.warn("'"+t+"' is an unknown FullCalendar method."):o.warn("Attempting to call a FullCalendar method on an element with no calendar."):d||(d=new s.default(u,t),u.data("fullCalendar",d),d.render())}),n},t.exports=r},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(48),o=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.__extends(e,t),e.prototype.setElement=function(t){this.el=t,this.bindGlobalHandlers(),this.renderSkeleton(),this.set("isInDom",!0)},e.prototype.removeElement=function(){this.unset("isInDom"),this.unrenderSkeleton(),this.unbindGlobalHandlers(),this.el.remove()},e.prototype.bindGlobalHandlers=function(){},e.prototype.unbindGlobalHandlers=function(){},e.prototype.renderSkeleton=function(){},e.prototype.unrenderSkeleton=function(){},e}(r.default);e.default=o},function(t,e){Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t){this.items=t||[]}return t.prototype.proxyCall=function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];var i=[];return this.items.forEach(function(n){i.push(n[t].apply(n,e))}),i},t}();e.default=n},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(3),r=n(4),o=function(){function t(t,e){this.el=null,this.viewsWithButtons=[],this.calendar=t,this.toolbarOptions=e}return t.prototype.setToolbarOptions=function(t){this.toolbarOptions=t},t.prototype.render=function(){var t=this.toolbarOptions.layout,e=this.el;t?(e?e.empty():e=this.el=i("<div class='fc-toolbar "+this.toolbarOptions.extraClasses+"'/>"),e.append(this.renderSection("left")).append(this.renderSection("right")).append(this.renderSection("center")).append('<div class="fc-clear"/>')):this.removeElement()},t.prototype.removeElement=function(){this.el&&(this.el.remove(),this.el=null)},t.prototype.renderSection=function(t){var e=this,n=this.calendar,o=n.theme,s=n.optionsManager,a=n.viewSpecManager,l=i('<div class="fc-'+t+'"/>'),u=this.toolbarOptions.layout[t],d=s.get("customButtons")||{},c=s.overrides.buttonText||{},p=s.get("buttonText")||{};return u&&i.each(u.split(" "),function(t,s){var u,h=i(),f=!0;i.each(s.split(","),function(t,s){var l,u,g,v,y,m,b,w,D;"title"===s?(h=h.add(i("<h2> </h2>")),f=!1):((l=d[s])?(g=function(t){l.click&&l.click.call(w[0],t)},(v=o.getCustomButtonIconClass(l))||(v=o.getIconClass(s))||(y=l.text)):(u=a.getViewSpec(s))?(e.viewsWithButtons.push(s),g=function(){n.changeView(s)},(y=u.buttonTextOverride)||(v=o.getIconClass(s))||(y=u.buttonTextDefault)):n[s]&&(g=function(){n[s]()},(y=c[s])||(v=o.getIconClass(s))||(y=p[s])),g&&(b=["fc-"+s+"-button",o.getClass("button"),o.getClass("stateDefault")],y?(m=r.htmlEscape(y),D=""):v&&(m="<span class='"+v+"'></span>",D=' aria-label="'+s+'"'),w=i('<button type="button" class="'+b.join(" ")+'"'+D+">"+m+"</button>").click(function(t){w.hasClass(o.getClass("stateDisabled"))||(g(t),(w.hasClass(o.getClass("stateActive"))||w.hasClass(o.getClass("stateDisabled")))&&w.removeClass(o.getClass("stateHover")))}).mousedown(function(){w.not("."+o.getClass("stateActive")).not("."+o.getClass("stateDisabled")).addClass(o.getClass("stateDown"))}).mouseup(function(){w.removeClass(o.getClass("stateDown"))}).hover(function(){w.not("."+o.getClass("stateActive")).not("."+o.getClass("stateDisabled")).addClass(o.getClass("stateHover"))},function(){w.removeClass(o.getClass("stateHover")).removeClass(o.getClass("stateDown"))}),h=h.add(w)))}),f&&h.first().addClass(o.getClass("cornerLeft")).end().last().addClass(o.getClass("cornerRight")).end(),h.length>1?(u=i("<div/>"),f&&u.addClass(o.getClass("buttonGroup")),u.append(h),l.append(u)):l.append(h)}),l},t.prototype.updateTitle=function(t){this.el&&this.el.find("h2").text(t)},t.prototype.activateButton=function(t){this.el&&this.el.find(".fc-"+t+"-button").addClass(this.calendar.theme.getClass("stateActive"))},t.prototype.deactivateButton=function(t){this.el&&this.el.find(".fc-"+t+"-button").removeClass(this.calendar.theme.getClass("stateActive"))},t.prototype.disableButton=function(t){this.el&&this.el.find(".fc-"+t+"-button").prop("disabled",!0).addClass(this.calendar.theme.getClass("stateDisabled"))},t.prototype.enableButton=function(t){this.el&&this.el.find(".fc-"+t+"-button").prop("disabled",!1).removeClass(this.calendar.theme.getClass("stateDisabled"))},t.prototype.getViewsWithButtons=function(){return this.viewsWithButtons},t}();e.default=o},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(3),o=n(4),s=n(32),a=n(31),l=n(48),u=function(t){function e(e,n){var i=t.call(this)||this;return i._calendar=e,i.overrides=r.extend({},n),i.dynamicOverrides={},i.compute(),i}return i.__extends(e,t),e.prototype.add=function(t){var e,n=0;this.recordOverrides(t);for(e in t)n++;if(1===n){if("height"===e||"contentHeight"===e||"aspectRatio"===e)return void this._calendar.updateViewSize(!0);if("defaultDate"===e)return;if("businessHours"===e)return;if(/^(event|select)(Overlap|Constraint|Allow)$/.test(e))return;if("timezone"===e)return void this._calendar.view.flash("initialEvents")}this._calendar.renderHeader(),this._calendar.renderFooter(),this._calendar.viewsByType={},this._calendar.reinitView()},e.prototype.compute=function(){var t,e,n,i,r;t=o.firstDefined(this.dynamicOverrides.locale,this.overrides.locale),e=a.localeOptionHash[t],e||(t=s.globalDefaults.locale,e=a.localeOptionHash[t]||{}),n=o.firstDefined(this.dynamicOverrides.isRTL,this.overrides.isRTL,e.isRTL,s.globalDefaults.isRTL),i=n?s.rtlDefaults:{},this.dirDefaults=i,this.localeDefaults=e,r=s.mergeOptions([s.globalDefaults,i,e,this.overrides,this.dynamicOverrides]),a.populateInstanceComputableOptions(r),this.reset(r)},e.prototype.recordOverrides=function(t){var e;for(e in t)this.dynamicOverrides[e]=t[e];this._calendar.viewSpecManager.clearCache(),this.compute()},e}(l.default);e.default=u},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(0),r=n(3),o=n(22),s=n(4),a=n(32),l=n(31),u=function(){function t(t,e){this.optionsManager=t,this._calendar=e,this.clearCache()}return t.prototype.clearCache=function(){this.viewSpecCache={}},t.prototype.getViewSpec=function(t){var e=this.viewSpecCache;return e[t]||(e[t]=this.buildViewSpec(t))},t.prototype.getUnitViewSpec=function(t){var e,n,i;if(-1!==r.inArray(t,s.unitsDesc))for(e=this._calendar.header.getViewsWithButtons(),r.each(o.viewHash,function(t){e.push(t)}),n=0;n<e.length;n++)if((i=this.getViewSpec(e[n]))&&i.singleUnit===t)return i},t.prototype.buildViewSpec=function(t){for(var e,n,r,l,u,d=this.optionsManager.overrides.views||{},c=[],p=[],h=[],f=t;f;)e=o.viewHash[f],n=d[f],f=null,"function"==typeof e&&(e={class:e}),e&&(c.unshift(e),p.unshift(e.defaults||{}),r=r||e.duration,f=f||e.type),n&&(h.unshift(n),r=r||n.duration,f=f||n.type);return e=s.mergeProps(c),e.type=t,!!e.class&&(r=r||this.optionsManager.dynamicOverrides.duration||this.optionsManager.overrides.duration,r&&(l=i.duration(r),l.valueOf()&&(u=s.computeDurationGreatestUnit(l,r),e.duration=l,e.durationUnit=u,1===l.as(u)&&(e.singleUnit=u,h.unshift(d[u]||{})))),e.defaults=a.mergeOptions(p),e.overrides=a.mergeOptions(h),this.buildViewSpecOptions(e),this.buildViewSpecButtonText(e,t),e)},t.prototype.buildViewSpecOptions=function(t){var e=this.optionsManager;t.options=a.mergeOptions([a.globalDefaults,t.defaults,e.dirDefaults,e.localeDefaults,e.overrides,t.overrides,e.dynamicOverrides]),l.populateInstanceComputableOptions(t.options)},t.prototype.buildViewSpecButtonText=function(t,e){function n(n){var i=n.buttonText||{};return i[e]||(t.buttonTextKey?i[t.buttonTextKey]:null)||(t.singleUnit?i[t.singleUnit]:null)}var i=this.optionsManager;t.buttonTextOverride=n(i.dynamicOverrides)||n(i.overrides)||t.overrides.buttonText,t.buttonTextDefault=n(i.localeDefaults)||n(i.dirDefaults)||t.defaults.buttonText||n(a.globalDefaults)||(t.duration?this._calendar.humanizeDuration(t.duration):null)||e},t}();e.default=u},function(t,e,n){function i(t,e){return t.getPrimitive()===e.getPrimitive()}Object.defineProperty(e,"__esModule",{value:!0});var r=n(3),o=n(4),s=n(243),a=n(52),l=n(6),u=n(38),d=n(13),c=n(18),p=n(11),h=n(7),f=function(){function t(t){this.calendar=t,this.stickySource=new a.default(t),this.otherSources=[]}return t.prototype.requestEvents=function(t,e,n,i){return!i&&this.currentPeriod&&this.currentPeriod.isWithinRange(t,e)&&n===this.currentPeriod.timezone||this.setPeriod(new s.default(t,e,n)),this.currentPeriod.whenReleased()},t.prototype.addSource=function(t){this.otherSources.push(t),this.currentPeriod&&this.currentPeriod.requestSource(t)},t.prototype.removeSource=function(t){o.removeExact(this.otherSources,t),this.currentPeriod&&this.currentPeriod.purgeSource(t)},t.prototype.removeAllSources=function(){this.otherSources=[],this.currentPeriod&&this.currentPeriod.purgeAllSources()},t.prototype.refetchSource=function(t){var e=this.currentPeriod;e&&(e.freeze(),e.purgeSource(t),e.requestSource(t),e.thaw())},t.prototype.refetchAllSources=function(){var t=this.currentPeriod;t&&(t.freeze(),t.purgeAllSources(),t.requestSources(this.getSources()),t.thaw())},t.prototype.getSources=function(){return[this.stickySource].concat(this.otherSources)},t.prototype.multiQuerySources=function(t){t?r.isArray(t)||(t=[t]):t=[];var e,n=[];for(e=0;e<t.length;e++)n.push.apply(n,this.querySources(t[e]));return n},t.prototype.querySources=function(t){var e,n,o=this.otherSources;for(e=0;e<o.length;e++)if((n=o[e])===t)return[n];return(n=this.getSourceById(l.default.normalizeId(t)))?[n]:(t=u.default.parse(t,this.calendar),t?r.grep(o,function(e){return i(t,e)}):void 0)},t.prototype.getSourceById=function(t){return r.grep(this.otherSources,function(e){return e.id&&e.id===t})[0]},t.prototype.setPeriod=function(t){this.currentPeriod&&(this.unbindPeriod(this.currentPeriod),this.currentPeriod=null),this.currentPeriod=t,this.bindPeriod(t),t.requestSources(this.getSources())},t.prototype.bindPeriod=function(t){this.listenTo(t,"release",function(t){this.trigger("release",t)})},t.prototype.unbindPeriod=function(t){this.stopListeningTo(t)},t.prototype.getEventDefByUid=function(t){if(this.currentPeriod)return this.currentPeriod.getEventDefByUid(t)},t.prototype.addEventDef=function(t,e){e&&this.stickySource.addEventDef(t),this.currentPeriod&&this.currentPeriod.addEventDef(t)},t.prototype.removeEventDefsById=function(t){this.getSources().forEach(function(e){e.removeEventDefsById(t)}),this.currentPeriod&&this.currentPeriod.removeEventDefsById(t)},t.prototype.removeAllEventDefs=function(){this.getSources().forEach(function(t){t.removeAllEventDefs()}),this.currentPeriod&&this.currentPeriod.removeAllEventDefs()},t.prototype.mutateEventsWithId=function(t,e){var n,i=this.currentPeriod,r=[];return i?(i.freeze(),n=i.getEventDefsById(t),n.forEach(function(t){i.removeEventDef(t),r.push(e.mutateSingle(t)),i.addEventDef(t)}),i.thaw(),function(){i.freeze();for(var t=0;t<n.length;t++)i.removeEventDef(n[t]),r[t](),i.addEventDef(n[t]);i.thaw()}):function(){}},t.prototype.buildMutatedEventInstanceGroup=function(t,e){var n,i,r=this.getEventDefsById(t),o=[];for(n=0;n<r.length;n++)(i=r[n].clone())instanceof d.default&&(e.mutateSingle(i),o.push.apply(o,i.buildInstances()));return new c.default(o)},t.prototype.freeze=function(){this.currentPeriod&&this.currentPeriod.freeze()},t.prototype.thaw=function(){this.currentPeriod&&this.currentPeriod.thaw()},t.prototype.getEventDefsById=function(t){return this.currentPeriod.getEventDefsById(t)},t.prototype.getEventInstances=function(){return this.currentPeriod.getEventInstances()},t.prototype.getEventInstancesWithId=function(t){return this.currentPeriod.getEventInstancesWithId(t)},t.prototype.getEventInstancesWithoutId=function(t){return this.currentPeriod.getEventInstancesWithoutId(t)},t}();e.default=f,p.default.mixInto(f),h.default.mixInto(f)},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(3),r=n(4),o=n(20),s=n(11),a=n(5),l=n(18),u=function(){function t(t,e,n){this.pendingCnt=0,this.freezeDepth=0,this.stuntedReleaseCnt=0,this.releaseCnt=0,this.start=t,this.end=e,this.timezone=n,this.unzonedRange=new a.default(t.clone().stripZone(),e.clone().stripZone()),this.requestsByUid={},this.eventDefsByUid={},this.eventDefsById={},this.eventInstanceGroupsById={}}return t.prototype.isWithinRange=function(t,e){return!t.isBefore(this.start)&&!e.isAfter(this.end)},t.prototype.requestSources=function(t){this.freeze();for(var e=0;e<t.length;e++)this.requestSource(t[e]);this.thaw()},t.prototype.requestSource=function(t){var e=this,n={source:t,status:"pending",eventDefs:null};this.requestsByUid[t.uid]=n,this.pendingCnt+=1,t.fetch(this.start,this.end,this.timezone).then(function(t){"cancelled"!==n.status&&(n.status="completed",n.eventDefs=t,e.addEventDefs(t),e.pendingCnt--,e.tryRelease())},function(){"cancelled"!==n.status&&(n.status="failed",e.pendingCnt--,e.tryRelease())})},t.prototype.purgeSource=function(t){var e=this.requestsByUid[t.uid];e&&(delete this.requestsByUid[t.uid],"pending"===e.status?(e.status="cancelled",this.pendingCnt--,this.tryRelease()):"completed"===e.status&&e.eventDefs.forEach(this.removeEventDef.bind(this)))},t.prototype.purgeAllSources=function(){var t,e,n=this.requestsByUid,i=0;for(t in n)e=n[t],"pending"===e.status?e.status="cancelled":"completed"===e.status&&i++;this.requestsByUid={},this.pendingCnt=0,i&&this.removeAllEventDefs()},t.prototype.getEventDefByUid=function(t){return this.eventDefsByUid[t]},t.prototype.getEventDefsById=function(t){var e=this.eventDefsById[t];return e?e.slice():[]},t.prototype.addEventDefs=function(t){for(var e=0;e<t.length;e++)this.addEventDef(t[e])},t.prototype.addEventDef=function(t){var e,n=this.eventDefsById,i=t.id,r=n[i]||(n[i]=[]),o=t.buildInstances(this.unzonedRange);for(r.push(t),this.eventDefsByUid[t.uid]=t,e=0;e<o.length;e++)this.addEventInstance(o[e],i)},t.prototype.removeEventDefsById=function(t){var e=this;this.getEventDefsById(t).forEach(function(t){e.removeEventDef(t)})},t.prototype.removeAllEventDefs=function(){var t=i.isEmptyObject(this.eventDefsByUid);this.eventDefsByUid={},this.eventDefsById={},this.eventInstanceGroupsById={},t||this.tryRelease()},t.prototype.removeEventDef=function(t){var e=this.eventDefsById,n=e[t.id]
-;delete this.eventDefsByUid[t.uid],n&&(r.removeExact(n,t),n.length||delete e[t.id],this.removeEventInstancesForDef(t))},t.prototype.getEventInstances=function(){var t,e=this.eventInstanceGroupsById,n=[];for(t in e)n.push.apply(n,e[t].eventInstances);return n},t.prototype.getEventInstancesWithId=function(t){var e=this.eventInstanceGroupsById[t];return e?e.eventInstances.slice():[]},t.prototype.getEventInstancesWithoutId=function(t){var e,n=this.eventInstanceGroupsById,i=[];for(e in n)e!==t&&i.push.apply(i,n[e].eventInstances);return i},t.prototype.addEventInstance=function(t,e){var n=this.eventInstanceGroupsById;(n[e]||(n[e]=new l.default)).eventInstances.push(t),this.tryRelease()},t.prototype.removeEventInstancesForDef=function(t){var e,n=this.eventInstanceGroupsById,i=n[t.id];i&&(e=r.removeMatching(i.eventInstances,function(e){return e.def===t}),i.eventInstances.length||delete n[t.id],e&&this.tryRelease())},t.prototype.tryRelease=function(){this.pendingCnt||(this.freezeDepth?this.stuntedReleaseCnt++:this.release())},t.prototype.release=function(){this.releaseCnt++,this.trigger("release",this.eventInstanceGroupsById)},t.prototype.whenReleased=function(){var t=this;return this.releaseCnt?o.default.resolve(this.eventInstanceGroupsById):o.default.construct(function(e){t.one("release",e)})},t.prototype.freeze=function(){this.freezeDepth++||(this.stuntedReleaseCnt=0)},t.prototype.thaw=function(){--this.freezeDepth||!this.stuntedReleaseCnt||this.pendingCnt||this.release()},t}();e.default=u,s.default.mixInto(u)},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(3),r=n(4),o=n(7),s=function(){function t(t,e){this.isFollowing=!1,this.isHidden=!1,this.isAnimating=!1,this.options=e=e||{},this.sourceEl=t,this.parentEl=e.parentEl?i(e.parentEl):t.parent()}return t.prototype.start=function(t){this.isFollowing||(this.isFollowing=!0,this.y0=r.getEvY(t),this.x0=r.getEvX(t),this.topDelta=0,this.leftDelta=0,this.isHidden||this.updatePosition(),r.getEvIsTouch(t)?this.listenTo(i(document),"touchmove",this.handleMove):this.listenTo(i(document),"mousemove",this.handleMove))},t.prototype.stop=function(t,e){var n=this,r=this.options.revertDuration,o=function(){n.isAnimating=!1,n.removeElement(),n.top0=n.left0=null,e&&e()};this.isFollowing&&!this.isAnimating&&(this.isFollowing=!1,this.stopListeningTo(i(document)),t&&r&&!this.isHidden?(this.isAnimating=!0,this.el.animate({top:this.top0,left:this.left0},{duration:r,complete:o})):o())},t.prototype.getEl=function(){var t=this.el;return t||(t=this.el=this.sourceEl.clone().addClass(this.options.additionalClass||"").css({position:"absolute",visibility:"",display:this.isHidden?"none":"",margin:0,right:"auto",bottom:"auto",width:this.sourceEl.width(),height:this.sourceEl.height(),opacity:this.options.opacity||"",zIndex:this.options.zIndex}),t.addClass("fc-unselectable"),t.appendTo(this.parentEl)),t},t.prototype.removeElement=function(){this.el&&(this.el.remove(),this.el=null)},t.prototype.updatePosition=function(){var t,e;this.getEl(),null==this.top0&&(t=this.sourceEl.offset(),e=this.el.offsetParent().offset(),this.top0=t.top-e.top,this.left0=t.left-e.left),this.el.css({top:this.top0+this.topDelta,left:this.left0+this.leftDelta})},t.prototype.handleMove=function(t){this.topDelta=r.getEvY(t)-this.y0,this.leftDelta=r.getEvX(t)-this.x0,this.isHidden||this.updatePosition()},t.prototype.hide=function(){this.isHidden||(this.isHidden=!0,this.el&&this.el.hide())},t.prototype.show=function(){this.isHidden&&(this.isHidden=!1,this.updatePosition(),this.getEl().show())},t}();e.default=s,o.default.mixInto(s)},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(23),o=n(15),s=function(t){function e(e){var n=t.call(this,e)||this;return n.dragListener=n.buildDragListener(),n}return i.__extends(e,t),e.prototype.end=function(){this.dragListener.endInteraction()},e.prototype.bindToEl=function(t){var e=this.component,n=this.dragListener;e.bindDateHandlerToEl(t,"mousedown",function(t){e.shouldIgnoreMouse()||n.startInteraction(t)}),e.bindDateHandlerToEl(t,"touchstart",function(t){e.shouldIgnoreTouch()||n.startInteraction(t)})},e.prototype.buildDragListener=function(){var t,e=this,n=this.component,i=new r.default(n,{scroll:this.opt("dragScroll"),interactionStart:function(){t=i.origHit},hitOver:function(e,n,i){n||(t=null)},hitOut:function(){t=null},interactionEnd:function(i,r){var o;!r&&t&&(o=n.getSafeHitFootprint(t))&&e.view.triggerDayClick(o,n.getHitEl(t),i)}});return i.shouldCancelTouchScroll=!1,i.scrollAlwaysKills=!0,i},e}(o.default);e.default=s},function(t,e,n){function i(t){var e,n,i,r=[];for(e=0;e<t.length;e++){for(n=t[e],i=0;i<r.length&&s(n,r[i]).length;i++);n.level=i,(r[i]||(r[i]=[])).push(n)}return r}function r(t){var e,n,i,r,o;for(e=0;e<t.length;e++)for(n=t[e],i=0;i<n.length;i++)for(r=n[i],r.forwardSegs=[],o=e+1;o<t.length;o++)s(r,t[o],r.forwardSegs)}function o(t){var e,n,i=t.forwardSegs,r=0;if(void 0===t.forwardPressure){for(e=0;e<i.length;e++)n=i[e],o(n),r=Math.max(r,1+n.forwardPressure);t.forwardPressure=r}}function s(t,e,n){void 0===n&&(n=[]);for(var i=0;i<e.length;i++)a(t,e[i])&&n.push(e[i]);return n}function a(t,e){return t.bottom>e.top&&t.top<e.bottom}Object.defineProperty(e,"__esModule",{value:!0});var l=n(2),u=n(4),d=n(42),c=function(t){function e(e,n){var i=t.call(this,e,n)||this;return i.timeGrid=e,i}return l.__extends(e,t),e.prototype.renderFgSegs=function(t){this.renderFgSegsIntoContainers(t,this.timeGrid.fgContainerEls)},e.prototype.renderFgSegsIntoContainers=function(t,e){var n,i;for(n=this.timeGrid.groupSegsByCol(t),i=0;i<this.timeGrid.colCnt;i++)this.updateFgSegCoords(n[i]);this.timeGrid.attachSegsByCol(n,e)},e.prototype.unrenderFgSegs=function(){this.fgSegs&&this.fgSegs.forEach(function(t){t.el.remove()})},e.prototype.computeEventTimeFormat=function(){return this.opt("noMeridiemTimeFormat")},e.prototype.computeDisplayEventEnd=function(){return!0},e.prototype.fgSegHtml=function(t,e){var n,i,r,o=this.view,s=o.calendar,a=t.footprint.componentFootprint,l=a.isAllDay,d=t.footprint.eventDef,c=o.isEventDefDraggable(d),p=!e&&t.isStart&&o.isEventDefResizableFromStart(d),h=!e&&t.isEnd&&o.isEventDefResizableFromEnd(d),f=this.getSegClasses(t,c,p||h),g=u.cssToStr(this.getSkinCss(d));if(f.unshift("fc-time-grid-event","fc-v-event"),o.isMultiDayRange(a.unzonedRange)){if(t.isStart||t.isEnd){var v=s.msToMoment(t.startMs),y=s.msToMoment(t.endMs);n=this._getTimeText(v,y,l),i=this._getTimeText(v,y,l,"LT"),r=this._getTimeText(v,y,l,null,!1)}}else n=this.getTimeText(t.footprint),i=this.getTimeText(t.footprint,"LT"),r=this.getTimeText(t.footprint,null,!1);return'<a class="'+f.join(" ")+'"'+(d.url?' href="'+u.htmlEscape(d.url)+'"':"")+(g?' style="'+g+'"':"")+'><div class="fc-content">'+(n?'<div class="fc-time" data-start="'+u.htmlEscape(r)+'" data-full="'+u.htmlEscape(i)+'"><span>'+u.htmlEscape(n)+"</span></div>":"")+(d.title?'<div class="fc-title">'+u.htmlEscape(d.title)+"</div>":"")+'</div><div class="fc-bg"/>'+(h?'<div class="fc-resizer fc-end-resizer" />':"")+"</a>"},e.prototype.updateFgSegCoords=function(t){this.timeGrid.computeSegVerticals(t),this.computeFgSegHorizontals(t),this.timeGrid.assignSegVerticals(t),this.assignFgSegHorizontals(t)},e.prototype.computeFgSegHorizontals=function(t){var e,n,s;if(this.sortEventSegs(t),e=i(t),r(e),n=e[0]){for(s=0;s<n.length;s++)o(n[s]);for(s=0;s<n.length;s++)this.computeFgSegForwardBack(n[s],0,0)}},e.prototype.computeFgSegForwardBack=function(t,e,n){var i,r=t.forwardSegs;if(void 0===t.forwardCoord)for(r.length?(this.sortForwardSegs(r),this.computeFgSegForwardBack(r[0],e+1,n),t.forwardCoord=r[0].backwardCoord):t.forwardCoord=1,t.backwardCoord=t.forwardCoord-(t.forwardCoord-n)/(e+1),i=0;i<r.length;i++)this.computeFgSegForwardBack(r[i],0,t.forwardCoord)},e.prototype.sortForwardSegs=function(t){t.sort(u.proxy(this,"compareForwardSegs"))},e.prototype.compareForwardSegs=function(t,e){return e.forwardPressure-t.forwardPressure||(t.backwardCoord||0)-(e.backwardCoord||0)||this.compareEventSegs(t,e)},e.prototype.assignFgSegHorizontals=function(t){var e,n;for(e=0;e<t.length;e++)n=t[e],n.el.css(this.generateFgSegHorizontalCss(n)),n.bottom-n.top<30&&n.el.addClass("fc-short")},e.prototype.generateFgSegHorizontalCss=function(t){var e,n,i=this.opt("slotEventOverlap"),r=t.backwardCoord,o=t.forwardCoord,s=this.timeGrid.generateSegVerticalCss(t),a=this.timeGrid.isRTL;return i&&(o=Math.min(1,r+2*(o-r))),a?(e=1-o,n=r):(e=r,n=1-o),s.zIndex=t.level+1,s.left=100*e+"%",s.right=100*n+"%",i&&t.forwardPressure&&(s[a?"marginLeft":"marginRight"]=20),s},e}(d.default);e.default=c},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(3),o=n(58),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.__extends(e,t),e.prototype.renderSegs=function(t,e){var n,i,o,s=[];for(this.eventRenderer.renderFgSegsIntoContainers(t,this.component.helperContainerEls),n=0;n<t.length;n++)i=t[n],e&&e.col===i.col&&(o=e.el,i.el.css({left:o.css("left"),right:o.css("right"),"margin-left":o.css("margin-left"),"margin-right":o.css("margin-right")})),s.push(i.el[0]);return r(s)},e}(o.default);e.default=s},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(57),o=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.__extends(e,t),e.prototype.attachSegEls=function(t,e){var n,i=this.component;return"bgEvent"===t?n=i.bgContainerEls:"businessHours"===t?n=i.businessContainerEls:"highlight"===t&&(n=i.highlightContainerEls),i.updateSegVerticals(e),i.attachSegsByCol(i.groupSegsByCol(e),n),e.map(function(t){return t.el[0]})},e}(r.default);e.default=o},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(3),r=n(4),o=n(7),s=function(){function t(t){this.isHidden=!0,this.margin=10,this.options=t||{}}return t.prototype.show=function(){this.isHidden&&(this.el||this.render(),this.el.show(),this.position(),this.isHidden=!1,this.trigger("show"))},t.prototype.hide=function(){this.isHidden||(this.el.hide(),this.isHidden=!0,this.trigger("hide"))},t.prototype.render=function(){var t=this,e=this.options;this.el=i('<div class="fc-popover"/>').addClass(e.className||"").css({top:0,left:0}).append(e.content).appendTo(e.parentEl),this.el.on("click",".fc-close",function(){t.hide()}),e.autoHide&&this.listenTo(i(document),"mousedown",this.documentMousedown)},t.prototype.documentMousedown=function(t){this.el&&!i(t.target).closest(this.el).length&&this.hide()},t.prototype.removeElement=function(){this.hide(),this.el&&(this.el.remove(),this.el=null),this.stopListeningTo(i(document),"mousedown")},t.prototype.position=function(){var t,e,n,o,s,a=this.options,l=this.el.offsetParent().offset(),u=this.el.outerWidth(),d=this.el.outerHeight(),c=i(window),p=r.getScrollParent(this.el);o=a.top||0,s=void 0!==a.left?a.left:void 0!==a.right?a.right-u:0,p.is(window)||p.is(document)?(p=c,t=0,e=0):(n=p.offset(),t=n.top,e=n.left),t+=c.scrollTop(),e+=c.scrollLeft(),!1!==a.viewportConstrain&&(o=Math.min(o,t+p.outerHeight()-d-this.margin),o=Math.max(o,t+this.margin),s=Math.min(s,e+p.outerWidth()-u-this.margin),s=Math.max(s,e+this.margin)),this.el.css({top:o-l.top,left:s-l.left})},t.prototype.trigger=function(t){this.options[t]&&this.options[t].apply(this,Array.prototype.slice.call(arguments,1))},t}();e.default=s,o.default.mixInto(s)},function(t,e,n){function i(t,e){var n,i;for(n=0;n<e.length;n++)if(i=e[n],i.leftCol<=t.rightCol&&i.rightCol>=t.leftCol)return!0;return!1}function r(t,e){return t.leftCol-e.leftCol}Object.defineProperty(e,"__esModule",{value:!0});var o=n(2),s=n(3),a=n(4),l=n(42),u=function(t){function e(e,n){var i=t.call(this,e,n)||this;return i.dayGrid=e,i}return o.__extends(e,t),e.prototype.renderBgRanges=function(e){e=s.grep(e,function(t){return t.eventDef.isAllDay()}),t.prototype.renderBgRanges.call(this,e)},e.prototype.renderFgSegs=function(t){var e=this.rowStructs=this.renderSegRows(t);this.dayGrid.rowEls.each(function(t,n){s(n).find(".fc-content-skeleton > table").append(e[t].tbodyEl)})},e.prototype.unrenderFgSegs=function(){for(var t,e=this.rowStructs||[];t=e.pop();)t.tbodyEl.remove();this.rowStructs=null},e.prototype.renderSegRows=function(t){var e,n,i=[];for(e=this.groupSegRows(t),n=0;n<e.length;n++)i.push(this.renderSegRow(n,e[n]));return i},e.prototype.renderSegRow=function(t,e){function n(t){for(;o<t;)d=(y[i-1]||[])[o],d?d.attr("rowspan",parseInt(d.attr("rowspan")||1,10)+1):(d=s("<td/>"),a.append(d)),v[i][o]=d,y[i][o]=d,o++}var i,r,o,a,l,u,d,c=this.dayGrid.colCnt,p=this.buildSegLevels(e),h=Math.max(1,p.length),f=s("<tbody/>"),g=[],v=[],y=[];for(i=0;i<h;i++){if(r=p[i],o=0,a=s("<tr/>"),g.push([]),v.push([]),y.push([]),r)for(l=0;l<r.length;l++){for(u=r[l],n(u.leftCol),d=s('<td class="fc-event-container"/>').append(u.el),u.leftCol!==u.rightCol?d.attr("colspan",u.rightCol-u.leftCol+1):y[i][o]=d;o<=u.rightCol;)v[i][o]=d,g[i][o]=u,o++;a.append(d)}n(c),this.dayGrid.bookendCells(a),f.append(a)}return{row:t,tbodyEl:f,cellMatrix:v,segMatrix:g,segLevels:p,segs:e}},e.prototype.buildSegLevels=function(t){var e,n,o,s=[];for(this.sortEventSegs(t),e=0;e<t.length;e++){for(n=t[e],o=0;o<s.length&&i(n,s[o]);o++);n.level=o,(s[o]||(s[o]=[])).push(n)}for(o=0;o<s.length;o++)s[o].sort(r);return s},e.prototype.groupSegRows=function(t){var e,n=[];for(e=0;e<this.dayGrid.rowCnt;e++)n.push([]);for(e=0;e<t.length;e++)n[t[e].row].push(t[e]);return n},e.prototype.computeEventTimeFormat=function(){return this.opt("extraSmallTimeFormat")},e.prototype.computeDisplayEventEnd=function(){return 1===this.dayGrid.colCnt},e.prototype.fgSegHtml=function(t,e){var n,i,r=this.view,o=t.footprint.eventDef,s=t.footprint.componentFootprint.isAllDay,l=r.isEventDefDraggable(o),u=!e&&s&&t.isStart&&r.isEventDefResizableFromStart(o),d=!e&&s&&t.isEnd&&r.isEventDefResizableFromEnd(o),c=this.getSegClasses(t,l,u||d),p=a.cssToStr(this.getSkinCss(o)),h="";return c.unshift("fc-day-grid-event","fc-h-event"),t.isStart&&(n=this.getTimeText(t.footprint))&&(h='<span class="fc-time">'+a.htmlEscape(n)+"</span>"),i='<span class="fc-title">'+(a.htmlEscape(o.title||"")||" ")+"</span>",'<a class="'+c.join(" ")+'"'+(o.url?' href="'+a.htmlEscape(o.url)+'"':"")+(p?' style="'+p+'"':"")+'><div class="fc-content">'+(this.dayGrid.isRTL?i+" "+h:h+" "+i)+"</div>"+(u?'<div class="fc-resizer fc-start-resizer" />':"")+(d?'<div class="fc-resizer fc-end-resizer" />':"")+"</a>"},e}(l.default);e.default=u},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(3),o=n(58),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.__extends(e,t),e.prototype.renderSegs=function(t,e){var n,i=[];return n=this.eventRenderer.renderSegRows(t),this.component.rowEls.each(function(t,o){var s,a,l=r(o),u=r('<div class="fc-helper-skeleton"><table/></div>');e&&e.row===t?a=e.el.position().top:(s=l.find(".fc-content-skeleton tbody"),s.length||(s=l.find(".fc-content-skeleton table")),a=s.position().top),u.css("top",a).find("table").append(n[t].tbodyEl),l.append(u),i.push(u[0])}),r(i)},e}(o.default);e.default=s},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(3),o=n(57),s=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.fillSegTag="td",e}return i.__extends(e,t),e.prototype.attachSegEls=function(t,e){var n,i,r,o=[];for(n=0;n<e.length;n++)i=e[n],r=this.renderFillRow(t,i),this.component.rowEls.eq(i.row).append(r),o.push(r[0]);return o},e.prototype.renderFillRow=function(t,e){var n,i,o,s=this.component.colCnt,a=e.leftCol,l=e.rightCol+1;return n="businessHours"===t?"bgevent":t.toLowerCase(),i=r('<div class="fc-'+n+'-skeleton"><table><tr/></table></div>'),o=i.find("tr"),a>0&&o.append('<td colspan="'+a+'"/>'),o.append(e.el.attr("colspan",l-a)),l<s&&o.append('<td colspan="'+(s-l)+'"/>'),this.component.bookendCells(o),i},e}(o.default);e.default=s},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(228),o=n(5),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.__extends(e,t),e.prototype.buildRenderRange=function(e,n,i){var r,s=t.prototype.buildRenderRange.call(this,e,n,i),a=this.msToUtcMoment(s.startMs,i),l=this.msToUtcMoment(s.endMs,i);return this.opt("fixedWeekCount")&&(r=Math.ceil(l.diff(a,"weeks",!0)),l.add(6-r,"weeks")),new o.default(a,l)},e}(r.default);e.default=s},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(4),o=n(42),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.__extends(e,t),e.prototype.renderFgSegs=function(t){t.length?this.component.renderSegList(t):this.component.renderEmptyMessage()},e.prototype.fgSegHtml=function(t){var e,n=this.view,i=n.calendar,o=i.theme,s=t.footprint,a=s.eventDef,l=s.componentFootprint,u=a.url,d=["fc-list-item"].concat(this.getClasses(a)),c=this.getBgColor(a);return e=l.isAllDay?n.getAllDayHtml():n.isMultiDayRange(l.unzonedRange)?t.isStart||t.isEnd?r.htmlEscape(this._getTimeText(i.msToMoment(t.startMs),i.msToMoment(t.endMs),l.isAllDay)):n.getAllDayHtml():r.htmlEscape(this.getTimeText(s)),u&&d.push("fc-has-url"),'<tr class="'+d.join(" ")+'">'+(this.displayEventTime?'<td class="fc-list-item-time '+o.getClass("widgetContent")+'">'+(e||"")+"</td>":"")+'<td class="fc-list-item-marker '+o.getClass("widgetContent")+'"><span class="fc-event-dot"'+(c?' style="background-color:'+c+'"':"")+'></span></td><td class="fc-list-item-title '+o.getClass("widgetContent")+'"><a'+(u?' href="'+r.htmlEscape(u)+'"':"")+">"+r.htmlEscape(a.title||"")+"</a></td></tr>"},e.prototype.computeEventTimeFormat=function(){return this.opt("mediumTimeFormat")},e}(o.default);e.default=s},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(3),o=n(59),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.__extends(e,t),e.prototype.handleClick=function(e,n){var i;t.prototype.handleClick.call(this,e,n),r(n.target).closest("a[href]").length||(i=e.footprint.eventDef.url)&&!n.isDefaultPrevented()&&(window.location.href=i)},e}(o.default);e.default=s},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(38),r=n(52),o=n(215),s=n(216);i.default.registerClass(r.default),i.default.registerClass(o.default),i.default.registerClass(s.default)},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(51),r=n(213),o=n(214),s=n(258),a=n(259);i.defineThemeSystem("standard",r.default),i.defineThemeSystem("jquery-ui",o.default),i.defineThemeSystem("bootstrap3",s.default),i.defineThemeSystem("bootstrap4",a.default)},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(19),o=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.__extends(e,t),e}(r.default);e.default=o,o.prototype.classes={widget:"fc-bootstrap3",tableGrid:"table-bordered",tableList:"table",tableListHeading:"active",buttonGroup:"btn-group",button:"btn btn-default",stateActive:"active",stateDisabled:"disabled",today:"alert alert-info",popover:"panel panel-default",popoverHeader:"panel-heading",popoverContent:"panel-body",headerRow:"panel-default",dayRow:"panel-default",listView:"panel panel-default"},o.prototype.baseIconClass="glyphicon",o.prototype.iconClasses={close:"glyphicon-remove",prev:"glyphicon-chevron-left",next:"glyphicon-chevron-right",prevYear:"glyphicon-backward",nextYear:"glyphicon-forward"},o.prototype.iconOverrideOption="bootstrapGlyphicons",o.prototype.iconOverrideCustomButtonOption="bootstrapGlyphicon",o.prototype.iconOverridePrefix="glyphicon-"},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=n(19),o=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.__extends(e,t),e}(r.default);e.default=o,o.prototype.classes={widget:"fc-bootstrap4",tableGrid:"table-bordered",tableList:"table",tableListHeading:"table-active",buttonGroup:"btn-group",button:"btn btn-primary",stateActive:"active",stateDisabled:"disabled",today:"alert alert-info",popover:"card card-primary",popoverHeader:"card-header",popoverContent:"card-body",headerRow:"table-bordered",dayRow:"table-bordered",listView:"card card-primary"},o.prototype.baseIconClass="fa",o.prototype.iconClasses={close:"fa-times",prev:"fa-chevron-left",next:"fa-chevron-right",prevYear:"fa-angle-double-left",nextYear:"fa-angle-double-right"},o.prototype.iconOverrideOption="bootstrapFontAwesome",o.prototype.iconOverrideCustomButtonOption="bootstrapFontAwesome",o.prototype.iconOverridePrefix="fa-"},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(22),r=n(62),o=n(229);i.defineView("basic",{class:r.default}),i.defineView("basicDay",{type:"basic",duration:{days:1}}),i.defineView("basicWeek",{type:"basic",duration:{weeks:1}}),i.defineView("month",{class:o.default,duration:{months:1},defaults:{fixedWeekCount:!0}})},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(22),r=n(226);i.defineView("agenda",{class:r.default,defaults:{allDaySlot:!0,slotDuration:"00:30:00",slotEventOverlap:!0}}),i.defineView("agendaDay",{type:"agenda",duration:{days:1}}),i.defineView("agendaWeek",{type:"agenda",duration:{weeks:1}})},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i=n(22),r=n(230);i.defineView("list",{class:r.default,buttonTextKey:"list",defaults:{buttonText:"list",listDayFormat:"LL",noEventsMessage:"No events to display"}}),i.defineView("listDay",{type:"list",duration:{days:1},defaults:{listDayFormat:"dddd"}}),i.defineView("listWeek",{type:"list",duration:{weeks:1},defaults:{listDayFormat:"dddd",listDayAltFormat:"LL"}}),i.defineView("listMonth",{type:"list",duration:{month:1},defaults:{listDayAltFormat:"dddd"}}),i.defineView("listYear",{type:"list",duration:{year:1},defaults:{listDayAltFormat:"dddd"}})},function(t,e){Object.defineProperty(e,"__esModule",{value:!0})}])});
\ No newline at end of file
+++ /dev/null
-/*!
- * FullCalendar v3.9.0
- * Docs & License: https://fullcalendar.io/
- * (c) 2018 Adam Shaw
- */
-/*!
- * FullCalendar v3.9.0 Print Stylesheet
- * Docs & License: https://fullcalendar.io/
- * (c) 2018 Adam Shaw
- */
-/*
- * Include this stylesheet on your page to get a more printer-friendly calendar.
- * When including this stylesheet, use the media='print' attribute of the <link> tag.
- * Make sure to include this stylesheet IN ADDITION to the regular fullcalendar.css.
- */
-.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-helper-skeleton,
-.fc-bgevent-container,
-.fc-business-container,
-.fc-highlight-container,
-.fc-helper-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-agenda-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 */ }
+++ /dev/null
-/*!
- * FullCalendar v3.9.0
- * Docs & License: https://fullcalendar.io/
- * (c) 2018 Adam Shaw
- *//*!
- * FullCalendar v3.9.0 Print Stylesheet
- * Docs & License: https://fullcalendar.io/
- * (c) 2018 Adam Shaw
- */.fc-bg,.fc-bgevent-container,.fc-bgevent-skeleton,.fc-business-container,.fc-event .fc-resizer,.fc-helper-container,.fc-helper-skeleton,.fc-highlight-container,.fc-highlight-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-agenda-view .fc-axis,.fc-popover{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
+++ /dev/null
-/*!
- * FullCalendar v3.9.0
- * Docs & License: https://fullcalendar.io/
- * (c) 2018 Adam Shaw
- */
-(function webpackUniversalModuleDefinition(root, factory) {
- if(typeof exports === 'object' && typeof module === 'object')
- module.exports = factory(require("fullcalendar"), require("jquery"));
- else if(typeof define === 'function' && define.amd)
- define(["fullcalendar", "jquery"], factory);
- else if(typeof exports === 'object')
- factory(require("fullcalendar"), require("jquery"));
- else
- factory(root["FullCalendar"], root["jQuery"]);
-})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_3__) {
-return /******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 266);
-/******/ })
-/************************************************************************/
-/******/ ({
-
-/***/ 1:
-/***/ (function(module, exports) {
-
-module.exports = __WEBPACK_EXTERNAL_MODULE_1__;
-
-/***/ }),
-
-/***/ 2:
-/***/ (function(module, exports) {
-
-/*
-derived from:
-https://github.com/Microsoft/tslib/blob/v1.6.0/tslib.js
-
-only include the helpers we need, to keep down filesize
-*/
-var 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]; };
-exports.__extends = function (d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-};
-
-
-/***/ }),
-
-/***/ 266:
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var exportHooks = __webpack_require__(1);
-var GcalEventSource_1 = __webpack_require__(267);
-exportHooks.EventSourceParser.registerClass(GcalEventSource_1.default);
-exportHooks.GcalEventSource = GcalEventSource_1.default;
-
-
-/***/ }),
-
-/***/ 267:
-/***/ (function(module, exports, __webpack_require__) {
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var tslib_1 = __webpack_require__(2);
-var $ = __webpack_require__(3);
-var fullcalendar_1 = __webpack_require__(1);
-var GcalEventSource = /** @class */ (function (_super) {
- tslib_1.__extends(GcalEventSource, _super);
- function GcalEventSource() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- GcalEventSource.parse = function (rawInput, calendar) {
- var rawProps;
- if (typeof rawInput === 'object') {
- rawProps = rawInput;
- }
- else if (typeof rawInput === 'string') {
- rawProps = { url: rawInput }; // url will be parsed with parseGoogleCalendarId
- }
- if (rawProps) {
- return fullcalendar_1.EventSource.parse.call(this, rawProps, calendar);
- }
- return false;
- };
- GcalEventSource.prototype.fetch = function (start, end, timezone) {
- var _this = this;
- var url = this.buildUrl();
- var requestParams = this.buildRequestParams(start, end, timezone);
- var ajaxSettings = this.ajaxSettings || {};
- var onSuccess = ajaxSettings.success;
- if (!requestParams) {
- return fullcalendar_1.Promise.reject();
- }
- this.calendar.pushLoading();
- return fullcalendar_1.Promise.construct(function (onResolve, onReject) {
- $.ajax($.extend({}, // destination
- fullcalendar_1.JsonFeedEventSource.AJAX_DEFAULTS, ajaxSettings, {
- url: url,
- data: requestParams,
- success: function (responseData, status, xhr) {
- var rawEventDefs;
- var successRes;
- _this.calendar.popLoading();
- if (responseData.error) {
- _this.reportError('Google Calendar API: ' + responseData.error.message, responseData.error.errors);
- onReject();
- }
- else if (responseData.items) {
- rawEventDefs = _this.gcalItemsToRawEventDefs(responseData.items, requestParams.timeZone);
- successRes = fullcalendar_1.applyAll(onSuccess, _this, [responseData, status, xhr]); // passthru
- if ($.isArray(successRes)) {
- rawEventDefs = successRes;
- }
- onResolve(_this.parseEventDefs(rawEventDefs));
- }
- },
- error: function (xhr, statusText, errorThrown) {
- _this.reportError('Google Calendar network failure: ' + statusText, [xhr, errorThrown]);
- _this.calendar.popLoading();
- onReject();
- }
- }));
- });
- };
- GcalEventSource.prototype.gcalItemsToRawEventDefs = function (items, gcalTimezone) {
- var _this = this;
- return items.map(function (item) {
- return _this.gcalItemToRawEventDef(item, gcalTimezone);
- });
- };
- GcalEventSource.prototype.gcalItemToRawEventDef = function (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
- };
- };
- GcalEventSource.prototype.buildUrl = function () {
- return GcalEventSource.API_BASE + '/' +
- encodeURIComponent(this.googleCalendarId) +
- '/events?callback=?'; // jsonp
- };
- GcalEventSource.prototype.buildRequestParams = function (start, end, timezone) {
- var apiKey = this.googleCalendarApiKey || this.calendar.opt('googleCalendarApiKey');
- var params;
- if (!apiKey) {
- this.reportError('Specify a googleCalendarApiKey. See http://fullcalendar.io/docs/google_calendar/');
- return null;
- }
- // The API expects an ISO8601 datetime with a time and timezone part.
- // Since the calendar's timezone offset isn't always known, request the date in UTC and pad it by a day on each
- // side, guaranteeing we will receive all events in the desired range, albeit a superset.
- // .utc() will set a zone and give it a 00:00:00 time.
- if (!start.hasZone()) {
- start = start.clone().utc().add(-1, 'day');
- }
- if (!end.hasZone()) {
- end = end.clone().utc().add(1, 'day');
- }
- params = $.extend(this.ajaxSettings.data || {}, {
- key: apiKey,
- timeMin: start.format(),
- timeMax: end.format(),
- singleEvents: true,
- maxResults: 9999
- });
- if (timezone && timezone !== 'local') {
- // when sending timezone names to Google, only accepts underscores, not spaces
- params.timeZone = timezone.replace(' ', '_');
- }
- return params;
- };
- GcalEventSource.prototype.reportError = function (message, apiErrorObjs) {
- var calendar = this.calendar;
- var calendarOnError = calendar.opt('googleCalendarError');
- var errorObjs = apiErrorObjs || [{ message: message }]; // to be passed into error handlers
- if (this.googleCalendarError) {
- this.googleCalendarError.apply(calendar, errorObjs);
- }
- if (calendarOnError) {
- calendarOnError.apply(calendar, errorObjs);
- }
- // print error to debug console
- fullcalendar_1.warn.apply(null, [message].concat(apiErrorObjs || []));
- };
- GcalEventSource.prototype.getPrimitive = function () {
- return this.googleCalendarId;
- };
- GcalEventSource.prototype.applyManualStandardProps = function (rawProps) {
- var superSuccess = fullcalendar_1.EventSource.prototype.applyManualStandardProps.apply(this, arguments);
- var googleCalendarId = rawProps.googleCalendarId;
- if (googleCalendarId == null && rawProps.url) {
- googleCalendarId = parseGoogleCalendarId(rawProps.url);
- }
- if (googleCalendarId != null) {
- this.googleCalendarId = googleCalendarId;
- return superSuccess;
- }
- return false;
- };
- GcalEventSource.prototype.applyMiscProps = function (rawProps) {
- if (!this.ajaxSettings) {
- this.ajaxSettings = {};
- }
- $.extend(this.ajaxSettings, rawProps);
- };
- GcalEventSource.API_BASE = 'https://www.googleapis.com/calendar/v3/calendars';
- return GcalEventSource;
-}(fullcalendar_1.EventSource));
-exports.default = GcalEventSource;
-GcalEventSource.defineStandardProps({
- // manually process...
- url: false,
- googleCalendarId: false,
- // automatically transfer...
- googleCalendarApiKey: true,
- googleCalendarError: true
-});
-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]);
- }
-}
-// Injects a string like "arg=value" into the querystring of a URL
-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;
- });
-}
-
-
-/***/ }),
-
-/***/ 3:
-/***/ (function(module, exports) {
-
-module.exports = __WEBPACK_EXTERNAL_MODULE_3__;
-
-/***/ })
-
-/******/ });
-});
\ No newline at end of file
+++ /dev/null
-/*!
- * FullCalendar v3.9.0
- * Docs & License: https://fullcalendar.io/
- * (c) 2018 Adam Shaw
- */
-!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("fullcalendar"),require("jquery")):"function"==typeof define&&define.amd?define(["fullcalendar","jquery"],t):"object"==typeof exports?t(require("fullcalendar"),require("jquery")):t(e.FullCalendar,e.jQuery)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(o){if(r[o])return r[o].exports;var n=r[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,t),n.l=!0,n.exports}var r={};return t.m=e,t.c=r,t.d=function(e,r,o){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:o})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=266)}({1:function(t,r){t.exports=e},2:function(e,t){var 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])};t.__extends=function(e,t){function o(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}},266:function(e,t,r){Object.defineProperty(t,"__esModule",{value:!0});var o=r(1),n=r(267);o.EventSourceParser.registerClass(n.default),o.GcalEventSource=n.default},267:function(e,t,r){function o(e){var t;return/^[^\/]+@([^\/\.]+\.)*(google|googlemail|gmail)\.com$/.test(e)?e:(t=/^https:\/\/www.googleapis.com\/calendar\/v3\/calendars\/([^\/]*)/.exec(e))||(t=/^https?:\/\/www.google.com\/calendar\/feeds\/([^\/]*)/.exec(e))?decodeURIComponent(t[1]):void 0}function n(e,t){return e.replace(/(\?.*?)?(#|$)/,function(e,r,o){return(r?r+"&":"?")+t+o})}Object.defineProperty(t,"__esModule",{value:!0});var a=r(2),l=r(3),i=r(1),u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return a.__extends(t,e),t.parse=function(e,t){var r;return"object"==typeof e?r=e:"string"==typeof e&&(r={url:e}),!!r&&i.EventSource.parse.call(this,r,t)},t.prototype.fetch=function(e,t,r){var o=this,n=this.buildUrl(),a=this.buildRequestParams(e,t,r),u=this.ajaxSettings||{},c=u.success;return a?(this.calendar.pushLoading(),i.Promise.construct(function(e,t){l.ajax(l.extend({},i.JsonFeedEventSource.AJAX_DEFAULTS,u,{url:n,data:a,success:function(r,n,u){var s,p;o.calendar.popLoading(),r.error?(o.reportError("Google Calendar API: "+r.error.message,r.error.errors),t()):r.items&&(s=o.gcalItemsToRawEventDefs(r.items,a.timeZone),p=i.applyAll(c,o,[r,n,u]),l.isArray(p)&&(s=p),e(o.parseEventDefs(s)))},error:function(e,r,n){o.reportError("Google Calendar network failure: "+r,[e,n]),o.calendar.popLoading(),t()}}))})):i.Promise.reject()},t.prototype.gcalItemsToRawEventDefs=function(e,t){var r=this;return e.map(function(e){return r.gcalItemToRawEventDef(e,t)})},t.prototype.gcalItemToRawEventDef=function(e,t){var r=e.htmlLink||null;return r&&t&&(r=n(r,"ctz="+t)),{id:e.id,title:e.summary,start:e.start.dateTime||e.start.date,end:e.end.dateTime||e.end.date,url:r,location:e.location,description:e.description}},t.prototype.buildUrl=function(){return t.API_BASE+"/"+encodeURIComponent(this.googleCalendarId)+"/events?callback=?"},t.prototype.buildRequestParams=function(e,t,r){var o,n=this.googleCalendarApiKey||this.calendar.opt("googleCalendarApiKey");return n?(e.hasZone()||(e=e.clone().utc().add(-1,"day")),t.hasZone()||(t=t.clone().utc().add(1,"day")),o=l.extend(this.ajaxSettings.data||{},{key:n,timeMin:e.format(),timeMax:t.format(),singleEvents:!0,maxResults:9999}),r&&"local"!==r&&(o.timeZone=r.replace(" ","_")),o):(this.reportError("Specify a googleCalendarApiKey. See http://fullcalendar.io/docs/google_calendar/"),null)},t.prototype.reportError=function(e,t){var r=this.calendar,o=r.opt("googleCalendarError"),n=t||[{message:e}];this.googleCalendarError&&this.googleCalendarError.apply(r,n),o&&o.apply(r,n),i.warn.apply(null,[e].concat(t||[]))},t.prototype.getPrimitive=function(){return this.googleCalendarId},t.prototype.applyManualStandardProps=function(e){var t=i.EventSource.prototype.applyManualStandardProps.apply(this,arguments),r=e.googleCalendarId;return null==r&&e.url&&(r=o(e.url)),null!=r&&(this.googleCalendarId=r,t)},t.prototype.applyMiscProps=function(e){this.ajaxSettings||(this.ajaxSettings={}),l.extend(this.ajaxSettings,e)},t.API_BASE="https://www.googleapis.com/calendar/v3/calendars",t}(i.EventSource);t.default=u,u.defineStandardProps({url:!1,googleCalendarId:!1,googleCalendarApiKey:!0,googleCalendarError:!0})},3:function(e,r){e.exports=t}})});
\ No newline at end of file
--- /dev/null
+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.
--- /dev/null
+
+# FullCalendar Interaction Plugin
+
+Provides functionality for event drag-n-drop, resizing, dateClick, and selectable actions
+
+[View the docs »](https://fullcalendar.io/docs/editable)
+
+This package was created from the [FullCalendar monorepo »](https://github.com/fullcalendar/fullcalendar)
--- /dev/null
+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/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/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/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;
+ private animate;
+ private handleSide;
+ private computeBestEdge;
+ private buildCaches;
+ private queryScrollEls;
+ }
+}
+
+declare module "@fullcalendar/interaction/dnd/FeaturefulElementDragging" {
+ import { PointerDragEvent, ElementDragging } from "@fullcalendar/core";
+ import PointerDragging from "@fullcalendar/interaction/dnd/PointerDragging";
+ import ElementMirror from "@fullcalendar/interaction/dnd/ElementMirror";
+ import AutoScroller from "@fullcalendar/interaction/dnd/AutoScroller";
+ export { FeaturefulElementDragging as default, FeaturefulElementDragging };
+ class FeaturefulElementDragging extends ElementDragging {
+ pointer: PointerDragging;
+ mirror: ElementMirror;
+ autoScroller: AutoScroller;
+ delay: number | null;
+ minDistance: number;
+ touchScrollAllowed: boolean;
+ mirrorNeedsRevert: boolean;
+ isInteracting: boolean;
+ isDragging: boolean;
+ isDelayEnded: boolean;
+ isDistanceSurpassed: boolean;
+ delayTimeoutId: number | null;
+ constructor(containerEl: HTMLElement);
+ destroy(): void;
+ onPointerDown: (ev: PointerDragEvent) => 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/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;
+ }
+}
+
+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/interactions/DateClicking" {
+ import { PointerDragEvent, Interaction, InteractionSettings } from "@fullcalendar/core";
+ import FeaturefulElementDragging from "@fullcalendar/interaction/dnd/FeaturefulElementDragging";
+ import HitDragging from "@fullcalendar/interaction/interactions/HitDragging";
+ export { DateClicking as default, DateClicking };
+ class DateClicking extends Interaction {
+ dragging: FeaturefulElementDragging;
+ hitDragging: HitDragging;
+ constructor(settings: InteractionSettings);
+ destroy(): void;
+ handlePointerDown: (ev: PointerDragEvent) => void;
+ handleDragEnd: (ev: PointerDragEvent) => void;
+ }
+}
+
+declare module "@fullcalendar/interaction/interactions/DateSelecting" {
+ import { Hit, DateSpan, PointerDragEvent, Interaction, InteractionSettings } from "@fullcalendar/core";
+ import HitDragging from "@fullcalendar/interaction/interactions/HitDragging";
+ import FeaturefulElementDragging from "@fullcalendar/interaction/dnd/FeaturefulElementDragging";
+ export { DateSelecting as default, DateSelecting };
+ class DateSelecting extends Interaction {
+ dragging: FeaturefulElementDragging;
+ hitDragging: HitDragging;
+ dragSelection: DateSpan | null;
+ constructor(settings: InteractionSettings);
+ destroy(): void;
+ handlePointerDown: (ev: PointerDragEvent) => void;
+ handleDragStart: (ev: PointerDragEvent) => void;
+ handleHitUpdate: (hit: Hit, isFinal: boolean) => void;
+ handlePointerUp: (pev: PointerDragEvent) => 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/EventDragging" {
+ import { Seg, PointerDragEvent, Hit, EventMutation, EventStore, Calendar, EventInteractionState, EventRenderRange, Interaction, InteractionSettings } from "@fullcalendar/core";
+ import HitDragging from "@fullcalendar/interaction/interactions/HitDragging";
+ import FeaturefulElementDragging from "@fullcalendar/interaction/dnd/FeaturefulElementDragging";
+ export { EventDragging as default, EventDragging };
+ class EventDragging extends Interaction {
+ static SELECTOR: string;
+ dragging: FeaturefulElementDragging;
+ hitDragging: HitDragging;
+ subjectSeg: Seg | null;
+ isDragging: boolean;
+ eventRange: EventRenderRange | null;
+ relevantEvents: EventStore | null;
+ receivingCalendar: Calendar | null;
+ validMutation: EventMutation | null;
+ mutatedRelevantEvents: EventStore | null;
+ constructor(settings: InteractionSettings);
+ destroy(): void;
+ handlePointerDown: (ev: PointerDragEvent) => void;
+ handleDragStart: (ev: PointerDragEvent) => void;
+ handleHitUpdate: (hit: Hit, isFinal: boolean) => void;
+ handlePointerUp: () => void;
+ handleDragEnd: (ev: PointerDragEvent) => void;
+ displayDrag(nextCalendar: Calendar | null, state: EventInteractionState): void;
+ clearDrag(): void;
+ cleanup(): void;
+ }
+}
+
+declare module "@fullcalendar/interaction/interactions/EventResizing" {
+ import { Seg, Hit, EventMutation, PointerDragEvent, EventStore, EventRenderRange, Interaction, InteractionSettings } from "@fullcalendar/core";
+ import HitDragging from "@fullcalendar/interaction/interactions/HitDragging";
+ import FeaturefulElementDragging from "@fullcalendar/interaction/dnd/FeaturefulElementDragging";
+ export { EventDragging as default, EventDragging };
+ class EventDragging extends Interaction {
+ dragging: FeaturefulElementDragging;
+ hitDragging: HitDragging;
+ draggingSeg: Seg | null;
+ eventRange: EventRenderRange | null;
+ relevantEvents: EventStore | null;
+ validMutation: EventMutation | null;
+ mutatedRelevantEvents: EventStore | null;
+ constructor(settings: InteractionSettings);
+ destroy(): void;
+ handlePointerDown: (ev: PointerDragEvent) => void;
+ handleDragStart: (ev: PointerDragEvent) => void;
+ handleHitUpdate: (hit: Hit, isFinal: boolean, ev: PointerDragEvent) => void;
+ handleDragEnd: (ev: PointerDragEvent) => void;
+ querySeg(ev: PointerDragEvent): Seg | null;
+ }
+}
+
+declare module "@fullcalendar/interaction/interactions/UnselectAuto" {
+ import { Calendar, DateSelectionApi, PointerDragEvent } from "@fullcalendar/core";
+ import PointerDragging from "@fullcalendar/interaction/dnd/PointerDragging";
+ export { UnselectAuto as default, UnselectAuto };
+ class UnselectAuto {
+ calendar: Calendar;
+ documentPointer: PointerDragging;
+ isRecentPointerDateSelect: boolean;
+ constructor(calendar: Calendar);
+ destroy(): void;
+ onSelect: (selectInfo: DateSelectionApi) => void;
+ onDocumentPointerUp: (pev: PointerDragEvent) => void;
+ }
+}
+
+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/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/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" {
+ import FeaturefulElementDragging from "@fullcalendar/interaction/dnd/FeaturefulElementDragging";
+ const _default_8: import("@fullcalendar/core/plugin-system").PluginDef;
+ export default _default_8;
+ export { FeaturefulElementDragging };
+ export { default as PointerDragging } from "@fullcalendar/interaction/dnd/PointerDragging";
+ export { default as Draggable } from "@fullcalendar/interaction/interactions-external/ExternalDraggable";
+ export { default as ThirdPartyDraggable } from "@fullcalendar/interaction/interactions-external/ThirdPartyDraggable";
+}
\ No newline at end of file
--- /dev/null
+/*!
+FullCalendar Interaction Plugin v4.1.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);
+ }
+ 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 <html> and <body>
+ // 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 pointer = _this.dragging.pointer;
+ if (!pointer.wasTouchScroll) {
+ var _a = _this.hitDragging, initialHit = _a.initialHit, finalHit = _a.finalHit;
+ if (initialHit && finalHit && isHitsEqual(initialHit, finalHit)) {
+ component.calendar.triggerDateClick(initialHit.dateSpan, initialHit.dayEl, component.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 canSelect = component.opt('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.calendar.unselect(ev); // unselect previous selections
+ };
+ _this.handleHitUpdate = function (hit, isFinal) {
+ var calendar = _this.component.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.calendar.triggerDateSelect(_this.dragSelection, pev);
+ _this.dragSelection = null;
+ }
+ };
+ var component = settings.component;
+ var dragging = _this.dragging = new FeaturefulElementDragging(component.el);
+ dragging.touchScrollAllowed = false;
+ dragging.minDistance = component.opt('selectMinDistance') || 0;
+ dragging.autoScroller.isEnabled = component.opt('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 delay = component.opt('selectLongPressDelay');
+ if (delay == null) {
+ delay = component.opt('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 initialCalendar = component.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 : component.opt('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 = component.opt('dragRevertDuration');
+ var isValid = component.isValidSegDownEl(origTarget) &&
+ !core.elementClosest(origTarget, '.fc-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 initialCalendar = _this.component.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: _this.component.view
+ }
+ ]);
+ }
+ };
+ _this.handleHitUpdate = function (hit, isFinal) {
+ if (!_this.isDragging) {
+ return;
+ }
+ var relevantEvents = _this.relevantEvents;
+ var initialHit = _this.hitDragging.initialHit;
+ var initialCalendar = _this.component.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.calendar;
+ if (initialCalendar === receivingCalendar ||
+ receivingComponent.opt('editable') && receivingComponent.opt('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 initialCalendar_1 = _this.component.calendar;
+ var initialView = _this.component.view;
+ var receivingCalendar = _this.receivingCalendar;
+ 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 (_this.validMutation) {
+ // dropped within same calendar
+ if (receivingCalendar === initialCalendar_1) {
+ initialCalendar_1.dispatch({
+ type: 'MERGE_EVENTS',
+ eventStore: mutatedRelevantEvents
+ });
+ var eventDropArg = {};
+ for (var _i = 0, _a = initialCalendar_1.pluginSystem.hooks.eventDropTransformers; _i < _a.length; _i++) {
+ var transformer = _a[_i];
+ __assign(eventDropArg, transformer(_this.validMutation, initialCalendar_1));
+ }
+ __assign(eventDropArg, {
+ el: ev.subjectEl,
+ delta: _this.validMutation.startDelta,
+ 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 = receivingCalendar.buildDatePointApi(finalHit.dateSpan);
+ dropArg.draggedEl = ev.subjectEl;
+ dropArg.jsEvent = ev.origEvent;
+ dropArg.view = finalHit.component; // ?
+ 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
+ }
+ ]);
+ }
+ }
+ else {
+ initialCalendar_1.publiclyTrigger('_noEventDrop');
+ }
+ }
+ _this.cleanup();
+ };
+ var component = _this.component;
+ var dragging = _this.dragging = new FeaturefulElementDragging(component.el);
+ dragging.pointer.selector = EventDragging.SELECTOR;
+ dragging.touchScrollAllowed = false;
+ dragging.autoScroller.isEnabled = component.opt('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.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.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.opt('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.dateEnv, hit0.component === hit1.component ?
+ hit0.component.largeUnit :
+ null);
+ if (delta.milliseconds) { // has hours/minutes/seconds
+ standardProps.allDay = false;
+ }
+ var mutation = {
+ startDelta: delta,
+ endDelta: 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 delay = component.opt('eventLongPressDelay');
+ if (delay == null) {
+ delay = component.opt('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.opt('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 calendar = _this.component.calendar;
+ 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: _this.component.view
+ }
+ ]);
+ };
+ _this.handleHitUpdate = function (hit, isFinal, ev) {
+ var calendar = _this.component.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 calendar = _this.component.calendar;
+ var view = _this.component.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.opt('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.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.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.view;
+ var dragMeta = _this.dragMeta;
+ var arg = receivingCalendar.buildDatePointApi(finalHit.dateSpan);
+ arg.draggedEl = pev.subjectEl;
+ arg.jsEvent = pev.origEvent;
+ arg.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 });
+
+}));
--- /dev/null
+/*!
+FullCalendar Interaction Plugin v4.1.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):(e=e||self,t(e.FullCalendarInteraction={},e.FullCalendar))}(this,function(e,t){"use strict";function n(e,t){function n(){this.constructor=e}m(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}function r(e){return 0===e.button&&!e.ctrlKey}function i(){y++,setTimeout(function(){y--},t.config.touchMouseIgnoreWait)}function o(){D++||window.addEventListener("touchmove",l,{passive:!1})}function a(){--D||window.removeEventListener("touchmove",l,{passive:!1})}function l(e){w&&e.preventDefault()}function s(e){var t=e.tagName;return"HTML"===t||"BODY"===t}function c(e,n){return!e&&!n||Boolean(e)===Boolean(n)&&t.isDateSpansEqual(e.dateSpan,n.dateSpan)}function d(e){var t=e.opt("selectLongPressDelay");return null==t&&(t=e.opt("longPressDelay")),t}function u(e,n,r){var i=e.dateSpan,o=n.dateSpan,a=[i.range.start,i.range.end,o.range.start,o.range.end];a.sort(t.compareNumbers);for(var l={},s=0,c=r;s<c.length;s++){var d=c[s],u=d(e,n);if(!1===u)return null;u&&S(l,u)}return l.range={start:a[0],end:a[3]},l.allDay=i.allDay,l}function g(e,n,r){var i=e.dateSpan,o=n.dateSpan,a=i.range.start,l=o.range.start,s={};i.allDay!==o.allDay&&(s.allDay=o.allDay,s.hasEnd=n.component.opt("allDayMaintainDuration"),o.allDay&&(a=t.startOfDay(a)));var c=t.diffDates(a,l,e.component.dateEnv,e.component===n.component?e.component.largeUnit:null);c.milliseconds&&(s.allDay=!1);for(var d={startDelta:c,endDelta:c,standardProps:s},u=0,g=r;u<g.length;u++){(0,g[u])(d,e,n)}return d}function h(e){var t=e.opt("eventLongPressDelay");return null==t&&(t=e.opt("longPressDelay")),t}function p(e,n,r,i,o){for(var a=e.component.dateEnv,l=e.dateSpan.range.start,s=n.dateSpan.range.start,c=t.diffDates(l,s,a,e.component.largeUnit),d={},u=0,g=o;u<g.length;u++){var h=g[u],p=h(e,n);if(!1===p)return null;p&&S(d,p)}if(r){if(a.add(i.start,c)<i.end)return d.startDelta=c,d}else if(a.add(i.end,c)>i.start)return d.endDelta=c,d;return null}function v(e,n,r){for(var i=S({},n.leftoverProps),o=0,a=r.pluginSystem.hooks.externalDefTransforms;o<a.length;o++){var l=a[o];S(i,l(e,n))}var s=t.parseEventDef(i,n.sourceId,e.allDay,r.opt("forceEventDuration")||Boolean(n.duration),r),c=e.range.start;e.allDay&&n.startTime&&(c=r.dateEnv.add(c,n.startTime));var d=n.duration?r.dateEnv.add(c,n.duration):r.getDefaultEventEnd(e.allDay,c);return{def:s,instance:t.createEventInstance(s.defId,{start:c,end:d})}}function f(e){var n=E(e,"event"),r=n?JSON.parse(n):{create:!1};return t.parseDragMeta(r)}function E(e,n){var r=t.config.dataAttrPrefix,i=(r?r+"-":"")+n;return e.getAttribute("data-"+i)||""}/*! *****************************************************************************
+ 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 m=function(e,t){return(m=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)},S=function(){return S=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++){t=arguments[n];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])}return e},S.apply(this,arguments)};t.config.touchMouseIgnoreWait=500;var y=0,D=0,w=!1,T=function(){function e(e){var n=this;this.subjectEl=null,this.downEl=null,this.selector="",this.handleSelector="",this.shouldIgnoreMove=!1,this.shouldWatchScroll=!0,this.isDragging=!1,this.isTouchDragging=!1,this.wasTouchScroll=!1,this.handleMouseDown=function(e){if(!n.shouldIgnoreMouse()&&r(e)&&n.tryStart(e)){var t=n.createEventFromMouse(e,!0);n.emitter.trigger("pointerdown",t),n.initScrollWatch(t),n.shouldIgnoreMove||document.addEventListener("mousemove",n.handleMouseMove),document.addEventListener("mouseup",n.handleMouseUp)}},this.handleMouseMove=function(e){var t=n.createEventFromMouse(e);n.recordCoords(t),n.emitter.trigger("pointermove",t)},this.handleMouseUp=function(e){document.removeEventListener("mousemove",n.handleMouseMove),document.removeEventListener("mouseup",n.handleMouseUp),n.emitter.trigger("pointerup",n.createEventFromMouse(e)),n.cleanup()},this.handleTouchStart=function(e){if(n.tryStart(e)){n.isTouchDragging=!0;var t=n.createEventFromTouch(e,!0);n.emitter.trigger("pointerdown",t),n.initScrollWatch(t);var r=e.target;n.shouldIgnoreMove||r.addEventListener("touchmove",n.handleTouchMove),r.addEventListener("touchend",n.handleTouchEnd),r.addEventListener("touchcancel",n.handleTouchEnd),window.addEventListener("scroll",n.handleTouchScroll,!0)}},this.handleTouchMove=function(e){var t=n.createEventFromTouch(e);n.recordCoords(t),n.emitter.trigger("pointermove",t)},this.handleTouchEnd=function(e){if(n.isDragging){var t=e.target;t.removeEventListener("touchmove",n.handleTouchMove),t.removeEventListener("touchend",n.handleTouchEnd),t.removeEventListener("touchcancel",n.handleTouchEnd),window.removeEventListener("scroll",n.handleTouchScroll,!0),n.emitter.trigger("pointerup",n.createEventFromTouch(e)),n.cleanup(),n.isTouchDragging=!1,i()}},this.handleTouchScroll=function(){n.wasTouchScroll=!0},this.handleScroll=function(e){if(!n.shouldIgnoreMove){var t=window.pageXOffset-n.prevScrollX+n.prevPageX,r=window.pageYOffset-n.prevScrollY+n.prevPageY;n.emitter.trigger("pointermove",{origEvent:e,isTouch:n.isTouchDragging,subjectEl:n.subjectEl,pageX:t,pageY:r,deltaX:t-n.origPageX,deltaY:r-n.origPageY})}},this.containerEl=e,this.emitter=new t.EmitterMixin,e.addEventListener("mousedown",this.handleMouseDown),e.addEventListener("touchstart",this.handleTouchStart,{passive:!0}),o()}return e.prototype.destroy=function(){this.containerEl.removeEventListener("mousedown",this.handleMouseDown),this.containerEl.removeEventListener("touchstart",this.handleTouchStart,{passive:!0}),a()},e.prototype.tryStart=function(e){var n=this.querySubjectEl(e),r=e.target;return!(!n||this.handleSelector&&!t.elementClosest(r,this.handleSelector))&&(this.subjectEl=n,this.downEl=r,this.isDragging=!0,this.wasTouchScroll=!1,!0)},e.prototype.cleanup=function(){w=!1,this.isDragging=!1,this.subjectEl=null,this.downEl=null,this.destroyScrollWatch()},e.prototype.querySubjectEl=function(e){return this.selector?t.elementClosest(e.target,this.selector):this.containerEl},e.prototype.shouldIgnoreMouse=function(){return y||this.isTouchDragging},e.prototype.cancelTouchScroll=function(){this.isDragging&&(w=!0)},e.prototype.initScrollWatch=function(e){this.shouldWatchScroll&&(this.recordCoords(e),window.addEventListener("scroll",this.handleScroll,!0))},e.prototype.recordCoords=function(e){this.shouldWatchScroll&&(this.prevPageX=e.pageX,this.prevPageY=e.pageY,this.prevScrollX=window.pageXOffset,this.prevScrollY=window.pageYOffset)},e.prototype.destroyScrollWatch=function(){this.shouldWatchScroll&&window.removeEventListener("scroll",this.handleScroll,!0)},e.prototype.createEventFromMouse=function(e,t){var n=0,r=0;return t?(this.origPageX=e.pageX,this.origPageY=e.pageY):(n=e.pageX-this.origPageX,r=e.pageY-this.origPageY),{origEvent:e,isTouch:!1,subjectEl:this.subjectEl,pageX:e.pageX,pageY:e.pageY,deltaX:n,deltaY:r}},e.prototype.createEventFromTouch=function(e,t){var n,r,i=e.touches,o=0,a=0;return i&&i.length?(n=i[0].pageX,r=i[0].pageY):(n=e.pageX,r=e.pageY),t?(this.origPageX=n,this.origPageY=r):(o=n-this.origPageX,a=r-this.origPageY),{origEvent:e,isTouch:!0,subjectEl:this.subjectEl,pageX:n,pageY:r,deltaX:o,deltaY:a}},e}(),M=function(){function e(){this.isVisible=!1,this.sourceEl=null,this.mirrorEl=null,this.sourceElRect=null,this.parentNode=document.body,this.zIndex=9999,this.revertDuration=0}return e.prototype.start=function(e,t,n){this.sourceEl=e,this.sourceElRect=this.sourceEl.getBoundingClientRect(),this.origScreenX=t-window.pageXOffset,this.origScreenY=n-window.pageYOffset,this.deltaX=0,this.deltaY=0,this.updateElPosition()},e.prototype.handleMove=function(e,t){this.deltaX=e-window.pageXOffset-this.origScreenX,this.deltaY=t-window.pageYOffset-this.origScreenY,this.updateElPosition()},e.prototype.setIsVisible=function(e){e?this.isVisible||(this.mirrorEl&&(this.mirrorEl.style.display=""),this.isVisible=e,this.updateElPosition()):this.isVisible&&(this.mirrorEl&&(this.mirrorEl.style.display="none"),this.isVisible=e)},e.prototype.stop=function(e,t){var n=this,r=function(){n.cleanup(),t()};e&&this.mirrorEl&&this.isVisible&&this.revertDuration&&(this.deltaX||this.deltaY)?this.doRevertAnimation(r,this.revertDuration):setTimeout(r,0)},e.prototype.doRevertAnimation=function(e,n){var r=this.mirrorEl,i=this.sourceEl.getBoundingClientRect();r.style.transition="top "+n+"ms,left "+n+"ms",t.applyStyle(r,{left:i.left,top:i.top}),t.whenTransitionDone(r,function(){r.style.transition="",e()})},e.prototype.cleanup=function(){this.mirrorEl&&(t.removeElement(this.mirrorEl),this.mirrorEl=null),this.sourceEl=null},e.prototype.updateElPosition=function(){this.sourceEl&&this.isVisible&&t.applyStyle(this.getMirrorEl(),{left:this.sourceElRect.left+this.deltaX,top:this.sourceElRect.top+this.deltaY})},e.prototype.getMirrorEl=function(){var e=this.sourceElRect,n=this.mirrorEl;return n||(n=this.mirrorEl=this.sourceEl.cloneNode(!0),n.classList.add("fc-unselectable"),n.classList.add("fc-dragging"),t.applyStyle(n,{position:"fixed",zIndex:this.zIndex,visibility:"",boxSizing:"border-box",width:e.right-e.left,height:e.bottom-e.top,right:"auto",bottom:"auto",margin:0}),this.parentNode.appendChild(n)),n},e}(),b=function(e){function t(t,n){var r=e.call(this)||this;return r.handleScroll=function(){r.scrollTop=r.scrollController.getScrollTop(),r.scrollLeft=r.scrollController.getScrollLeft(),r.handleScrollChange()},r.scrollController=t,r.doesListening=n,r.scrollTop=r.origScrollTop=t.getScrollTop(),r.scrollLeft=r.origScrollLeft=t.getScrollLeft(),r.scrollWidth=t.getScrollWidth(),r.scrollHeight=t.getScrollHeight(),r.clientWidth=t.getClientWidth(),r.clientHeight=t.getClientHeight(),r.clientRect=r.computeClientRect(),r.doesListening&&r.getEventTarget().addEventListener("scroll",r.handleScroll),r}return n(t,e),t.prototype.destroy=function(){this.doesListening&&this.getEventTarget().removeEventListener("scroll",this.handleScroll)},t.prototype.getScrollTop=function(){return this.scrollTop},t.prototype.getScrollLeft=function(){return this.scrollLeft},t.prototype.setScrollTop=function(e){this.scrollController.setScrollTop(e),this.doesListening||(this.scrollTop=Math.max(Math.min(e,this.getMaxScrollTop()),0),this.handleScrollChange())},t.prototype.setScrollLeft=function(e){this.scrollController.setScrollLeft(e),this.doesListening||(this.scrollLeft=Math.max(Math.min(e,this.getMaxScrollLeft()),0),this.handleScrollChange())},t.prototype.getClientWidth=function(){return this.clientWidth},t.prototype.getClientHeight=function(){return this.clientHeight},t.prototype.getScrollWidth=function(){return this.scrollWidth},t.prototype.getScrollHeight=function(){return this.scrollHeight},t.prototype.handleScrollChange=function(){},t}(t.ScrollController),C=function(e){function r(n,r){return e.call(this,new t.ElementScrollController(n),r)||this}return n(r,e),r.prototype.getEventTarget=function(){return this.scrollController.el},r.prototype.computeClientRect=function(){return t.computeInnerRect(this.scrollController.el)},r}(b),R=function(e){function r(n){return e.call(this,new t.WindowScrollController,n)||this}return n(r,e),r.prototype.getEventTarget=function(){return window},r.prototype.computeClientRect=function(){return{left:this.scrollLeft,right:this.scrollLeft+this.clientWidth,top:this.scrollTop,bottom:this.scrollTop+this.clientHeight}},r.prototype.handleScrollChange=function(){this.clientRect=this.computeClientRect()},r}(b),I="function"==typeof performance?performance.now:Date.now,P=function(){function e(){var e=this;this.isEnabled=!0,this.scrollQuery=[window,".fc-scroller"],this.edgeThreshold=50,this.maxVelocity=300,this.pointerScreenX=null,this.pointerScreenY=null,this.isAnimating=!1,this.scrollCaches=null,this.everMovedUp=!1,this.everMovedDown=!1,this.everMovedLeft=!1,this.everMovedRight=!1,this.animate=function(){if(e.isAnimating){var t=e.computeBestEdge(e.pointerScreenX+window.pageXOffset,e.pointerScreenY+window.pageYOffset);if(t){var n=I();e.handleSide(t,(n-e.msSinceRequest)/1e3),e.requestAnimation(n)}else e.isAnimating=!1}}}return e.prototype.start=function(e,t){this.isEnabled&&(this.scrollCaches=this.buildCaches(),this.pointerScreenX=null,this.pointerScreenY=null,this.everMovedUp=!1,this.everMovedDown=!1,this.everMovedLeft=!1,this.everMovedRight=!1,this.handleMove(e,t))},e.prototype.handleMove=function(e,t){if(this.isEnabled){var n=e-window.pageXOffset,r=t-window.pageYOffset,i=null===this.pointerScreenY?0:r-this.pointerScreenY,o=null===this.pointerScreenX?0:n-this.pointerScreenX;i<0?this.everMovedUp=!0:i>0&&(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(I()))}},e.prototype.stop=function(){if(this.isEnabled){this.isAnimating=!1;for(var e=0,t=this.scrollCaches;e<t.length;e++){t[e].destroy()}this.scrollCaches=null}},e.prototype.requestAnimation=function(e){this.msSinceRequest=e,requestAnimationFrame(this.animate)},e.prototype.handleSide=function(e,t){var n=e.scrollCache,r=this.edgeThreshold,i=r-e.distance,o=i*i/(r*r)*this.maxVelocity*t,a=1;switch(e.name){case"left":a=-1;case"right":n.setScrollLeft(n.getScrollLeft()+o*a);break;case"top":a=-1;case"bottom":n.setScrollTop(n.getScrollTop()+o*a)}},e.prototype.computeBestEdge=function(e,t){for(var n=this.edgeThreshold,r=null,i=0,o=this.scrollCaches;i<o.length;i++){var a=o[i],l=a.clientRect,s=e-l.left,c=l.right-e,d=t-l.top,u=l.bottom-t;s>=0&&c>=0&&d>=0&&u>=0&&(d<=n&&this.everMovedUp&&a.canScrollUp()&&(!r||r.distance>d)&&(r={scrollCache:a,name:"top",distance:d}),u<=n&&this.everMovedDown&&a.canScrollDown()&&(!r||r.distance>u)&&(r={scrollCache:a,name:"bottom",distance:u}),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 R(!1):new C(e,!1)})},e.prototype.queryScrollEls=function(){for(var e=[],t=0,n=this.scrollQuery;t<n.length;t++){var r=n[t];"object"==typeof r?e.push(r):e.push.apply(e,Array.prototype.slice.call(document.querySelectorAll(r)))}return e},e}(),L=function(e){function r(n){var r=e.call(this,n)||this;r.delay=null,r.minDistance=0,r.touchScrollAllowed=!0,r.mirrorNeedsRevert=!1,r.isInteracting=!1,r.isDragging=!1,r.isDelayEnded=!1,r.isDistanceSurpassed=!1,r.delayTimeoutId=null,r.onPointerDown=function(e){r.isDragging||(r.isInteracting=!0,r.isDelayEnded=!1,r.isDistanceSurpassed=!1,t.preventSelection(document.body),t.preventContextMenu(document.body),e.isTouch||e.origEvent.preventDefault(),r.emitter.trigger("pointerdown",e),r.pointer.shouldIgnoreMove||(r.mirror.setIsVisible(!1),r.mirror.start(e.subjectEl,e.pageX,e.pageY),r.startDelay(e),r.minDistance||r.handleDistanceSurpassed(e)))},r.onPointerMove=function(e){if(r.isInteracting){if(r.emitter.trigger("pointermove",e),!r.isDistanceSurpassed){var t=r.minDistance,n=void 0,i=e.deltaX,o=e.deltaY;n=i*i+o*o,n>=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 T(n);return i.emitter.on("pointerdown",r.onPointerDown),i.emitter.on("pointermove",r.onPointerMove),i.emitter.on("pointerup",r.onPointerUp),r.mirror=new M,r.autoScroller=new P,r}return n(r,e),r.prototype.destroy=function(){this.pointer.destroy()},r.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)},r.prototype.handleDelayEnd=function(e){this.isDelayEnded=!0,this.tryStartDrag(e)},r.prototype.handleDistanceSurpassed=function(e){this.isDistanceSurpassed=!0,this.tryStartDrag(e)},r.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()))},r.prototype.tryStopDrag=function(e){this.mirror.stop(this.mirrorNeedsRevert,this.stopDrag.bind(this,e))},r.prototype.stopDrag=function(e){this.isDragging=!1,this.emitter.trigger("dragend",e)},r.prototype.setIgnoreMove=function(e){this.pointer.shouldIgnoreMove=e},r.prototype.setMirrorIsVisible=function(e){this.mirror.setIsVisible(e)},r.prototype.setMirrorNeedsRevert=function(e){this.mirrorNeedsRevert=e},r.prototype.setAutoScrollEnabled=function(e){this.autoScroller.isEnabled=e},r}(t.ElementDragging),j=function(){function e(e){this.origRect=t.computeRect(e),this.scrollCaches=t.getClippingParents(e).map(function(e){return new C(e,!0)})}return e.prototype.destroy=function(){for(var e=0,t=this.scrollCaches;e<t.length;e++){t[e].destroy()}},e.prototype.computeLeft=function(){for(var e=this.origRect.left,t=0,n=this.scrollCaches;t<n.length;t++){var r=n[t];e+=r.origScrollLeft-r.getScrollLeft()}return e},e.prototype.computeTop=function(){for(var e=this.origRect.top,t=0,n=this.scrollCaches;t<n.length;t++){var r=n[t];e+=r.origScrollTop-r.getScrollTop()}return e},e.prototype.isWithinClipping=function(e,n){for(var r={left:e,top:n},i=0,o=this.scrollCaches;i<o.length;i++){var a=o[i];if(!s(a.getEventTarget())&&!t.pointInsideRect(r,a.clientRect))return!1}return!0},e}(),A=function(){function e(e,n){var r=this;this.useSubjectCenter=!1,this.requireInitial=!0,this.initialHit=null,this.movingHit=null,this.finalHit=null,this.handlePointerDown=function(e){var t=r.dragging;r.initialHit=null,r.movingHit=null,r.finalHit=null,r.prepareHits(),r.processFirstCoord(e),r.initialHit||!r.requireInitial?(t.setIgnoreMove(!1),r.emitter.trigger("pointerdown",e)):t.setIgnoreMove(!0)},this.handleDragStart=function(e){r.emitter.trigger("dragstart",e),r.handleMove(e,!0)},this.handleDragMove=function(e){r.emitter.trigger("dragmove",e),r.handleMove(e)},this.handlePointerUp=function(e){r.releaseHits(),r.emitter.trigger("pointerup",e)},this.handleDragEnd=function(e){r.movingHit&&r.emitter.trigger("hitupdate",null,!0,e),r.finalHit=r.movingHit,r.movingHit=null,r.emitter.trigger("dragend",e)},this.droppableStore=n,e.emitter.on("pointerdown",this.handlePointerDown),e.emitter.on("dragstart",this.handleDragStart),e.emitter.on("dragmove",this.handleDragMove),e.emitter.on("pointerup",this.handlePointerUp),e.emitter.on("dragend",this.handleDragEnd),this.dragging=e,this.emitter=new t.EmitterMixin}return e.prototype.processFirstCoord=function(e){var n,r={left:e.pageX,top:e.pageY},i=r,o=e.subjectEl;o!==document&&(n=t.computeRect(o),i=t.constrainPoint(i,n));var a=this.initialHit=this.queryHitForOffset(i.left,i.top);if(a){if(this.useSubjectCenter&&n){var l=t.intersectRects(n,a.rect);l&&(i=t.getRectCenter(l))}this.coordAdjust=t.diffPoints(i,r)}else this.coordAdjust={left:0,top:0}},e.prototype.handleMove=function(e,t){var n=this.queryHitForOffset(e.pageX+this.coordAdjust.left,e.pageY+this.coordAdjust.top);!t&&c(this.movingHit,n)||(this.movingHit=n,this.emitter.trigger("hitupdate",n,!1,e))},e.prototype.prepareHits=function(){this.offsetTrackers=t.mapHash(this.droppableStore,function(e){return e.component.buildPositionCaches(),new j(e.el)})},e.prototype.releaseHits=function(){var e=this.offsetTrackers;for(var t in e)e[t].destroy();this.offsetTrackers={}},e.prototype.queryHitForOffset=function(e,n){var r=this,i=r.droppableStore,o=r.offsetTrackers,a=null;for(var l in i){var s=i[l].component,c=o[l];if(c.isWithinClipping(e,n)){var d=c.computeLeft(),u=c.computeTop(),g=e-d,h=n-u,p=c.origRect,v=p.right-p.left,f=p.bottom-p.top;if(g>=0&&g<v&&h>=0&&h<f){var E=s.queryHit(g,h,v,f);!E||s.props.dateProfile&&!t.rangeContainsRange(s.props.dateProfile.activeRange,E.dateSpan.range)||a&&!(E.layer>a.layer)||(E.rect.left+=d,E.rect.right+=d,E.rect.top+=u,E.rect.bottom+=u,a=E)}}}return a},e}(),H=function(e){function r(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;if(!r.dragging.pointer.wasTouchScroll){var n=r.hitDragging,i=n.initialHit,o=n.finalHit;i&&o&&c(i,o)&&t.calendar.triggerDateClick(i.dateSpan,i.dayEl,t.view,e.origEvent)}};var i=n.component;r.dragging=new L(i.el),r.dragging.autoScroller.isEnabled=!1;var o=r.hitDragging=new A(r.dragging,t.interactionSettingsToStore(n));return o.emitter.on("pointerdown",r.handlePointerDown),o.emitter.on("dragend",r.handleDragEnd),r}return n(r,e),r.prototype.destroy=function(){this.dragging.destroy()},r}(t.Interaction),N=function(e){function r(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.opt("selectable")&&n.isValidDateDownEl(e.origEvent.target);i.setIgnoreMove(!o),i.delay=e.isTouch?d(n):null},r.handleDragStart=function(e){r.component.calendar.unselect(e)},r.handleHitUpdate=function(e,n){var i=r.component.calendar,o=null,a=!1;e&&((o=u(r.hitDragging.initialHit,e,i.pluginSystem.hooks.dateSelectionTransformers))&&r.component.isDateSelectionValid(o)||(a=!0,o=null)),o?i.dispatch({type:"SELECT_DATES",selection:o}):n||i.dispatch({type:"UNSELECT_DATES"}),a?t.disableCursor():t.enableCursor(),n||(r.dragSelection=o)},r.handlePointerUp=function(e){r.dragSelection&&(r.component.calendar.triggerDateSelect(r.dragSelection,e),r.dragSelection=null)};var i=n.component,o=r.dragging=new L(i.el);o.touchScrollAllowed=!1,o.minDistance=i.opt("selectMinDistance")||0,o.autoScroller.isEnabled=i.opt("dragScroll");var a=r.hitDragging=new A(r.dragging,t.interactionSettingsToStore(n));return a.emitter.on("pointerdown",r.handlePointerDown),a.emitter.on("dragstart",r.handleDragStart),a.emitter.on("hitupdate",r.handleHitUpdate),a.emitter.on("pointerup",r.handlePointerUp),r}return n(r,e),r.prototype.destroy=function(){this.dragging.destroy()},r}(t.Interaction),V=function(e){function r(n){var i=e.call(this,n)||this;i.subjectSeg=null,i.isDragging=!1,i.eventRange=null,i.relevantEvents=null,i.receivingCalendar=null,i.validMutation=null,i.mutatedRelevantEvents=null,i.handlePointerDown=function(e){var n=e.origEvent.target,r=i,o=r.component,a=r.dragging,l=a.mirror,s=o.calendar,c=i.subjectSeg=t.getElSeg(e.subjectEl),d=i.eventRange=c.eventRange,u=d.instance.instanceId;i.relevantEvents=t.getRelevantEvents(s.state.eventStore,u),a.minDistance=e.isTouch?0:o.opt("eventDragMinDistance"),a.delay=e.isTouch&&u!==o.props.eventSelection?h(o):null,l.parentNode=s.el,l.revertDuration=o.opt("dragRevertDuration");var g=o.isValidSegDownEl(n)&&!t.elementClosest(n,".fc-resizer");a.setIgnoreMove(!g),i.isDragging=g&&e.subjectEl.classList.contains("fc-draggable")},i.handleDragStart=function(e){var n=i.component.calendar,r=i.eventRange,o=r.instance.instanceId;e.isTouch?o!==i.component.props.eventSelection&&n.dispatch({type:"SELECT_EVENT",eventInstanceId:o}):n.dispatch({type:"UNSELECT_EVENT"}),i.isDragging&&(n.unselect(e),n.publiclyTrigger("eventDragStart",[{el:i.subjectSeg.el,event:new t.EventApi(n,r.def,r.instance),jsEvent:e.origEvent,view:i.component.view}]))},i.handleHitUpdate=function(e,n){if(i.isDragging){var r=i.relevantEvents,o=i.hitDragging.initialHit,a=i.component.calendar,l=null,s=null,d=null,u=!1,h={affectedEvents:r,mutatedEvents:t.createEmptyEventStore(),isEvent:!0,origSeg:i.subjectSeg};if(e){var p=e.component;l=p.calendar,a===l||p.opt("editable")&&p.opt("droppable")?(s=g(o,e,l.pluginSystem.hooks.eventDragMutationMassagers))&&(d=t.applyMutationToEventStore(r,l.eventUiBases,s,l),h.mutatedEvents=d,p.isInteractionValid(h)||(u=!0,s=null,d=null,h.mutatedEvents=t.createEmptyEventStore())):l=null}i.displayDrag(l,h),u?t.disableCursor():t.enableCursor(),n||(a===l&&c(o,e)&&(s=null),i.dragging.setMirrorNeedsRevert(!s),i.dragging.setMirrorIsVisible(!e||!document.querySelector(".fc-mirror")),i.receivingCalendar=l,i.validMutation=s,i.mutatedRelevantEvents=d)}},i.handlePointerUp=function(){i.isDragging||i.cleanup()},i.handleDragEnd=function(e){if(i.isDragging){var n=i.component.calendar,r=i.component.view,o=i.receivingCalendar,a=i.eventRange.def,l=i.eventRange.instance,s=new t.EventApi(n,a,l),c=i.relevantEvents,d=i.mutatedRelevantEvents,u=i.hitDragging.finalHit;if(i.clearDrag(),n.publiclyTrigger("eventDragStop",[{el:i.subjectSeg.el,event:s,jsEvent:e.origEvent,view:r}]),i.validMutation){if(o===n){n.dispatch({type:"MERGE_EVENTS",eventStore:d});for(var g={},h=0,p=n.pluginSystem.hooks.eventDropTransformers;h<p.length;h++){var v=p[h];S(g,v(i.validMutation,n))}S(g,{el:e.subjectEl,delta:i.validMutation.startDelta,oldEvent:s,event:new t.EventApi(n,d.defs[a.defId],l?d.instances[l.instanceId]:null),revert:function(){n.dispatch({type:"MERGE_EVENTS",eventStore:c})},jsEvent:e.origEvent,view:r}),n.publiclyTrigger("eventDrop",[g])}else if(o){n.publiclyTrigger("eventLeave",[{draggedEl:e.subjectEl,event:s,view:r}]),n.dispatch({type:"REMOVE_EVENT_INSTANCES",instances:i.mutatedRelevantEvents.instances}),o.dispatch({type:"MERGE_EVENTS",eventStore:i.mutatedRelevantEvents}),e.isTouch&&o.dispatch({type:"SELECT_EVENT",eventInstanceId:l.instanceId});var f=o.buildDatePointApi(u.dateSpan);f.draggedEl=e.subjectEl,f.jsEvent=e.origEvent,f.view=u.component,o.publiclyTrigger("drop",[f]),o.publiclyTrigger("eventReceive",[{draggedEl:e.subjectEl,event:new t.EventApi(o,d.defs[a.defId],d.instances[l.instanceId]),view:u.component}])}}else n.publiclyTrigger("_noEventDrop")}i.cleanup()};var o=i.component,a=i.dragging=new L(o.el);a.pointer.selector=r.SELECTOR,a.touchScrollAllowed=!1,a.autoScroller.isEnabled=o.opt("dragScroll");var l=i.hitDragging=new A(i.dragging,t.interactionSettingsStore);return l.useSubjectCenter=n.useEventCenter,l.emitter.on("pointerdown",i.handlePointerDown),l.emitter.on("dragstart",i.handleDragStart),l.emitter.on("hitupdate",i.handleHitUpdate),l.emitter.on("pointerup",i.handlePointerUp),l.emitter.on("dragend",i.handleDragEnd),i}return n(r,e),r.prototype.destroy=function(){this.dragging.destroy()},r.prototype.displayDrag=function(e,n){var r=this.component.calendar,i=this.receivingCalendar;i&&i!==e&&(i===r?i.dispatch({type:"SET_EVENT_DRAG",state:{affectedEvents:n.affectedEvents,mutatedEvents:t.createEmptyEventStore(),isEvent:!0,origSeg:n.origSeg}}):i.dispatch({type:"UNSET_EVENT_DRAG"})),e&&e.dispatch({type:"SET_EVENT_DRAG",state:n})},r.prototype.clearDrag=function(){var e=this.component.calendar,t=this.receivingCalendar;t&&t.dispatch({type:"UNSET_EVENT_DRAG"}),e!==t&&e.dispatch({type:"UNSET_EVENT_DRAG"})},r.prototype.cleanup=function(){this.subjectSeg=null,this.isDragging=!1,this.eventRange=null,this.relevantEvents=null,this.receivingCalendar=null,this.validMutation=null,this.mutatedRelevantEvents=null},r.SELECTOR=".fc-draggable, .fc-resizable",r}(t.Interaction),Y=function(e){function r(n){var r=e.call(this,n)||this;r.draggingSeg=null,r.eventRange=null,r.relevantEvents=null,r.validMutation=null,r.mutatedRelevantEvents=null,r.handlePointerDown=function(e){var t=r.component,n=r.querySeg(e),i=r.eventRange=n.eventRange;r.dragging.minDistance=t.opt("eventDragMinDistance"),r.dragging.setIgnoreMove(!r.component.isValidSegDownEl(e.origEvent.target)||e.isTouch&&r.component.props.eventSelection!==i.instance.instanceId)},r.handleDragStart=function(e){var n=r.component.calendar,i=r.eventRange;r.relevantEvents=t.getRelevantEvents(n.state.eventStore,r.eventRange.instance.instanceId),r.draggingSeg=r.querySeg(e),n.unselect(),n.publiclyTrigger("eventResizeStart",[{el:r.draggingSeg.el,event:new t.EventApi(n,i.def,i.instance),jsEvent:e.origEvent,view:r.component.view}])},r.handleHitUpdate=function(e,n,i){var o=r.component.calendar,a=r.relevantEvents,l=r.hitDragging.initialHit,s=r.eventRange.instance,d=null,u=null,g=!1,h={affectedEvents:a,mutatedEvents:t.createEmptyEventStore(),isEvent:!0,origSeg:r.draggingSeg};e&&(d=p(l,e,i.subjectEl.classList.contains("fc-start-resizer"),s.range,o.pluginSystem.hooks.eventResizeJoinTransforms)),d&&(u=t.applyMutationToEventStore(a,o.eventUiBases,d,o),h.mutatedEvents=u,r.component.isInteractionValid(h)||(g=!0,d=null,u=null,h.mutatedEvents=null)),u?o.dispatch({type:"SET_EVENT_RESIZE",state:h}):o.dispatch({type:"UNSET_EVENT_RESIZE"}),g?t.disableCursor():t.enableCursor(),n||(d&&c(l,e)&&(d=null),r.validMutation=d,r.mutatedRelevantEvents=u)},r.handleDragEnd=function(e){var n=r.component.calendar,i=r.component.view,o=r.eventRange.def,a=r.eventRange.instance,l=new t.EventApi(n,o,a),s=r.relevantEvents,c=r.mutatedRelevantEvents;n.publiclyTrigger("eventResizeStop",[{el:r.draggingSeg.el,event:l,jsEvent:e.origEvent,view:i}]),r.validMutation?(n.dispatch({type:"MERGE_EVENTS",eventStore:c}),n.publiclyTrigger("eventResize",[{el:r.draggingSeg.el,startDelta:r.validMutation.startDelta||t.createDuration(0),endDelta:r.validMutation.endDelta||t.createDuration(0),prevEvent:l,event:new t.EventApi(n,c.defs[o.defId],a?c.instances[a.instanceId]:null),revert:function(){n.dispatch({type:"MERGE_EVENTS",eventStore:s})},jsEvent:e.origEvent,view:i}])):n.publiclyTrigger("_noEventResize"),r.draggingSeg=null,r.relevantEvents=null,r.validMutation=null};var i=n.component,o=r.dragging=new L(i.el);o.pointer.selector=".fc-resizer",o.touchScrollAllowed=!1,o.autoScroller.isEnabled=i.opt("dragScroll");var a=r.hitDragging=new A(r.dragging,t.interactionSettingsToStore(n));return a.emitter.on("pointerdown",r.handlePointerDown),a.emitter.on("dragstart",r.handleDragStart),a.emitter.on("hitupdate",r.handleHitUpdate),a.emitter.on("dragend",r.handleDragEnd),r}return n(r,e),r.prototype.destroy=function(){this.dragging.destroy()},r.prototype.querySeg=function(e){return t.getElSeg(t.elementClosest(e.subjectEl,this.component.fgSegSelector))},r}(t.Interaction),_=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,V.SELECTOR)&&i.dispatch({type:"UNSELECT_EVENT"})}n.isRecentPointerDateSelect=!1},this.calendar=e;var r=this.documentPointer=new T(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}(),X=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,i){var o=r.hitDragging.dragging,a=null,l=null,s=!1,c={affectedEvents:t.createEmptyEventStore(),mutatedEvents:t.createEmptyEventStore(),isEvent:r.dragMeta.create,origSeg:null};e&&(a=e.component.calendar,r.canDropElOnCalendar(i.subjectEl,a)&&(l=v(e.dateSpan,r.dragMeta,a),c.mutatedEvents=t.eventTupleToStore(l),(s=!t.isInteractionValid(c,a))&&(c.mutatedEvents=t.createEmptyEventStore(),l=null))),r.displayDrag(a,c),o.setMirrorIsVisible(n||!l||!document.querySelector(".fc-mirror")),s?t.disableCursor():t.enableCursor(),n||(o.setMirrorNeedsRevert(!l),r.receivingCalendar=a,r.droppableEvent=l)},this.handleDragEnd=function(e){var n=r,i=n.receivingCalendar,o=n.droppableEvent;if(r.clearDrag(),i&&o){var a=r.hitDragging.finalHit,l=a.component.view,s=r.dragMeta,c=i.buildDatePointApi(a.dateSpan);c.draggedEl=e.subjectEl,c.jsEvent=e.origEvent,c.view=l,i.publiclyTrigger("drop",[c]),s.create&&(i.dispatch({type:"MERGE_EVENTS",eventStore:t.eventTupleToStore(o)}),e.isTouch&&i.dispatch({type:"SELECT_EVENT",eventInstanceId:o.instance.instanceId}),i.publiclyTrigger("eventReceive",[{draggedEl:e.subjectEl,event:new t.EventApi(i,o.def,o.instance),view:l}]))}r.receivingCalendar=null,r.droppableEvent=null};var i=this.hitDragging=new A(e,t.interactionSettingsStore);i.requireInitial=!1,i.emitter.on("dragstart",this.handleDragStart),i.emitter.on("hitupdate",this.handleHitUpdate),i.emitter.on("dragend",this.handleDragEnd),this.suppliedDragMeta=n}return e.prototype.buildDragMeta=function(e){return"object"==typeof this.suppliedDragMeta?t.parseDragMeta(this.suppliedDragMeta):"function"==typeof this.suppliedDragMeta?t.parseDragMeta(this.suppliedDragMeta(e)):f(e)},e.prototype.displayDrag=function(e,t){var n=this.receivingCalendar;n&&n!==e&&n.dispatch({type:"UNSET_EVENT_DRAG"}),e&&e.dispatch({type:"SET_EVENT_DRAG",state:t})},e.prototype.clearDrag=function(){this.receivingCalendar&&this.receivingCalendar.dispatch({type:"UNSET_EVENT_DRAG"})},e.prototype.canDropElOnCalendar=function(e,n){var r=n.opt("dropAccept");return"function"==typeof r?r(e):"string"!=typeof r||!r||Boolean(t.elementMatches(e,r))},e}();t.config.dataAttrPrefix="";var U=function(){function e(e,n){var r=this;void 0===n&&(n={}),this.handlePointerDown=function(e){var n=r.dragging,i=r.settings,o=i.minDistance,a=i.longPressDelay;n.minDistance=null!=o?o:e.isTouch?0:t.globalDefaults.eventDragMinDistance,n.delay=e.isTouch?null!=a?a:t.globalDefaults.longPressDelay:0},this.handleDragStart=function(e){e.isTouch&&r.dragging.delay&&e.subjectEl.classList.contains("fc-event")&&r.dragging.mirror.getMirrorEl().classList.add("fc-selected")},this.settings=n;var i=this.dragging=new L(e);i.touchScrollAllowed=!1,null!=n.itemSelector&&(i.pointer.selector=n.itemSelector),null!=n.appendTo&&(i.mirror.parentNode=n.appendTo),i.emitter.on("pointerdown",this.handlePointerDown),i.emitter.on("dragstart",this.handleDragStart),new X(i,n.eventData)}return e.prototype.destroy=function(){this.dragging.destroy()},e}(),O=function(e){function t(t){var n=e.call(this,t)||this;n.shouldIgnoreMove=!1,n.mirrorSelector="",n.currentMirrorEl=null,n.handlePointerDown=function(e){n.emitter.trigger("pointerdown",e),n.shouldIgnoreMove||n.emitter.trigger("dragstart",e)},n.handlePointerMove=function(e){n.shouldIgnoreMove||n.emitter.trigger("dragmove",e)},n.handlePointerUp=function(e){n.emitter.trigger("pointerup",e),n.shouldIgnoreMove||n.emitter.trigger("dragend",e)};var r=n.pointer=new T(t)
+;return r.emitter.on("pointerdown",n.handlePointerDown),r.emitter.on("pointermove",n.handlePointerMove),r.emitter.on("pointerup",n.handlePointerUp),n}return n(t,e),t.prototype.destroy=function(){this.pointer.destroy()},t.prototype.setIgnoreMove=function(e){this.shouldIgnoreMove=e},t.prototype.setMirrorIsVisible=function(e){if(e)this.currentMirrorEl&&(this.currentMirrorEl.style.visibility="",this.currentMirrorEl=null);else{var t=this.mirrorSelector?document.querySelector(this.mirrorSelector):null;t&&(this.currentMirrorEl=t,t.style.visibility="hidden")}},t}(t.ElementDragging),q=function(){function e(e,t){var n=document;e===document||e instanceof Element?(n=e,t=t||{}):t=e||{};var r=this.dragging=new O(n);"string"==typeof t.itemSelector?r.pointer.selector=t.itemSelector:n===document&&(r.pointer.selector="[data-event]"),"string"==typeof t.mirrorSelector&&(r.mirrorSelector=t.mirrorSelector),new X(r,t.eventData)}return e.prototype.destroy=function(){this.dragging.destroy()},e}(),W=t.createPlugin({componentInteractions:[H,N,V,Y],calendarInteractions:[_],elementDraggingImpl:L});e.Draggable=U,e.FeaturefulElementDragging=L,e.PointerDragging=T,e.ThirdPartyDraggable=q,e.default=W,Object.defineProperty(e,"__esModule",{value:!0})});
\ No newline at end of file
--- /dev/null
+{
+ "_from": "@fullcalendar/interaction",
+ "_id": "@fullcalendar/interaction@4.1.0",
+ "_inBundle": false,
+ "_integrity": "sha512-s9679mbLnBqvQJpIqj4CJi36yGCOXKYshasW7PL5a/BgNXYEScHtdSNZubJx26zHlgGOh8S0wIvBlYQUihMcLQ==",
+ "_location": "/@fullcalendar/interaction",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "tag",
+ "registry": true,
+ "raw": "@fullcalendar/interaction",
+ "name": "@fullcalendar/interaction",
+ "escapedName": "@fullcalendar%2finteraction",
+ "scope": "@fullcalendar",
+ "rawSpec": "",
+ "saveSpec": null,
+ "fetchSpec": "latest"
+ },
+ "_requiredBy": [
+ "#USER",
+ "/"
+ ],
+ "_resolved": "https://registry.npmjs.org/@fullcalendar/interaction/-/interaction-4.1.0.tgz",
+ "_shasum": "5d0c4c2c407934ff8bd45071ff76fb6736937da3",
+ "_spec": "@fullcalendar/interaction",
+ "_where": "C:\\Users\\ksaff\\Workspace\\Websites\\fullcalendar",
+ "author": {
+ "name": "Adam Shaw",
+ "email": "arshaw@arshaw.com",
+ "url": "http://arshaw.com/"
+ },
+ "bugs": {
+ "url": "https://fullcalendar.io/reporting-bugs"
+ },
+ "bundleDependencies": false,
+ "copyright": "2019 Adam Shaw",
+ "deprecated": false,
+ "description": "Provides functionality for event drag-n-drop, resizing, dateClick, and selectable actions",
+ "docs": "https://fullcalendar.io/docs/editable",
+ "homepage": "https://fullcalendar.io/",
+ "keywords": [
+ "calendar",
+ "event",
+ "full-sized"
+ ],
+ "license": "MIT",
+ "main": "main.js",
+ "name": "@fullcalendar/interaction",
+ "peerDependencies": {
+ "@fullcalendar/core": "~4.1.0"
+ },
+ "releaseDate": "2019-04-24",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/fullcalendar/fullcalendar.git",
+ "homepage": "https://github.com/fullcalendar/fullcalendar"
+ },
+ "title": "FullCalendar Interaction Plugin",
+ "types": "main.d.ts",
+ "unpkg": "main.min.js",
+ "version": "4.1.0"
+}
--- /dev/null
+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.
--- /dev/null
+
+# FullCalendar List View Plugin
+
+View your events as a bulleted list
+
+[View the docs »](https://fullcalendar.io/docs/list-view)
+
+This package was created from the [FullCalendar monorepo »](https://github.com/fullcalendar/fullcalendar)
--- /dev/null
+/*!
+FullCalendar List View Plugin v4.1.0
+Docs & License: https://fullcalendar.io/
+(c) 2019 Adam Shaw
+*/
+/* List View
+--------------------------------------------------------------------------------------------------*/
+/* possibly reusable */
+.fc-event-dot {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ border-radius: 5px; }
+
+/* view wrapper */
+.fc-rtl .fc-list-view {
+ direction: rtl;
+ /* unlike core views, leverage browser RTL */ }
+
+.fc-list-view {
+ border-width: 1px;
+ border-style: solid; }
+
+/* table resets */
+.fc .fc-list-table {
+ table-layout: auto;
+ /* for shrinkwrapping cell content */ }
+
+.fc-list-table td {
+ border-width: 1px 0 0;
+ padding: 8px 14px; }
+
+.fc-list-table tr:first-child td {
+ border-top-width: 0; }
+
+/* day headings with the list */
+.fc-list-heading {
+ border-bottom-width: 1px; }
+
+.fc-list-heading td {
+ font-weight: bold; }
+
+.fc-ltr .fc-list-heading-main {
+ float: left; }
+
+.fc-ltr .fc-list-heading-alt {
+ float: right; }
+
+.fc-rtl .fc-list-heading-main {
+ float: right; }
+
+.fc-rtl .fc-list-heading-alt {
+ float: left; }
+
+/* event list items */
+.fc-list-item.fc-has-url {
+ cursor: pointer;
+ /* whole row will be clickable */ }
+
+.fc-list-item-marker,
+.fc-list-item-time {
+ white-space: nowrap;
+ width: 1px; }
+
+/* make the dot closer to the event title */
+.fc-ltr .fc-list-item-marker {
+ padding-right: 0; }
+
+.fc-rtl .fc-list-item-marker {
+ padding-left: 0; }
+
+.fc-list-item-title a {
+ /* every event title cell has an <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; }
--- /dev/null
+declare module "@fullcalendar/list/ListEventRenderer" {
+ import { FgEventRenderer, Seg } from "@fullcalendar/core";
+ import ListView from "@fullcalendar/list/ListView";
+ export { ListEventRenderer as default, ListEventRenderer };
+ class ListEventRenderer extends FgEventRenderer {
+ listView: ListView;
+ constructor(listView: ListView);
+ attachSegs(segs: Seg[]): void;
+ detachSegs(): void;
+ renderSegHtml(seg: Seg): string;
+ computeEventTimeFormat(): {
+ hour: string;
+ minute: string;
+ meridiem: string;
+ };
+ }
+}
+
+declare module "@fullcalendar/list/ListView" {
+ import { View, ViewProps, ScrollComponent, DateMarker, DateRange, DateProfileGenerator, ComponentContext, ViewSpec, EventUiHash, EventRenderRange, EventStore, Seg } from "@fullcalendar/core";
+ export { ListView as default, ListView };
+ class ListView extends View {
+ scroller: ScrollComponent;
+ contentEl: HTMLElement;
+ dayDates: DateMarker[];
+ private computeDateVars;
+ private eventStoreToSegs;
+ private renderContent;
+ constructor(context: ComponentContext, viewSpec: ViewSpec, dateProfileGenerator: DateProfileGenerator, parentEl: HTMLElement);
+ render(props: ViewProps): void;
+ destroy(): 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;
+ }
+}
+
+declare module "@fullcalendar/list" {
+ import ListView from "@fullcalendar/list/ListView";
+ export { ListView };
+ const _default_9: import("@fullcalendar/core/plugin-system").PluginDef;
+ export default _default_9;
+}
\ No newline at end of file
--- /dev/null
+/*!
+FullCalendar List View Plugin v4.1.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, listView.context) || 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, view = _a.view, theme = _a.theme;
+ 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(view);
+ }
+ 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(view);
+ }
+ }
+ 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 '<tr class="' + classes.join(' ') + '">' +
+ (this.displayEventTime ?
+ '<td class="fc-list-item-time ' + theme.getClass('widgetContent') + '">' +
+ (timeHtml || '') +
+ '</td>' :
+ '') +
+ '<td class="fc-list-item-marker ' + theme.getClass('widgetContent') + '">' +
+ '<span class="fc-event-dot"' +
+ (bgColor ?
+ ' style="background-color:' + bgColor + '"' :
+ '') +
+ '></span>' +
+ '</td>' +
+ '<td class="fc-list-item-title ' + theme.getClass('widgetContent') + '">' +
+ '<a' + (url ? ' href="' + core.htmlEscape(url) + '"' : '') + '>' +
+ core.htmlEscape(eventDef.title || '') +
+ '</a>' +
+ '</td>' +
+ '</tr>';
+ };
+ // 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(context, viewSpec, dateProfileGenerator, parentEl) {
+ var _this = _super.call(this, context, viewSpec, dateProfileGenerator, parentEl) || this;
+ _this.computeDateVars = core.memoize(computeDateVars);
+ _this.eventStoreToSegs = core.memoize(_this._eventStoreToSegs);
+ var eventRenderer = _this.eventRenderer = new ListEventRenderer(_this);
+ _this.renderContent = core.memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer));
+ _this.el.classList.add('fc-list-view');
+ var listViewClassNames = (_this.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
+ context.calendar.registerInteractiveComponent(_this, {
+ el: _this.el
+ // TODO: make aware that it doesn't do Hits
+ });
+ return _this;
+ }
+ ListView.prototype.render = function (props) {
+ var _a = this.computeDateVars(props.dateProfile), dayDates = _a.dayDates, dayRanges = _a.dayRanges;
+ this.dayDates = dayDates;
+ this.renderContent(this.eventStoreToSegs(props.eventStore, props.eventUiBases, dayRanges));
+ };
+ ListView.prototype.destroy = function () {
+ _super.prototype.destroy.call(this);
+ this.scroller.destroy(); // will remove the Grid too
+ this.calendar.unregisterInteractiveComponent(this);
+ };
+ 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.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, 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 =
+ '<div class="fc-list-empty-wrap2">' + // TODO: try less wraps
+ '<div class="fc-list-empty-wrap1">' +
+ '<div class="fc-list-empty">' +
+ core.htmlEscape(this.opt('noEventsMessage')) +
+ '</div>' +
+ '</div>' +
+ '</div>';
+ };
+ // called by ListEventRenderer
+ ListView.prototype.renderSegList = function (allSegs) {
+ var segsByDay = this.groupSegsByDay(allSegs); // sparse array
+ var dayIndex;
+ var daySegs;
+ var i;
+ var tableEl = core.htmlToElement('<table class="fc-list-table ' + this.calendar.theme.getClass('tableList') + '"><tbody></tbody></table>');
+ 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 dateEnv = this.dateEnv;
+ var mainFormat = core.createFormatter(this.opt('listDayFormat')); // TODO: cache
+ var altFormat = core.createFormatter(this.opt('listDayAltFormat')); // TODO: cache
+ return core.createElement('tr', {
+ className: 'fc-list-heading',
+ 'data-date': dateEnv.formatIso(dayDate, { omitTime: true })
+ }, '<td class="' + (this.calendar.theme.getClass('tableListHeading') ||
+ this.calendar.theme.getClass('widgetHeader')) + '" colspan="3">' +
+ (mainFormat ?
+ core.buildGotoAnchorHtml(this, dayDate, { 'class': 'fc-list-heading-main' }, core.htmlEscape(dateEnv.format(dayDate, mainFormat)) // inner HTML
+ ) :
+ '') +
+ (altFormat ?
+ core.buildGotoAnchorHtml(this, dayDate, { 'class': 'fc-list-heading-alt' }, core.htmlEscape(dateEnv.format(dayDate, altFormat)) // inner HTML
+ ) :
+ '') +
+ '</td>');
+ };
+ 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 });
+
+}));
--- /dev/null
+/*!
+FullCalendar List View Plugin v4.1.0
+Docs & License: https://fullcalendar.io/
+(c) 2019 Adam Shaw
+*/.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
--- /dev/null
+/*!
+FullCalendar List View Plugin v4.1.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):(e=e||self,t(e.FullCalendarList={},e.FullCalendar))}(this,function(e,t){"use strict";function n(e,t){function n(){this.constructor=e}s(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}function r(e){for(var n=t.startOfDay(e.renderRange.start),r=e.renderRange.end,s=[],a=[];n<r;)s.push(n),a.push({start:n,end:t.addDays(n,1)}),n=t.addDays(n,1);return{dayDates:s,dayRanges:a}}/*! *****************************************************************************
+ 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 s=function(e,t){return(s=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)},a=function(e){function r(t){var n=e.call(this,t.context)||this;return n.listView=t,n}return n(r,e),r.prototype.attachSegs=function(e){e.length?this.listView.renderSegList(e):this.listView.renderEmptyMessage()},r.prototype.detachSegs=function(){},r.prototype.renderSegHtml=function(e){var n,r=this.context,s=r.view,a=r.theme,i=e.eventRange,o=i.def,l=i.instance,d=i.ui,c=o.url,p=["fc-list-item"].concat(d.classNames),h=d.backgroundColor;return n=o.allDay?t.getAllDayHtml(s):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(s):t.htmlEscape(this.getTimeText(i)),c&&p.push("fc-has-url"),'<tr class="'+p.join(" ")+'">'+(this.displayEventTime?'<td class="fc-list-item-time '+a.getClass("widgetContent")+'">'+(n||"")+"</td>":"")+'<td class="fc-list-item-marker '+a.getClass("widgetContent")+'"><span class="fc-event-dot"'+(h?' style="background-color:'+h+'"':"")+'></span></td><td class="fc-list-item-title '+a.getClass("widgetContent")+'"><a'+(c?' href="'+t.htmlEscape(c)+'"':"")+">"+t.htmlEscape(o.title||"")+"</a></td></tr>"},r.prototype.computeEventTimeFormat=function(){return{hour:"numeric",minute:"2-digit",meridiem:"short"}},r}(t.FgEventRenderer),i=function(e){function s(n,s,i,o){var l=e.call(this,n,s,i,o)||this;l.computeDateVars=t.memoize(r),l.eventStoreToSegs=t.memoize(l._eventStoreToSegs);var d=l.eventRenderer=new a(l);l.renderContent=t.memoizeRendering(d.renderSegs.bind(d),d.unrender.bind(d)),l.el.classList.add("fc-list-view");for(var c=(l.theme.getClass("listView")||"").split(" "),p=0,h=c;p<h.length;p++){var u=h[p];u&&l.el.classList.add(u)}return l.scroller=new t.ScrollComponent("hidden","auto"),l.el.appendChild(l.scroller.el),l.contentEl=l.scroller.el,n.calendar.registerInteractiveComponent(l,{el:l.el}),l}return n(s,e),s.prototype.render=function(e){var t=this.computeDateVars(e.dateProfile),n=t.dayDates,r=t.dayRanges;this.dayDates=n,this.renderContent(this.eventStoreToSegs(e.eventStore,e.eventUiBases,r))},s.prototype.destroy=function(){e.prototype.destroy.call(this),this.scroller.destroy(),this.calendar.unregisterInteractiveComponent(this)},s.prototype.updateSize=function(t,n,r){e.prototype.updateSize.call(this,t,n,r),this.eventRenderer.computeSizes(t),this.eventRenderer.assignSizes(t),this.scroller.clear(),r||this.scroller.setHeight(this.computeScrollerHeight(n))},s.prototype.computeScrollerHeight=function(e){return e-t.subtractInnerElHeight(this.el,this.scroller.el)},s.prototype._eventStoreToSegs=function(e,n,r){return this.eventRangesToSegs(t.sliceEventStore(e,n,this.props.dateProfile.activeRange,this.nextDayThreshold).fg,r)},s.prototype.eventRangesToSegs=function(e,t){for(var n=[],r=0,s=e;r<s.length;r++){var a=s[r];n.push.apply(n,this.eventRangeToSegs(a,t))}return n},s.prototype.eventRangeToSegs=function(e,n){var r,s,a,i=this,o=i.dateEnv,l=i.nextDayThreshold,d=e.range,c=e.def.allDay,p=[];for(r=0;r<n.length;r++)if((s=t.intersectRanges(d,n[r]))&&(a={component:this,eventRange:e,start:s.start,end:s.end,isStart:e.isStart&&s.start.valueOf()===d.start.valueOf(),isEnd:e.isEnd&&s.end.valueOf()===d.end.valueOf(),dayIndex:r},p.push(a),!a.isEnd&&!c&&r+1<n.length&&d.end<o.add(n[r+1].start,l))){a.end=d.end,a.isEnd=!0;break}return p},s.prototype.renderEmptyMessage=function(){this.contentEl.innerHTML='<div class="fc-list-empty-wrap2"><div class="fc-list-empty-wrap1"><div class="fc-list-empty">'+t.htmlEscape(this.opt("noEventsMessage"))+"</div></div></div>"},s.prototype.renderSegList=function(e){var n,r,s,a=this.groupSegsByDay(e),i=t.htmlToElement('<table class="fc-list-table '+this.calendar.theme.getClass("tableList")+'"><tbody></tbody></table>'),o=i.querySelector("tbody");for(n=0;n<a.length;n++)if(r=a[n])for(o.appendChild(this.buildDayHeaderRow(this.dayDates[n])),r=this.eventRenderer.sortEventSegs(r),s=0;s<r.length;s++)o.appendChild(r[s].el);this.contentEl.innerHTML="",this.contentEl.appendChild(i)},s.prototype.groupSegsByDay=function(e){var t,n,r=[];for(t=0;t<e.length;t++)n=e[t],(r[n.dayIndex]||(r[n.dayIndex]=[])).push(n);return r},s.prototype.buildDayHeaderRow=function(e){var n=this.dateEnv,r=t.createFormatter(this.opt("listDayFormat")),s=t.createFormatter(this.opt("listDayAltFormat"));return t.createElement("tr",{className:"fc-list-heading","data-date":n.formatIso(e,{omitTime:!0})},'<td class="'+(this.calendar.theme.getClass("tableListHeading")||this.calendar.theme.getClass("widgetHeader"))+'" colspan="3">'+(r?t.buildGotoAnchorHtml(this,e,{class:"fc-list-heading-main"},t.htmlEscape(n.format(e,r))):"")+(s?t.buildGotoAnchorHtml(this,e,{class:"fc-list-heading-alt"},t.htmlEscape(n.format(e,s))):"")+"</td>")},s}(t.View);i.prototype.fgSegSelector=".fc-list-item";var o=t.createPlugin({views:{list:{class:i,buttonTextKey:"list",listDayFormat:{month:"long",day:"numeric",year:"numeric"}},listDay:{type:"list",duration:{days:1},listDayFormat:{weekday:"long"}},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"}},listYear:{type:"list",duration:{year:1},listDayAltFormat:{weekday:"long"}}}});e.ListView=i,e.default=o,Object.defineProperty(e,"__esModule",{value:!0})});
\ No newline at end of file
--- /dev/null
+{
+ "_from": "@fullcalendar/list",
+ "_id": "@fullcalendar/list@4.1.0",
+ "_inBundle": false,
+ "_integrity": "sha512-NSCiD3I8HVioq7M1jzyovZDTjBq1L8QRqUZDiYZXq14lAKYwYUdZL3MUlH7MNjL/xU/dKJWD+rTKGno7FXmT9g==",
+ "_location": "/@fullcalendar/list",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "tag",
+ "registry": true,
+ "raw": "@fullcalendar/list",
+ "name": "@fullcalendar/list",
+ "escapedName": "@fullcalendar%2flist",
+ "scope": "@fullcalendar",
+ "rawSpec": "",
+ "saveSpec": null,
+ "fetchSpec": "latest"
+ },
+ "_requiredBy": [
+ "#USER",
+ "/"
+ ],
+ "_resolved": "https://registry.npmjs.org/@fullcalendar/list/-/list-4.1.0.tgz",
+ "_shasum": "290274fc4e4616bea9238a31f49f53e295d11d3f",
+ "_spec": "@fullcalendar/list",
+ "_where": "C:\\Users\\ksaff\\Workspace\\Websites\\fullcalendar",
+ "author": {
+ "name": "Adam Shaw",
+ "email": "arshaw@arshaw.com",
+ "url": "http://arshaw.com/"
+ },
+ "bugs": {
+ "url": "https://fullcalendar.io/reporting-bugs"
+ },
+ "bundleDependencies": false,
+ "copyright": "2019 Adam Shaw",
+ "deprecated": false,
+ "description": "View your events as a bulleted list",
+ "docs": "https://fullcalendar.io/docs/list-view",
+ "homepage": "https://fullcalendar.io/",
+ "keywords": [
+ "calendar",
+ "event",
+ "full-sized"
+ ],
+ "license": "MIT",
+ "main": "main.js",
+ "name": "@fullcalendar/list",
+ "peerDependencies": {
+ "@fullcalendar/core": "~4.1.0"
+ },
+ "releaseDate": "2019-04-24",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/fullcalendar/fullcalendar.git",
+ "homepage": "https://github.com/fullcalendar/fullcalendar"
+ },
+ "title": "FullCalendar List View Plugin",
+ "types": "main.d.ts",
+ "unpkg": "main.min.js",
+ "version": "4.1.0"
+}
+++ /dev/null
-!function(e,a){"object"==typeof exports&&"object"==typeof module?module.exports=a(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],a):"object"==typeof exports?a(require("moment"),require("fullcalendar")):a(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,a){return function(e){function a(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,a),r.l=!0,r.exports}var t={};return a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)},a.p="",a(a.s=434)}([function(a,t){a.exports=e},function(e,t){e.exports=a},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(66);var n=t(1);n.datepickerLocale("af","af",{closeText:"Selekteer",prevText:"Vorige",nextText:"Volgende",currentText:"Vandag",monthNames:["Januarie","Februarie","Maart","April","Mei","Junie","Julie","Augustus","September","Oktober","November","Desember"],monthNamesShort:["Jan","Feb","Mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],dayNames:["Sondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrydag","Saterdag"],dayNamesShort:["Son","Maa","Din","Woe","Don","Vry","Sat"],dayNamesMin:["So","Ma","Di","Wo","Do","Vr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("af",{buttonText:{year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayHtml:"Heeldag",eventLimitText:"Addisionele",noEventsMessage:"Daar is geen gebeurtenisse nie"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(e){return/^nm$/i.test(e)},meridiem:function(e,a,t){return e<12?t?"vm":"VM":t?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[Môre om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",ss:"%d sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(68);var n=t(1);n.datepickerLocale("ar-dz","ar-DZ",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويلية","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ar-dz",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("ar-dz",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"أح_إث_ثلا_أر_خم_جم_سب".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(70);var n=t(1);n.datepickerLocale("ar-kw","ar",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ar-kw",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("ar-kw",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:12}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(72);var n=t(1);n.datepickerLocale("ar-ly","ar",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ar-ly",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},t=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},n={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},r=function(e){return function(a,r,s,d){var i=t(a),o=n[e][t(a)];return 2===i&&(o=o[r?0:1]),o.replace(/%d/i,a)}},s=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];return e.defineLocale("ar-ly",{months:s,monthsShort:s,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,a,t){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:r("s"),ss:r("s"),m:r("m"),mm:r("m"),h:r("h"),hh:r("h"),d:r("d"),dd:r("d"),M:r("M"),MM:r("M"),y:r("y"),yy:r("y")},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return a[e]}).replace(/,/g,"،")},week:{dow:6,doy:12}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(74);var n=t(1);n.datepickerLocale("ar-ma","ar",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ar-ma",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,doy:12}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(76);var n=t(1);n.datepickerLocale("ar-sa","ar",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ar-sa",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},t={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"};return e.defineLocale("ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,a,t){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(e){return t[e]}).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return a[e]}).replace(/,/g,"،")},week:{dow:0,doy:6}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(78);var n=t(1);n.datepickerLocale("ar-tn","ar",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ar-tn",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("ar-tn",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(80);var n=t(1);n.datepickerLocale("ar","ar",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ar",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},t={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},n=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},r={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},s=function(e){return function(a,t,s,d){var i=n(a),o=r[e][n(a)];return 2===i&&(o=o[t?0:1]),o.replace(/%d/i,a)}},d=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];return e.defineLocale("ar",{months:d,monthsShort:d,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,a,t){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:s("s"),ss:s("s"),m:s("m"),mm:s("m"),h:s("h"),hh:s("h"),d:s("d"),dd:s("d"),M:s("M"),MM:s("M"),y:s("y"),yy:s("y")},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(e){return t[e]}).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return a[e]}).replace(/,/g,"،")},week:{dow:6,doy:12}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(82);var n=t(1);n.datepickerLocale("bg","bg",{closeText:"затвори",prevText:"<назад",nextText:"напред>",nextBigText:">>",currentText:"днес",monthNames:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Яну","Фев","Мар","Апр","Май","Юни","Юли","Авг","Сеп","Окт","Нов","Дек"],dayNames:["Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота"],dayNamesShort:["Нед","Пон","Вто","Сря","Чет","Пет","Съб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Съ"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("bg",{buttonText:{month:"Месец",week:"Седмица",day:"Ден",list:"График"},allDayText:"Цял ден",eventLimitText:function(e){return"+още "+e},noEventsMessage:"Няма събития за показване"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[В изминалата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[В изминалия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",ss:"%d секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дни",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var a=e%10,t=e%100;return 0===e?e+"-ев":0===t?e+"-ен":t>10&&t<20?e+"-ти":1===a?e+"-ви":2===a?e+"-ри":7===a||8===a?e+"-ми":e+"-ти"},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(84);var n=t(1);n.datepickerLocale("bs","bs",{closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Juni","Juli","August","Septembar","Oktobar","Novmbar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Sed",dateFormat:"dd.mm.yy.",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("bs",{buttonText:{prev:"Prošli",next:"Sljedeći",month:"Mjesec",week:"Sedmica",day:"Dan",list:"Raspored"},allDayText:"Cijeli dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nema događaja za prikazivanje"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t){var n=e+" ";switch(t){case"ss":return n+=1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi";case"m":return a?"jedna minuta":"jedne minute";case"mm":return n+=1===e?"minuta":2===e||3===e||4===e?"minute":"minuta";case"h":return a?"jedan sat":"jednog sata";case"hh":return n+=1===e?"sat":2===e||3===e||4===e?"sata":"sati";case"dd":return n+=1===e?"dan":"dana";case"MM":return n+=1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci";case"yy":return n+=1===e?"godina":2===e||3===e||4===e?"godine":"godina"}}return e.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:a,m:a,mm:a,h:a,hh:a,d:"dan",dd:a,M:"mjesec",MM:a,y:"godinu",yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(86);var n=t(1);n.datepickerLocale("ca","ca",{closeText:"Tanca",prevText:"Anterior",nextText:"Següent",currentText:"Avui",monthNames:["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],monthNamesShort:["gen","feb","març","abr","maig","juny","jul","ag","set","oct","nov","des"],dayNames:["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],dayNamesShort:["dg","dl","dt","dc","dj","dv","ds"],dayNamesMin:["dg","dl","dt","dc","dj","dv","ds"],weekHeader:"Set",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ca",{buttonText:{month:"Mes",week:"Setmana",day:"Dia",list:"Agenda"},allDayText:"Tot el dia",eventLimitText:"més",noEventsMessage:"No hi ha esdeveniments per mostrar"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("ca",{months:{standalone:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dt_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"uns segons",ss:"%d segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(e,a){var t=1===e?"r":2===e?"n":3===e?"r":4===e?"t":"è";return"w"!==a&&"W"!==a||(t="a"),e+t},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(88);var n=t(1);n.datepickerLocale("cs","cs",{closeText:"Zavřít",prevText:"<Dříve",nextText:"Později>",currentText:"Nyní",monthNames:["leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],monthNamesShort:["led","úno","bře","dub","kvě","čer","čvc","srp","zář","říj","lis","pro"],dayNames:["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],dayNamesShort:["ne","po","út","st","čt","pá","so"],dayNamesMin:["ne","po","út","st","čt","pá","so"],weekHeader:"Týd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("cs",{buttonText:{month:"Měsíc",week:"Týden",day:"Den",list:"Agenda"},allDayText:"Celý den",eventLimitText:function(e){return"+další: "+e},noEventsMessage:"Žádné akce k zobrazení"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e){return e>1&&e<5&&1!=~~(e/10)}function t(e,t,n,r){var s=e+" ";switch(n){case"s":return t||r?"pár sekund":"pár sekundami";case"ss":return t||r?s+(a(e)?"sekundy":"sekund"):s+"sekundami";case"m":return t?"minuta":r?"minutu":"minutou";case"mm":return t||r?s+(a(e)?"minuty":"minut"):s+"minutami";case"h":return t?"hodina":r?"hodinu":"hodinou";case"hh":return t||r?s+(a(e)?"hodiny":"hodin"):s+"hodinami";case"d":return t||r?"den":"dnem";case"dd":return t||r?s+(a(e)?"dny":"dní"):s+"dny";case"M":return t||r?"měsíc":"měsícem";case"MM":return t||r?s+(a(e)?"měsíce":"měsíců"):s+"měsíci";case"y":return t||r?"rok":"rokem";case"yy":return t||r?s+(a(e)?"roky":"let"):s+"lety"}}var n="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),r="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_");return e.defineLocale("cs",{months:n,monthsShort:r,monthsParse:function(e,a){var t,n=[];for(t=0;t<12;t++)n[t]=new RegExp("^"+e[t]+"$|^"+a[t]+"$","i");return n}(n,r),shortMonthsParse:function(e){var a,t=[];for(a=0;a<12;a++)t[a]=new RegExp("^"+e[a]+"$","i");return t}(r),longMonthsParse:function(e){var a,t=[];for(a=0;a<12;a++)t[a]=new RegExp("^"+e[a]+"$","i");return t}(n),weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(90);var n=t(1);n.datepickerLocale("da","da",{closeText:"Luk",prevText:"<Forrige",nextText:"Næste>",currentText:"Idag",monthNames:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],dayNamesShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],dayNamesMin:["Sø","Ma","Ti","On","To","Fr","Lø"],weekHeader:"Uge",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("da",{buttonText:{month:"Måned",week:"Uge",day:"Dag",list:"Agenda"},allDayText:"Hele dagen",eventLimitText:"flere",noEventsMessage:"Ingen arrangementer at vise"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"på dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",ss:"%d sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(92);var n=t(1);n.datepickerLocale("de-at","de",{closeText:"Schließen",prevText:"<Zurück",nextText:"Vor>",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("de-at",{buttonText:{month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},allDayText:"Ganztägig",eventLimitText:function(e){return"+ weitere "+e},noEventsMessage:"Keine Ereignisse anzuzeigen"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?r[t][0]:r[t][1]}return e.defineLocale("de-at",{
-months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:a,mm:"%d Minuten",h:a,hh:"%d Stunden",d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(94);var n=t(1);n.datepickerLocale("de-ch","de",{closeText:"Schließen",prevText:"<Zurück",nextText:"Vor>",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("de-ch",{buttonText:{month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},allDayText:"Ganztägig",eventLimitText:function(e){return"+ weitere "+e},noEventsMessage:"Keine Ereignisse anzuzeigen"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?r[t][0]:r[t][1]}return e.defineLocale("de-ch",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:a,mm:"%d Minuten",h:a,hh:"%d Stunden",d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(96);var n=t(1);n.datepickerLocale("de","de",{closeText:"Schließen",prevText:"<Zurück",nextText:"Vor>",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("de",{buttonText:{month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},allDayText:"Ganztägig",eventLimitText:function(e){return"+ weitere "+e},noEventsMessage:"Keine Ereignisse anzuzeigen"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?r[t][0]:r[t][1]}return e.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:a,mm:"%d Minuten",h:a,hh:"%d Stunden",d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(98);var n=t(1);n.datepickerLocale("el","el",{closeText:"Κλείσιμο",prevText:"Προηγούμενος",nextText:"Επόμενος",currentText:"Σήμερα",monthNames:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],monthNamesShort:["Ιαν","Φεβ","Μαρ","Απρ","Μαι","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],dayNames:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],dayNamesShort:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],dayNamesMin:["Κυ","Δε","Τρ","Τε","Πε","Πα","Σα"],weekHeader:"Εβδ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("el",{buttonText:{month:"Μήνας",week:"Εβδομάδα",day:"Ημέρα",list:"Ατζέντα"},allDayText:"Ολοήμερο",eventLimitText:"περισσότερα",noEventsMessage:"Δεν υπάρχουν γεγονότα για να εμφανιστεί"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e){return e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}return e.defineLocale("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(e,a){return e?"string"==typeof a&&/D/.test(a.substring(0,a.indexOf("MMMM")))?this._monthsGenitiveEl[e.month()]:this._monthsNominativeEl[e.month()]:this._monthsNominativeEl},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(e,a,t){return e>11?t?"μμ":"ΜΜ":t?"πμ":"ΠΜ"},isPM:function(e){return"μ"===(e+"").toLowerCase()[0]},meridiemParse:/[ΠΜ]\.?Μ?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[το προηγούμενο] dddd [{}] LT";default:return"[την προηγούμενη] dddd [{}] LT"}},sameElse:"L"},calendar:function(e,t){var n=this._calendarEl[e],r=t&&t.hours();return a(n)&&(n=n.apply(t)),n.replace("{}",r%12==1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"λίγα δευτερόλεπτα",ss:"%d δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},dayOfMonthOrdinalParse:/\d{1,2}η/,ordinal:"%dη",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(100);var n=t(1);n.datepickerLocale("en-au","en-AU",{closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("en-au")},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1===a?"st":2===a?"nd":3===a?"rd":"th")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(102),t(1).locale("en-ca")},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1===a?"st":2===a?"nd":3===a?"rd":"th")}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(104);var n=t(1);n.datepickerLocale("en-gb","en-GB",{closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("en-gb")},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1===a?"st":2===a?"nd":3===a?"rd":"th")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(106),t(1).locale("en-ie")},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1===a?"st":2===a?"nd":3===a?"rd":"th")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(108);var n=t(1);n.datepickerLocale("en-nz","en-NZ",{closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("en-nz")},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1===a?"st":2===a?"nd":3===a?"rd":"th")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(110);var n=t(1);n.datepickerLocale("es-do","es",{closeText:"Cerrar",prevText:"<Ant",nextText:"Sig>",currentText:"Hoy",monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],monthNamesShort:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],dayNamesShort:["dom","lun","mar","mié","jue","vie","sáb"],dayNamesMin:["D","L","M","X","J","V","S"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("es-do",{buttonText:{month:"Mes",week:"Semana",day:"Día",list:"Agenda"},allDayHtml:"Todo<br/>el día",eventLimitText:"más",noEventsMessage:"No hay eventos para mostrar"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),t="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),n=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],r=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;return e.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,n){return e?/-MMM-/.test(n)?t[e.month()]:a[e.month()]:a},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(112);var n=t(1);n.datepickerLocale("es-us","es",{closeText:"Cerrar",prevText:"<Ant",nextText:"Sig>",currentText:"Hoy",monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],monthNamesShort:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],dayNamesShort:["dom","lun","mar","mié","jue","vie","sáb"],dayNamesMin:["D","L","M","X","J","V","S"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("es-us",{buttonText:{month:"Mes",week:"Semana",day:"Día",list:"Agenda"},allDayHtml:"Todo<br/>el día",eventLimitText:"más",noEventsMessage:"No hay eventos para mostrar"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),t="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_");return e.defineLocale("es-us",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,n){return e?/-MMM-/.test(n)?t[e.month()]:a[e.month()]:a},monthsParseExact:!0,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"MMMM [de] D [de] YYYY",LLL:"MMMM [de] D [de] YYYY h:mm A",LLLL:"dddd, MMMM [de] D [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:0,doy:6}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(114);var n=t(1);n.datepickerLocale("es","es",{closeText:"Cerrar",prevText:"<Ant",nextText:"Sig>",currentText:"Hoy",monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],monthNamesShort:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],dayNamesShort:["dom","lun","mar","mié","jue","vie","sáb"],dayNamesMin:["D","L","M","X","J","V","S"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("es",{buttonText:{month:"Mes",week:"Semana",day:"Día",list:"Agenda"},allDayHtml:"Todo<br/>el día",eventLimitText:"más",noEventsMessage:"No hay eventos para mostrar"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),t="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),n=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],r=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;return e.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,n){return e?/-MMM-/.test(n)?t[e.month()]:a[e.month()]:a},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(116);var n=t(1);n.datepickerLocale("et","et",{closeText:"Sulge",prevText:"Eelnev",nextText:"Järgnev",currentText:"Täna",monthNames:["Jaanuar","Veebruar","Märts","Aprill","Mai","Juuni","Juuli","August","September","Oktoober","November","Detsember"],monthNamesShort:["Jaan","Veebr","Märts","Apr","Mai","Juuni","Juuli","Aug","Sept","Okt","Nov","Dets"],dayNames:["Pühapäev","Esmaspäev","Teisipäev","Kolmapäev","Neljapäev","Reede","Laupäev"],dayNamesShort:["Pühap","Esmasp","Teisip","Kolmap","Neljap","Reede","Laup"],dayNamesMin:["P","E","T","K","N","R","L"],weekHeader:"näd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("et",{buttonText:{month:"Kuu",week:"Nädal",day:"Päev",list:"Päevakord"},allDayText:"Kogu päev",eventLimitText:function(e){return"+ veel "+e},noEventsMessage:"Kuvamiseks puuduvad sündmused"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r={s:["mõne sekundi","mõni sekund","paar sekundit"],ss:[e+"sekundi",e+"sekundit"],m:["ühe minuti","üks minut"],mm:[e+" minuti",e+" minutit"],h:["ühe tunni","tund aega","üks tund"],hh:[e+" tunni",e+" tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:[e+" kuu",e+" kuud"],y:["ühe aasta","aasta","üks aasta"],yy:[e+" aasta",e+" aastat"]};return a?r[t][2]?r[t][2]:r[t][1]:n?r[t][0]:r[t][1]}return e.defineLocale("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:"%d päeva",M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(118);var n=t(1);n.datepickerLocale("eu","eu",{closeText:"Egina",prevText:"<Aur",nextText:"Hur>",currentText:"Gaur",monthNames:["urtarrila","otsaila","martxoa","apirila","maiatza","ekaina","uztaila","abuztua","iraila","urria","azaroa","abendua"],monthNamesShort:["urt.","ots.","mar.","api.","mai.","eka.","uzt.","abu.","ira.","urr.","aza.","abe."],dayNames:["igandea","astelehena","asteartea","asteazkena","osteguna","ostirala","larunbata"],dayNamesShort:["ig.","al.","ar.","az.","og.","ol.","lr."],dayNamesMin:["ig","al","ar","az","og","ol","lr"],weekHeader:"As",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("eu",{buttonText:{month:"Hilabetea",week:"Astea",day:"Eguna",list:"Agenda"},allDayHtml:"Egun<br/>osoa",eventLimitText:"gehiago",noEventsMessage:"Ez dago ekitaldirik erakusteko"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",ss:"%d segundo",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(120);var n=t(1);n.datepickerLocale("fa","fa",{closeText:"بستن",prevText:"<قبلی",nextText:"بعدی>",currentText:"امروز",monthNames:["ژانویه","فوریه","مارس","آوریل","مه","ژوئن","ژوئیه","اوت","سپتامبر","اکتبر","نوامبر","دسامبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["يکشنبه","دوشنبه","سهشنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],dayNamesShort:["ی","د","س","چ","پ","ج","ش"],dayNamesMin:["ی","د","س","چ","پ","ج","ش"],weekHeader:"هف",dateFormat:"yy/mm/dd",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),n.locale("fa",{buttonText:{month:"ماه",week:"هفته",day:"روز",list:"برنامه"},allDayText:"تمام روز",eventLimitText:function(e){return"بیش از "+e},noEventsMessage:"هیچ رویدادی به نمایش"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},t={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"};return e.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یکشنبه_دوشنبه_سهشنبه_چهارشنبه_پنجشنبه_جمعه_شنبه".split("_"),weekdaysShort:"یکشنبه_دوشنبه_سهشنبه_چهارشنبه_پنجشنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(e){return/بعد از ظهر/.test(e)},meridiem:function(e,a,t){return e<12?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چند ثانیه",ss:"ثانیه d%",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(e){return e.replace(/[۰-۹]/g,function(e){return t[e]}).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return a[e]}).replace(/,/g,"،")},dayOfMonthOrdinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,doy:12}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(122);var n=t(1);n.datepickerLocale("fi","fi",{closeText:"Sulje",prevText:"«Edellinen",nextText:"Seuraava»",currentText:"Tänään",monthNames:["Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu","Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu"],monthNamesShort:["Tammi","Helmi","Maalis","Huhti","Touko","Kesä","Heinä","Elo","Syys","Loka","Marras","Joulu"],dayNamesShort:["Su","Ma","Ti","Ke","To","Pe","La"],dayNames:["Sunnuntai","Maanantai","Tiistai","Keskiviikko","Torstai","Perjantai","Lauantai"],dayNamesMin:["Su","Ma","Ti","Ke","To","Pe","La"],weekHeader:"Vk",dateFormat:"d.m.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("fi",{buttonText:{month:"Kuukausi",week:"Viikko",day:"Päivä",list:"Tapahtumat"},allDayText:"Koko päivä",eventLimitText:"lisää",noEventsMessage:"Ei näytettäviä tapahtumia"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,n,r){var s="";switch(n){
-case"s":return r?"muutaman sekunnin":"muutama sekunti";case"ss":return r?"sekunnin":"sekuntia";case"m":return r?"minuutin":"minuutti";case"mm":s=r?"minuutin":"minuuttia";break;case"h":return r?"tunnin":"tunti";case"hh":s=r?"tunnin":"tuntia";break;case"d":return r?"päivän":"päivä";case"dd":s=r?"päivän":"päivää";break;case"M":return r?"kuukauden":"kuukausi";case"MM":s=r?"kuukauden":"kuukautta";break;case"y":return r?"vuoden":"vuosi";case"yy":s=r?"vuoden":"vuotta"}return s=t(e,r)+" "+s}function t(e,a){return e<10?a?r[e]:n[e]:e}var n="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),r=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",n[7],n[8],n[9]];return e.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(124);var n=t(1);n.datepickerLocale("fr-ca","fr-CA",{closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("fr-ca",{buttonText:{year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},allDayHtml:"Toute la<br/>journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,a){switch(a){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(126);var n=t(1);n.datepickerLocale("fr-ch","fr-CH",{closeText:"Fermer",prevText:"<Préc",nextText:"Suiv>",currentText:"Courant",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sm",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("fr-ch",{buttonText:{year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},allDayHtml:"Toute la<br/>journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("fr-ch",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,a){switch(a){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(128);var n=t(1);n.datepickerLocale("fr","fr",{closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("fr",{buttonText:{year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},allDayHtml:"Toute la<br/>journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(e,a){switch(a){case"D":return e+(1===e?"er":"");default:case"M":case"Q":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(130);var n=t(1);n.datepickerLocale("gl","gl",{closeText:"Pechar",prevText:"<Ant",nextText:"Seg>",currentText:"Hoxe",monthNames:["Xaneiro","Febreiro","Marzo","Abril","Maio","Xuño","Xullo","Agosto","Setembro","Outubro","Novembro","Decembro"],monthNamesShort:["Xan","Feb","Mar","Abr","Mai","Xuñ","Xul","Ago","Set","Out","Nov","Dec"],dayNames:["Domingo","Luns","Martes","Mércores","Xoves","Venres","Sábado"],dayNamesShort:["Dom","Lun","Mar","Mér","Xov","Ven","Sáb"],dayNamesMin:["Do","Lu","Ma","Mé","Xo","Ve","Sá"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("gl",{buttonText:{month:"Mes",week:"Semana",day:"Día",list:"Axenda"},allDayHtml:"Todo<br/>o día",eventLimitText:"máis",noEventsMessage:"Non hai eventos para amosar"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_mércores_xoves_venres_sábado".split("_"),weekdaysShort:"dom._lun._mar._mér._xov._ven._sáb.".split("_"),weekdaysMin:"do_lu_ma_mé_xo_ve_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(1!==this.hours()?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(e){return 0===e.indexOf("un")?"n"+e:"en "+e},past:"hai %s",s:"uns segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(132);var n=t(1);n.datepickerLocale("he","he",{closeText:"סגור",prevText:"<הקודם",nextText:"הבא>",currentText:"היום",monthNames:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],monthNamesShort:["ינו","פבר","מרץ","אפר","מאי","יוני","יולי","אוג","ספט","אוק","נוב","דצמ"],dayNames:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת"],dayNamesShort:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],dayNamesMin:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),n.locale("he",{buttonText:{month:"חודש",week:"שבוע",day:"יום",list:"סדר יום"},allDayText:"כל היום",eventLimitText:"אחר",noEventsMessage:"אין אירועים להצגה",weekNumberTitle:"שבוע"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",ss:"%d שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(e){return 2===e?"שעתיים":e+" שעות"},d:"יום",dd:function(e){return 2===e?"יומיים":e+" ימים"},M:"חודש",MM:function(e){return 2===e?"חודשיים":e+" חודשים"},y:"שנה",yy:function(e){return 2===e?"שנתיים":e%10==0&&10!==e?e+" שנה":e+" שנים"}},meridiemParse:/אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(e){return/^(אחה"צ|אחרי הצהריים|בערב)$/.test(e)},meridiem:function(e,a,t){return e<5?"לפנות בוקר":e<10?"בבוקר":e<12?t?'לפנה"צ':"לפני הצהריים":e<18?t?'אחה"צ':"אחרי הצהריים":"בערב"}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(134);var n=t(1);n.datepickerLocale("hi","hi",{closeText:"बंद",prevText:"पिछला",nextText:"अगला",currentText:"आज",monthNames:["जनवरी ","फरवरी","मार्च","अप्रेल","मई","जून","जूलाई","अगस्त ","सितम्बर","अक्टूबर","नवम्बर","दिसम्बर"],monthNamesShort:["जन","फर","मार्च","अप्रेल","मई","जून","जूलाई","अग","सित","अक्ट","नव","दि"],dayNames:["रविवार","सोमवार","मंगलवार","बुधवार","गुरुवार","शुक्रवार","शनिवार"],dayNamesShort:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],dayNamesMin:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],weekHeader:"हफ्ता",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("hi",{buttonText:{month:"महीना",week:"सप्ताह",day:"दिन",list:"कार्यसूची"},allDayText:"सभी दिन",eventLimitText:function(e){return"+अधिक "+e},noEventsMessage:"कोई घटनाओं को प्रदर्शित करने के लिए"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},t={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};return e.defineLocale("hi",{months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",ss:"%d सेकंड",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,function(e){return t[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return a[e]})},meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(e,a){return 12===e&&(e=0),"रात"===a?e<4?e:e+12:"सुबह"===a?e:"दोपहर"===a?e>=10?e:e+12:"शाम"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"रात":e<10?"सुबह":e<17?"दोपहर":e<20?"शाम":"रात"},week:{dow:0,doy:6}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(136);var n=t(1);n.datepickerLocale("hr","hr",{closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],monthNamesShort:["Sij","Velj","Ožu","Tra","Svi","Lip","Srp","Kol","Ruj","Lis","Stu","Pro"],dayNames:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Tje",dateFormat:"dd.mm.yy.",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("hr",{buttonText:{prev:"Prijašnji",next:"Sljedeći",month:"Mjesec",week:"Tjedan",day:"Dan",list:"Raspored"},allDayText:"Cijeli dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nema događaja za prikaz"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t){var n=e+" ";switch(t){case"ss":return n+=1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi";case"m":return a?"jedna minuta":"jedne minute";case"mm":return n+=1===e?"minuta":2===e||3===e||4===e?"minute":"minuta";case"h":return a?"jedan sat":"jednog sata";case"hh":return n+=1===e?"sat":2===e||3===e||4===e?"sata":"sati";case"dd":return n+=1===e?"dan":"dana";case"MM":return n+=1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci";case"yy":return n+=1===e?"godina":2===e||3===e||4===e?"godine":"godina"}}return e.defineLocale("hr",{months:{format:"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:a,m:a,mm:a,h:a,hh:a,d:"dan",dd:a,M:"mjesec",MM:a,y:"godinu",yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(138);var n=t(1);n.datepickerLocale("hu","hu",{closeText:"bezár",prevText:"vissza",nextText:"előre",currentText:"ma",monthNames:["Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December"],monthNamesShort:["Jan","Feb","Már","Ápr","Máj","Jún","Júl","Aug","Szep","Okt","Nov","Dec"],dayNames:["Vasárnap","Hétfő","Kedd","Szerda","Csütörtök","Péntek","Szombat"],dayNamesShort:["Vas","Hét","Ked","Sze","Csü","Pén","Szo"],dayNamesMin:["V","H","K","Sze","Cs","P","Szo"],weekHeader:"Hét",dateFormat:"yy.mm.dd.",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""}),n.locale("hu",{buttonText:{month:"Hónap",week:"Hét",day:"Nap",list:"Napló"},allDayText:"Egész nap",eventLimitText:"további",noEventsMessage:"Nincs megjeleníthető események"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r=e;switch(t){case"s":return n||a?"néhány másodperc":"néhány másodperce";case"ss":return r+(n||a)?" másodperc":" másodperce";case"m":return"egy"+(n||a?" perc":" perce");case"mm":return r+(n||a?" perc":" perce");case"h":return"egy"+(n||a?" óra":" órája");case"hh":return r+(n||a?" óra":" órája");case"d":return"egy"+(n||a?" nap":" napja");case"dd":return r+(n||a?" nap":" napja");case"M":return"egy"+(n||a?" hónap":" hónapja");case"MM":return r+(n||a?" hónap":" hónapja");case"y":return"egy"+(n||a?" év":" éve");case"yy":return r+(n||a?" év":" éve")}return""}function t(e){return(e?"":"[múlt] ")+"["+n[this.day()]+"] LT[-kor]"}var n="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" ");return e.defineLocale("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(e){return"u"===e.charAt(1).toLowerCase()},meridiem:function(e,a,t){return e<12?!0===t?"de":"DE":!0===t?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return t.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return t.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(140);var n=t(1);n.datepickerLocale("id","id",{closeText:"Tutup",prevText:"<mundur",nextText:"maju>",currentText:"hari ini",monthNames:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","Nopember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Agus","Sep","Okt","Nop","Des"],dayNames:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],dayNamesShort:["Min","Sen","Sel","Rab","kam","Jum","Sab"],dayNamesMin:["Mg","Sn","Sl","Rb","Km","jm","Sb"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("id",{buttonText:{month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},allDayHtml:"Sehari<br/>penuh",eventLimitText:"lebih",noEventsMessage:"Tidak ada acara untuk ditampilkan"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"siang"===a?e>=11?e:e+12:"sore"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"pagi":e<15?"siang":e<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",ss:"%d detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(142);var n=t(1);n.datepickerLocale("is","is",{closeText:"Loka",prevText:"< Fyrri",nextText:"Næsti >",currentText:"Í dag",monthNames:["Janúar","Febrúar","Mars","Apríl","Maí","Júní","Júlí","Ágúst","September","Október","Nóvember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Maí","Jún","Júl","Ágú","Sep","Okt","Nóv","Des"],dayNames:["Sunnudagur","Mánudagur","Þriðjudagur","Miðvikudagur","Fimmtudagur","Föstudagur","Laugardagur"],dayNamesShort:["Sun","Mán","Þri","Mið","Fim","Fös","Lau"],dayNamesMin:["Su","Má","Þr","Mi","Fi","Fö","La"],weekHeader:"Vika",dateFormat:"dd.mm.yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("is",{buttonText:{month:"Mánuður",week:"Vika",day:"Dagur",list:"Dagskrá"},allDayHtml:"Allan<br/>daginn",eventLimitText:"meira",noEventsMessage:"Engir viðburðir til að sýna"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e){return e%100==11||e%10!=1}function t(e,t,n,r){var s=e+" ";switch(n){case"s":return t||r?"nokkrar sekúndur":"nokkrum sekúndum";case"ss":return a(e)?s+(t||r?"sekúndur":"sekúndum"):s+"sekúnda";case"m":return t?"mínúta":"mínútu";case"mm":return a(e)?s+(t||r?"mínútur":"mínútum"):t?s+"mínúta":s+"mínútu";case"hh":return a(e)?s+(t||r?"klukkustundir":"klukkustundum"):s+"klukkustund";case"d":return t?"dagur":r?"dag":"degi";case"dd":return a(e)?t?s+"dagar":s+(r?"daga":"dögum"):t?s+"dagur":s+(r?"dag":"degi");case"M":return t?"mánuður":r?"mánuð":"mánuði";case"MM":return a(e)?t?s+"mánuðir":s+(r?"mánuði":"mánuðum"):t?s+"mánuður":s+(r?"mánuð":"mánuði");case"y":return t||r?"ár":"ári";case"yy":return a(e)?s+(t||r?"ár":"árum"):s+(t||r?"ár":"ári")}}return e.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:t,ss:t,m:t,mm:t,h:"klukkustund",hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(144);var n=t(1);n.datepickerLocale("it","it",{closeText:"Chiudi",prevText:"<Prec",nextText:"Succ>",currentText:"Oggi",monthNames:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthNamesShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],dayNames:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],dayNamesShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],dayNamesMin:["Do","Lu","Ma","Me","Gi","Ve","Sa"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("it",{buttonText:{month:"Mese",week:"Settimana",day:"Giorno",list:"Agenda"},allDayHtml:"Tutto il<br/>giorno",eventLimitText:function(e){return"+altri "+e},noEventsMessage:"Non ci sono eventi da visualizzare"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?"tra":"in")+" "+e},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(146);var n=t(1);n.datepickerLocale("ja","ja",{closeText:"閉じる",prevText:"<前",nextText:"次>",currentText:"今日",monthNames:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthNamesShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayNames:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],dayNamesShort:["日","月","火","水","木","金","土"],dayNamesMin:["日","月","火","水","木","金","土"],weekHeader:"週",dateFormat:"yy/mm/dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"}),n.locale("ja",{buttonText:{month:"月",week:"週",day:"日",list:"予定リスト"},allDayText:"終日",eventLimitText:function(e){return"他 "+e+" 件"},noEventsMessage:"イベントが表示されないように"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("ja",{months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 HH:mm dddd",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日 HH:mm dddd"},meridiemParse:/午前|午後/i,isPM:function(e){return"午後"===e},meridiem:function(e,a,t){return e<12?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:"[来週]dddd LT",lastDay:"[昨日] LT",lastWeek:"[前週]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}日/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"日";default:return e}},relativeTime:{future:"%s後",past:"%s前",s:"数秒",ss:"%d秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(148);var n=t(1);n.datepickerLocale("ka","ka",{closeText:"დახურვა",prevText:"წინა",nextText:"შემდეგი",currentText:"დღეს",monthNames:["იანვარი","თებერვალი","მარტი","აპრილი","მაისი","ივნისი","ივლისი","აგვისტო","სექტემბერი","ოქტომბერი","ნოემბერი","დეკემბერი"],monthNamesShort:["იან","თებ","მარ","აპრ","მაი","ივნ","ივლ","აგვ","სექ","ოქტ","ნოე","დეკ"],dayNames:["კვირა","ორშაბათი","სამშაბათი","ოთხშაბათი","ხუთშაბათი","პარასკევი","შაბათი"],dayNamesShort:["კვი","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ"],dayNamesMin:["კვ","ორ","სა","ოთ","ხუ","პა","შა"],weekHeader:"კვ",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ka",{buttonText:{month:"თვე",week:"კვირა",day:"დღე",list:"დღის წესრიგი"},allDayText:"მთელი დღე",eventLimitText:function(e){return"+ კიდევ "+e},noEventsMessage:"ღონისძიებები არ არის"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("ka",{months:{standalone:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),format:"იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს".split("_")},monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:{standalone:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),format:"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს".split("_"),isFormat:/(წინა|შემდეგ)/},weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[დღეს] LT[-ზე]",nextDay:"[ხვალ] LT[-ზე]",lastDay:"[გუშინ] LT[-ზე]",nextWeek:"[შემდეგ] dddd LT[-ზე]",lastWeek:"[წინა] dddd LT-ზე",sameElse:"L"},relativeTime:{future:function(e){return/(წამი|წუთი|საათი|წელი)/.test(e)?e.replace(/ი$/,"ში"):e+"ში"},past:function(e){return/(წამი|წუთი|საათი|დღე|თვე)/.test(e)?e.replace(/(ი|ე)$/,"ის უკან"):/წელი/.test(e)?e.replace(/წელი$/,"წლის უკან"):void 0},s:"რამდენიმე წამი",ss:"%d წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათი",d:"დღე",dd:"%d დღე",M:"თვე",MM:"%d თვე",y:"წელი",yy:"%d წელი"},dayOfMonthOrdinalParse:/0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,ordinal:function(e){return 0===e?e:1===e?e+"-ლი":e<20||e<=100&&e%20==0||e%100==0?"მე-"+e:e+"-ე"},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(150);var n=t(1);n.datepickerLocale("kk","kk",{closeText:"Жабу",prevText:"<Алдыңғы",nextText:"Келесі>",currentText:"Бүгін",monthNames:["Қаңтар","Ақпан","Наурыз","Сәуір","Мамыр","Маусым","Шілде","Тамыз","Қыркүйек","Қазан","Қараша","Желтоқсан"],
-monthNamesShort:["Қаң","Ақп","Нау","Сәу","Мам","Мау","Шіл","Там","Қыр","Қаз","Қар","Жел"],dayNames:["Жексенбі","Дүйсенбі","Сейсенбі","Сәрсенбі","Бейсенбі","Жұма","Сенбі"],dayNamesShort:["жкс","дсн","ссн","срс","бсн","жма","снб"],dayNamesMin:["Жк","Дс","Сс","Ср","Бс","Жм","Сн"],weekHeader:"Не",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("kk",{buttonText:{month:"Ай",week:"Апта",day:"Күн",list:"Күн тәртібі"},allDayText:"Күні бойы",eventLimitText:function(e){return"+ тағы "+e},noEventsMessage:"Көрсету үшін оқиғалар жоқ"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={0:"-ші",1:"-ші",2:"-ші",3:"-ші",4:"-ші",5:"-ші",6:"-шы",7:"-ші",8:"-ші",9:"-шы",10:"-шы",20:"-шы",30:"-шы",40:"-шы",50:"-ші",60:"-шы",70:"-ші",80:"-ші",90:"-шы",100:"-ші"};return e.defineLocale("kk",{months:"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан".split("_"),monthsShort:"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел".split("_"),weekdays:"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі".split("_"),weekdaysShort:"жек_дүй_сей_сәр_бей_жұм_сен".split("_"),weekdaysMin:"жк_дй_сй_ср_бй_жм_сн".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгін сағат] LT",nextDay:"[Ертең сағат] LT",nextWeek:"dddd [сағат] LT",lastDay:"[Кеше сағат] LT",lastWeek:"[Өткен аптаның] dddd [сағат] LT",sameElse:"L"},relativeTime:{future:"%s ішінде",past:"%s бұрын",s:"бірнеше секунд",ss:"%d секунд",m:"бір минут",mm:"%d минут",h:"бір сағат",hh:"%d сағат",d:"бір күн",dd:"%d күн",M:"бір ай",MM:"%d ай",y:"бір жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(ші|шы)/,ordinal:function(e){var t=e%10,n=e>=100?100:null;return e+(a[e]||a[t]||a[n])},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(152);var n=t(1);n.datepickerLocale("ko","ko",{closeText:"닫기",prevText:"이전달",nextText:"다음달",currentText:"오늘",monthNames:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthNamesShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],dayNames:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],dayNamesShort:["일","월","화","수","목","금","토"],dayNamesMin:["일","월","화","수","목","금","토"],weekHeader:"주",dateFormat:"yy. m. d.",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"년"}),n.locale("ko",{buttonText:{month:"월",week:"주",day:"일",list:"일정목록"},allDayText:"종일",eventLimitText:"개",noEventsMessage:"일정이 없습니다"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h:mm",LLLL:"YYYY년 MMMM D일 dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY년 MMMM D일",lll:"YYYY년 MMMM D일 A h:mm",llll:"YYYY년 MMMM D일 dddd A h:mm"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",ss:"%d초",m:"1분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"},dayOfMonthOrdinalParse:/\d{1,2}(일|월|주)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"일";case"M":return e+"월";case"w":case"W":return e+"주";default:return e}},meridiemParse:/오전|오후/,isPM:function(e){return"오후"===e},meridiem:function(e,a,t){return e<12?"오전":"오후"}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(154);var n=t(1);n.datepickerLocale("lb","lb",{closeText:"Fäerdeg",prevText:"Zréck",nextText:"Weider",currentText:"Haut",monthNames:["Januar","Februar","Mäerz","Abrëll","Mee","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mäe","Abr","Mee","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonndeg","Méindeg","Dënschdeg","Mëttwoch","Donneschdeg","Freideg","Samschdeg"],dayNamesShort:["Son","Méi","Dën","Mët","Don","Fre","Sam"],dayNamesMin:["So","Mé","Dë","Më","Do","Fr","Sa"],weekHeader:"W",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("lb",{buttonText:{month:"Mount",week:"Woch",day:"Dag",list:"Terminiwwersiicht"},allDayText:"Ganzen Dag",eventLimitText:"méi",noEventsMessage:"Nee Evenementer ze affichéieren"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return a?r[t][0]:r[t][1]}function t(e){return r(e.substr(0,e.indexOf(" ")))?"a "+e:"an "+e}function n(e){return r(e.substr(0,e.indexOf(" ")))?"viru "+e:"virun "+e}function r(e){if(e=parseInt(e,10),isNaN(e))return!1;if(e<0)return!0;if(e<10)return 4<=e&&e<=7;if(e<100){var a=e%10,t=e/10;return r(0===a?t:a)}if(e<1e4){for(;e>=10;)e/=10;return r(e)}return e/=1e3,r(e)}return e.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:t,past:n,s:"e puer Sekonnen",ss:"%d Sekonnen",m:a,mm:"%d Minutten",h:a,hh:"%d Stonnen",d:a,dd:"%d Deeg",M:a,MM:"%d Méint",y:a,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(156);var n=t(1);n.datepickerLocale("lt","lt",{closeText:"Uždaryti",prevText:"<Atgal",nextText:"Pirmyn>",currentText:"Šiandien",monthNames:["Sausis","Vasaris","Kovas","Balandis","Gegužė","Birželis","Liepa","Rugpjūtis","Rugsėjis","Spalis","Lapkritis","Gruodis"],monthNamesShort:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rugp","Rugs","Spa","Lap","Gru"],dayNames:["sekmadienis","pirmadienis","antradienis","trečiadienis","ketvirtadienis","penktadienis","šeštadienis"],dayNamesShort:["sek","pir","ant","tre","ket","pen","šeš"],dayNamesMin:["Se","Pr","An","Tr","Ke","Pe","Še"],weekHeader:"SAV",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""}),n.locale("lt",{buttonText:{month:"Mėnuo",week:"Savaitė",day:"Diena",list:"Darbotvarkė"},allDayText:"Visą dieną",eventLimitText:"daugiau",noEventsMessage:"Nėra įvykių rodyti"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){return a?"kelios sekundės":n?"kelių sekundžių":"kelias sekundes"}function t(e,a,t,n){return a?r(t)[0]:n?r(t)[1]:r(t)[2]}function n(e){return e%10==0||e>10&&e<20}function r(e){return d[e].split("_")}function s(e,a,s,d){var i=e+" ";return 1===e?i+t(e,a,s[0],d):a?i+(n(e)?r(s)[1]:r(s)[0]):d?i+r(s)[1]:i+(n(e)?r(s)[1]:r(s)[2])}var d={ss:"sekundė_sekundžių_sekundes",m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"};return e.defineLocale("lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:a,ss:s,m:t,mm:s,h:t,hh:s,d:t,dd:s,M:t,MM:s,y:t,yy:s},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(e){return e+"-oji"},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(158);var n=t(1);n.datepickerLocale("lv","lv",{closeText:"Aizvērt",prevText:"Iepr.",nextText:"Nāk.",currentText:"Šodien",monthNames:["Janvāris","Februāris","Marts","Aprīlis","Maijs","Jūnijs","Jūlijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],monthNamesShort:["Jan","Feb","Mar","Apr","Mai","Jūn","Jūl","Aug","Sep","Okt","Nov","Dec"],dayNames:["svētdiena","pirmdiena","otrdiena","trešdiena","ceturtdiena","piektdiena","sestdiena"],dayNamesShort:["svt","prm","otr","tre","ctr","pkt","sst"],dayNamesMin:["Sv","Pr","Ot","Tr","Ct","Pk","Ss"],weekHeader:"Ned.",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("lv",{buttonText:{month:"Mēnesis",week:"Nedēļa",day:"Diena",list:"Dienas kārtība"},allDayText:"Visu dienu",eventLimitText:function(e){return"+vēl "+e},noEventsMessage:"Nav notikumu"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t){return t?a%10==1&&a%100!=11?e[2]:e[3]:a%10==1&&a%100!=11?e[0]:e[1]}function t(e,t,n){return e+" "+a(s[n],e,t)}function n(e,t,n){return a(s[n],e,t)}function r(e,a){return a?"dažas sekundes":"dažām sekundēm"}var s={ss:"sekundes_sekundēm_sekunde_sekundes".split("_"),m:"minūtes_minūtēm_minūte_minūtes".split("_"),mm:"minūtes_minūtēm_minūte_minūtes".split("_"),h:"stundas_stundām_stunda_stundas".split("_"),hh:"stundas_stundām_stunda_stundas".split("_"),d:"dienas_dienām_diena_dienas".split("_"),dd:"dienas_dienām_diena_dienas".split("_"),M:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),MM:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};return e.defineLocale("lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"pēc %s",past:"pirms %s",s:r,ss:t,m:n,mm:t,h:n,hh:t,d:n,dd:t,M:n,MM:t,y:n,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(160);var n=t(1);n.datepickerLocale("mk","mk",{closeText:"Затвори",prevText:"<",nextText:">",currentText:"Денес",monthNames:["Јануари","Февруари","Март","Април","Мај","Јуни","Јули","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Јан","Фев","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Ное","Дек"],dayNames:["Недела","Понеделник","Вторник","Среда","Четврток","Петок","Сабота"],dayNamesShort:["Нед","Пон","Вто","Сре","Чет","Пет","Саб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Са"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("mk",{buttonText:{month:"Месец",week:"Недела",day:"Ден",list:"График"},allDayText:"Цел ден",eventLimitText:function(e){return"+повеќе "+e},noEventsMessage:"Нема настани за прикажување"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"[Во] dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"после %s",past:"пред %s",s:"неколку секунди",ss:"%d секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеци",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var a=e%10,t=e%100;return 0===e?e+"-ев":0===t?e+"-ен":t>10&&t<20?e+"-ти":1===a?e+"-ви":2===a?e+"-ри":7===a||8===a?e+"-ми":e+"-ти"},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(162);var n=t(1);n.datepickerLocale("ms-my","ms",{closeText:"Tutup",prevText:"<Sebelum",nextText:"Selepas>",currentText:"hari ini",monthNames:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],monthNamesShort:["Jan","Feb","Mac","Apr","Mei","Jun","Jul","Ogo","Sep","Okt","Nov","Dis"],dayNames:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"],dayNamesShort:["Aha","Isn","Sel","Rab","kha","Jum","Sab"],dayNamesMin:["Ah","Is","Se","Ra","Kh","Ju","Sa"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ms-my",{buttonText:{month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},allDayText:"Sepanjang hari",eventLimitText:function(e){return"masih ada "+e+" acara"},noEventsMessage:"Tiada peristiwa untuk dipaparkan"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"tengahari"===a?e>=11?e:e+12:"petang"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(164);var n=t(1);n.datepickerLocale("ms","ms",{closeText:"Tutup",prevText:"<Sebelum",nextText:"Selepas>",currentText:"hari ini",monthNames:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],monthNamesShort:["Jan","Feb","Mac","Apr","Mei","Jun","Jul","Ogo","Sep","Okt","Nov","Dis"],dayNames:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"],dayNamesShort:["Aha","Isn","Sel","Rab","kha","Jum","Sab"],dayNamesMin:["Ah","Is","Se","Ra","Kh","Ju","Sa"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ms",{buttonText:{month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},allDayText:"Sepanjang hari",eventLimitText:function(e){return"masih ada "+e+" acara"},noEventsMessage:"Tiada peristiwa untuk dipaparkan"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"tengahari"===a?e>=11?e:e+12:"petang"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(166);var n=t(1);n.datepickerLocale("nb","nb",{closeText:"Lukk",prevText:"«Forrige",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("nb",{buttonText:{month:"Måned",week:"Uke",day:"Dag",list:"Agenda"},allDayText:"Hele dagen",eventLimitText:"til",noEventsMessage:"Ingen hendelser å vise"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",ss:"%d sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(168);var n=t(1);n.datepickerLocale("nl-be","nl-BE",{closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("nl-be",{buttonText:{month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayText:"Hele dag",eventLimitText:"extra",noEventsMessage:"Geen evenementen om te laten zien"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),t="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),n=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],r=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;return e.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,n){return e?/-MMM-/.test(n)?t[e.month()]:a[e.month()]:a},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(170);var n=t(1);n.datepickerLocale("nl","nl",{closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("nl",{buttonText:{year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayText:"Hele dag",eventLimitText:"extra",noEventsMessage:"Geen evenementen om te laten zien"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),t="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),n=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],r=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;return e.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,n){return e?/-MMM-/.test(n)?t[e.month()]:a[e.month()]:a},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(172);var n=t(1);n.datepickerLocale("nn","nn",{closeText:"Lukk",prevText:"«Førre",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["sun","mån","tys","ons","tor","fre","lau"],dayNames:["sundag","måndag","tysdag","onsdag","torsdag","fredag","laurdag"],dayNamesMin:["su","må","ty","on","to","fr","la"],weekHeader:"Veke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("nn",{buttonText:{month:"Månad",week:"Veke",day:"Dag",list:"Agenda"},allDayText:"Heile dagen",eventLimitText:"til",noEventsMessage:"Ingen hendelser å vise"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mån_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_må_ty_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregåande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",ss:"%d sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein månad",MM:"%d månader",y:"eit år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(174);var n=t(1);n.datepickerLocale("pl","pl",{closeText:"Zamknij",prevText:"<Poprzedni",nextText:"Następny>",currentText:"Dziś",monthNames:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],monthNamesShort:["Sty","Lu","Mar","Kw","Maj","Cze","Lip","Sie","Wrz","Pa","Lis","Gru"],dayNames:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota"],dayNamesShort:["Nie","Pn","Wt","Śr","Czw","Pt","So"],dayNamesMin:["N","Pn","Wt","Śr","Cz","Pt","So"],weekHeader:"Tydz",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("pl",{buttonText:{month:"Miesiąc",week:"Tydzień",day:"Dzień",list:"Plan dnia"},allDayText:"Cały dzień",eventLimitText:"więcej",noEventsMessage:"Brak wydarzeń do wyświetlenia"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e){return e%10<5&&e%10>1&&~~(e/10)%10!=1}function t(e,t,n){var r=e+" ";switch(n){case"ss":return r+(a(e)?"sekundy":"sekund");case"m":return t?"minuta":"minutę";case"mm":return r+(a(e)?"minuty":"minut");case"h":return t?"godzina":"godzinę";case"hh":return r+(a(e)?"godziny":"godzin");case"MM":return r+(a(e)?"miesiące":"miesięcy");case"yy":return r+(a(e)?"lata":"lat")}}var n="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),r="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_");return e.defineLocale("pl",{months:function(e,a){return e?""===a?"("+r[e.month()]+"|"+n[e.month()]+")":/D MMMM/.test(a)?r[e.month()]:n[e.month()]:n},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:function(){switch(this.day()){case 0:return"[W niedzielę o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W środę o] LT";case 6:return"[W sobotę o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",ss:t,m:t,mm:t,h:t,hh:t,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:t,y:"rok",yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(176);var n=t(1);n.datepickerLocale("pt-br","pt-BR",{closeText:"Fechar",prevText:"<Anterior",nextText:"Próximo>",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("pt-br",{buttonText:{month:"Mês",week:"Semana",day:"Dia",list:"Compromissos"},allDayText:"dia inteiro",eventLimitText:function(e){return"mais +"+e},noEventsMessage:"Não há eventos para mostrar"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("pt-br",{months:"janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",
-LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº"})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(178);var n=t(1);n.datepickerLocale("pt","pt",{closeText:"Fechar",prevText:"Anterior",nextText:"Seguinte",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sem",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("pt",{buttonText:{month:"Mês",week:"Semana",day:"Dia",list:"Agenda"},allDayText:"Todo o dia",eventLimitText:"mais",noEventsMessage:"Não há eventos para mostrar"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("pt",{months:"janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(180);var n=t(1);n.datepickerLocale("ro","ro",{closeText:"Închide",prevText:"« Luna precedentă",nextText:"Luna următoare »",currentText:"Azi",monthNames:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie"],monthNamesShort:["Ian","Feb","Mar","Apr","Mai","Iun","Iul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Duminică","Luni","Marţi","Miercuri","Joi","Vineri","Sâmbătă"],dayNamesShort:["Dum","Lun","Mar","Mie","Joi","Vin","Sâm"],dayNamesMin:["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],weekHeader:"Săpt",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ro",{buttonText:{prev:"precedentă",next:"următoare",month:"Lună",week:"Săptămână",day:"Zi",list:"Agendă"},allDayText:"Toată ziua",eventLimitText:function(e){return"+alte "+e},noEventsMessage:"Nu există evenimente de afișat"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t){var n={ss:"secunde",mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"},r=" ";return(e%100>=20||e>=100&&e%100==0)&&(r=" de "),e+r+n[t]}return e.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",ss:a,m:"un minut",mm:a,h:"o oră",hh:a,d:"o zi",dd:a,M:"o lună",MM:a,y:"un an",yy:a},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(182);var n=t(1);n.datepickerLocale("ru","ru",{closeText:"Закрыть",prevText:"<Пред",nextText:"След>",currentText:"Сегодня",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],dayNamesShort:["вск","пнд","втр","срд","чтв","птн","сбт"],dayNamesMin:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Нед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ru",{buttonText:{month:"Месяц",week:"Неделя",day:"День",list:"Повестка дня"},allDayText:"Весь день",eventLimitText:function(e){return"+ ещё "+e},noEventsMessage:"Нет событий для отображения"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a){var t=e.split("_");return a%10==1&&a%100!=11?t[0]:a%10>=2&&a%10<=4&&(a%100<10||a%100>=20)?t[1]:t[2]}function t(e,t,n){var r={ss:t?"секунда_секунды_секунд":"секунду_секунды_секунд",mm:t?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"};return"m"===n?t?"минута":"минуту":e+" "+a(r[n],+e)}var n=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i];return e.defineLocale("ru",{months:{format:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),standalone:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_")},monthsShort:{format:"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),standalone:"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_")},weekdays:{standalone:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),format:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_"),isFormat:/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/},weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:n,longMonthsParse:n,shortMonthsParse:n,monthsRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsShortRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsStrictRegex:/^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,monthsShortStrictRegex:/^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., H:mm",LLLL:"dddd, D MMMM YYYY г., H:mm"},calendar:{sameDay:"[Сегодня в] LT",nextDay:"[Завтра в] LT",lastDay:"[Вчера в] LT",nextWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В следующее] dddd [в] LT";case 1:case 2:case 4:return"[В следующий] dddd [в] LT";case 3:case 5:case 6:return"[В следующую] dddd [в] LT"}},lastWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В прошлое] dddd [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",ss:t,m:t,mm:t,h:"час",hh:t,d:"день",dd:t,M:"месяц",MM:t,y:"год",yy:t},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(e){return/^(дня|вечера)$/.test(e)},meridiem:function(e,a,t){return e<4?"ночи":e<12?"утра":e<17?"дня":"вечера"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го|я)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":return e+"-й";case"D":return e+"-го";case"w":case"W":return e+"-я";default:return e}},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(184);var n=t(1);n.datepickerLocale("sk","sk",{closeText:"Zavrieť",prevText:"<Predchádzajúci",nextText:"Nasledujúci>",currentText:"Dnes",monthNames:["január","február","marec","apríl","máj","jún","júl","august","september","október","november","december"],monthNamesShort:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sep","Okt","Nov","Dec"],dayNames:["nedeľa","pondelok","utorok","streda","štvrtok","piatok","sobota"],dayNamesShort:["Ned","Pon","Uto","Str","Štv","Pia","Sob"],dayNamesMin:["Ne","Po","Ut","St","Št","Pia","So"],weekHeader:"Ty",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("sk",{buttonText:{month:"Mesiac",week:"Týždeň",day:"Deň",list:"Rozvrh"},allDayText:"Celý deň",eventLimitText:function(e){return"+ďalšie: "+e},noEventsMessage:"Žiadne akcie na zobrazenie"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e){return e>1&&e<5}function t(e,t,n,r){var s=e+" ";switch(n){case"s":return t||r?"pár sekúnd":"pár sekundami";case"ss":return t||r?s+(a(e)?"sekundy":"sekúnd"):s+"sekundami";case"m":return t?"minúta":r?"minútu":"minútou";case"mm":return t||r?s+(a(e)?"minúty":"minút"):s+"minútami";case"h":return t?"hodina":r?"hodinu":"hodinou";case"hh":return t||r?s+(a(e)?"hodiny":"hodín"):s+"hodinami";case"d":return t||r?"deň":"dňom";case"dd":return t||r?s+(a(e)?"dni":"dní"):s+"dňami";case"M":return t||r?"mesiac":"mesiacom";case"MM":return t||r?s+(a(e)?"mesiace":"mesiacov"):s+"mesiacmi";case"y":return t||r?"rok":"rokom";case"yy":return t||r?s+(a(e)?"roky":"rokov"):s+"rokmi"}}var n="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),r="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_");return e.defineLocale("sk",{months:n,monthsShort:r,weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(186);var n=t(1);n.datepickerLocale("sl","sl",{closeText:"Zapri",prevText:"<Prejšnji",nextText:"Naslednji>",currentText:"Trenutni",monthNames:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"],dayNamesShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"],dayNamesMin:["Ne","Po","To","Sr","Če","Pe","So"],weekHeader:"Teden",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("sl",{buttonText:{month:"Mesec",week:"Teden",day:"Dan",list:"Dnevni red"},allDayText:"Ves dan",eventLimitText:"več",noEventsMessage:"Ni dogodkov za prikaz"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r=e+" ";switch(t){case"s":return a||n?"nekaj sekund":"nekaj sekundami";case"ss":return r+=1===e?a?"sekundo":"sekundi":2===e?a||n?"sekundi":"sekundah":e<5?a||n?"sekunde":"sekundah":"sekund";case"m":return a?"ena minuta":"eno minuto";case"mm":return r+=1===e?a?"minuta":"minuto":2===e?a||n?"minuti":"minutama":e<5?a||n?"minute":"minutami":a||n?"minut":"minutami";case"h":return a?"ena ura":"eno uro";case"hh":return r+=1===e?a?"ura":"uro":2===e?a||n?"uri":"urama":e<5?a||n?"ure":"urami":a||n?"ur":"urami";case"d":return a||n?"en dan":"enim dnem";case"dd":return r+=1===e?a||n?"dan":"dnem":2===e?a||n?"dni":"dnevoma":a||n?"dni":"dnevi";case"M":return a||n?"en mesec":"enim mesecem";case"MM":return r+=1===e?a||n?"mesec":"mesecem":2===e?a||n?"meseca":"mesecema":e<5?a||n?"mesece":"meseci":a||n?"mesecev":"meseci";case"y":return a||n?"eno leto":"enim letom";case"yy":return r+=1===e?a||n?"leto":"letom":2===e?a||n?"leti":"letoma":e<5?a||n?"leta":"leti":a||n?"let":"leti"}}return e.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prejšnjo] [nedeljo] [ob] LT";case 3:return"[prejšnjo] [sredo] [ob] LT";case 6:return"[prejšnjo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"pred %s",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(188);var n=t(1);n.datepickerLocale("sq","sq",{closeText:"mbylle",prevText:"<mbrapa",nextText:"Përpara>",currentText:"sot",monthNames:["Janar","Shkurt","Mars","Prill","Maj","Qershor","Korrik","Gusht","Shtator","Tetor","Nëntor","Dhjetor"],monthNamesShort:["Jan","Shk","Mar","Pri","Maj","Qer","Kor","Gus","Sht","Tet","Nën","Dhj"],dayNames:["E Diel","E Hënë","E Martë","E Mërkurë","E Enjte","E Premte","E Shtune"],dayNamesShort:["Di","Hë","Ma","Më","En","Pr","Sh"],dayNamesMin:["Di","Hë","Ma","Më","En","Pr","Sh"],weekHeader:"Ja",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("sq",{buttonText:{month:"Muaj",week:"Javë",day:"Ditë",list:"Listë"},allDayHtml:"Gjithë<br/>ditën",eventLimitText:function(e){return"+më tepër "+e},noEventsMessage:"Nuk ka evente për të shfaqur"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(e){return"M"===e.charAt(0)},meridiem:function(e,a,t){return e<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Nesër në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",ss:"%d sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(190);var n=t(1);n.datepickerLocale("sr-cyrl","sr",{closeText:"Затвори",prevText:"<",nextText:">",currentText:"Данас",monthNames:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"],monthNamesShort:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],dayNames:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"],dayNamesShort:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],dayNamesMin:["Не","По","Ут","Ср","Че","Пе","Су"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("sr-cyrl",{buttonText:{prev:"Претходна",next:"следећи",month:"Месец",week:"Недеља",day:"Дан",list:"Планер"},allDayText:"Цео дан",eventLimitText:function(e){return"+ још "+e},noEventsMessage:"Нема догађаја за приказ"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={words:{ss:["секунда","секунде","секунди"],m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:e>=2&&e<=4?a[1]:a[2]},translate:function(e,t,n){var r=a.words[n];return 1===n.length?t?r[0]:r[1]:e+" "+a.correctGrammaticalCase(e,r)}};return e.defineLocale("sr-cyrl",{months:"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар".split("_"),monthsShort:"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.".split("_"),monthsParseExact:!0,weekdays:"недеља_понедељак_уторак_среда_четвртак_петак_субота".split("_"),weekdaysShort:"нед._пон._уто._сре._чет._пет._суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){return["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",ss:a.translate,m:a.translate,mm:a.translate,h:a.translate,hh:a.translate,d:"дан",dd:a.translate,M:"месец",MM:a.translate,y:"годину",yy:a.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(192);var n=t(1);n.datepickerLocale("sr","sr-SR",{closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljak","Utorak","Sreda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sre","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Sed",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("sr",{buttonText:{prev:"Prethodna",next:"Sledeći",month:"Mеsеc",week:"Nеdеlja",day:"Dan",list:"Planеr"},allDayText:"Cеo dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nеma događaja za prikaz"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={words:{ss:["sekunda","sekunde","sekundi"],m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:e>=2&&e<=4?a[1]:a[2]},translate:function(e,t,n){var r=a.words[n];return 1===n.length?t?r[0]:r[1]:e+" "+a.correctGrammaticalCase(e,r)}};return e.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){return["[prošle] [nedelje] [u] LT","[prošlog] [ponedeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",ss:a.translate,m:a.translate,mm:a.translate,h:a.translate,hh:a.translate,d:"dan",dd:a.translate,M:"mesec",MM:a.translate,y:"godinu",yy:a.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(194);var n=t(1);n.datepickerLocale("sv","sv",{closeText:"Stäng",prevText:"«Förra",nextText:"Nästa»",currentText:"Idag",monthNames:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNamesShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"],dayNames:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"],dayNamesMin:["Sö","Må","Ti","On","To","Fr","Lö"],weekHeader:"v. ",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("sv",{buttonText:{month:"Månad",week:"Vecka",day:"Dag",list:"Program"},allDayText:"Heldag",eventLimitText:"till",noEventsMessage:"Inga händelser att visa"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",ss:"%d sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}(e|a)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"e":1===a?"a":2===a?"a":"e")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(196);var n=t(1);n.datepickerLocale("th","th",{closeText:"ปิด",prevText:"« ย้อน",nextText:"ถัดไป »",currentText:"วันนี้",monthNames:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],monthNamesShort:["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],dayNames:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัสบดี","ศุกร์","เสาร์"],dayNamesShort:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],dayNamesMin:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("th",{buttonText:{month:"เดือน",week:"สัปดาห์",day:"วัน",list:"แผนงาน"},allDayText:"ตลอดวัน",eventLimitText:"เพิ่มเติม",noEventsMessage:"ไม่มีกิจกรรมที่จะแสดง"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),monthsParseExact:!0,weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(e){return"หลังเที่ยง"===e},meridiem:function(e,a,t){return e<12?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",ss:"%d วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(198);var n=t(1);n.datepickerLocale("tr","tr",{closeText:"kapat",prevText:"<geri",nextText:"ileri>",currentText:"bugün",monthNames:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],monthNamesShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],dayNames:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],dayNamesShort:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],dayNamesMin:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("tr",{buttonText:{next:"ileri",month:"Ay",week:"Hafta",day:"Gün",list:"Ajanda"},allDayText:"Tüm gün",eventLimitText:"daha fazla",noEventsMessage:"Herhangi bir etkinlik görüntülemek için"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"};return e.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",ss:"%d saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinal:function(e,t){switch(t){case"d":case"D":case"Do":case"DD":return e;default:if(0===e)return e+"'ıncı";var n=e%10,r=e%100-n,s=e>=100?100:null;return e+(a[n]||a[r]||a[s])}},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(200);var n=t(1);n.datepickerLocale("uk","uk",{closeText:"Закрити",prevText:"<",nextText:">",currentText:"Сьогодні",monthNames:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],monthNamesShort:["Січ","Лют","Бер","Кві","Тра","Чер","Лип","Сер","Вер","Жов","Лис","Гру"],dayNames:["неділя","понеділок","вівторок","середа","четвер","п’ятниця","субота"],dayNamesShort:["нед","пнд","вів","срд","чтв","птн","сбт"],dayNamesMin:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Тиж",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("uk",{buttonText:{month:"Місяць",week:"Тиждень",day:"День",list:"Порядок денний"},allDayText:"Увесь день",eventLimitText:function(e){return"+ще "+e+"..."},noEventsMessage:"Немає подій для відображення"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a){var t=e.split("_");return a%10==1&&a%100!=11?t[0]:a%10>=2&&a%10<=4&&(a%100<10||a%100>=20)?t[1]:t[2]}function t(e,t,n){var r={ss:t?"секунда_секунди_секунд":"секунду_секунди_секунд",mm:t?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:t?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"};return"m"===n?t?"хвилина":"хвилину":"h"===n?t?"година":"годину":e+" "+a(r[n],+e)}function n(e,a){var t={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")};return e?t[/(\[[ВвУу]\]) ?dddd/.test(a)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(a)?"genitive":"nominative"][e.day()]:t.nominative}function r(e){return function(){return e+"о"+(11===this.hours()?"б":"")+"] LT"}}return e.defineLocale("uk",{months:{format:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),standalone:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_")},monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:n,weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"},calendar:{sameDay:r("[Сьогодні "),nextDay:r("[Завтра "),lastDay:r("[Вчора "),nextWeek:r("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return r("[Минулої] dddd [").call(this);case 1:case 2:case 4:return r("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",ss:t,m:t,mm:t,h:"годину",hh:t,d:"день",dd:t,M:"місяць",MM:t,y:"рік",yy:t},meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(e){return/^(дня|вечора)$/.test(e)},meridiem:function(e,a,t){return e<4?"ночі":e<12?"ранку":e<17?"дня":"вечора"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":case"w":case"W":return e+"-й"
-;case"D":return e+"-го";default:return e}},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(202);var n=t(1);n.datepickerLocale("vi","vi",{closeText:"Đóng",prevText:"<Trước",nextText:"Tiếp>",currentText:"Hôm nay",monthNames:["Tháng Một","Tháng Hai","Tháng Ba","Tháng Tư","Tháng Năm","Tháng Sáu","Tháng Bảy","Tháng Tám","Tháng Chín","Tháng Mười","Tháng Mười Một","Tháng Mười Hai"],monthNamesShort:["Tháng 1","Tháng 2","Tháng 3","Tháng 4","Tháng 5","Tháng 6","Tháng 7","Tháng 8","Tháng 9","Tháng 10","Tháng 11","Tháng 12"],dayNames:["Chủ Nhật","Thứ Hai","Thứ Ba","Thứ Tư","Thứ Năm","Thứ Sáu","Thứ Bảy"],dayNamesShort:["CN","T2","T3","T4","T5","T6","T7"],dayNamesMin:["CN","T2","T3","T4","T5","T6","T7"],weekHeader:"Tu",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("vi",{buttonText:{month:"Tháng",week:"Tuần",day:"Ngày",list:"Lịch biểu"},allDayText:"Cả ngày",eventLimitText:function(e){return"+ thêm "+e},noEventsMessage:"Không có sự kiện để hiển thị"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),monthsParseExact:!0,weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(e){return/^ch$/i.test(e)},meridiem:function(e,a,t){return e<12?t?"sa":"SA":t?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần rồi lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",ss:"%d giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(204);var n=t(1);n.datepickerLocale("zh-cn","zh-CN",{closeText:"关闭",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"}),n.locale("zh-cn",{buttonText:{month:"月",week:"周",day:"日",list:"日程"},allDayText:"全天",eventLimitText:function(e){return"另外 "+e+" 个"},noEventsMessage:"没有事件显示"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,a){return 12===e&&(e=0),"凌晨"===a||"早上"===a||"上午"===a?e:"下午"===a||"晚上"===a?e+12:e>=11?e:e+12},meridiem:function(e,a,t){var n=100*e+a;return n<600?"凌晨":n<900?"早上":n<1130?"上午":n<1230?"中午":n<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"周";default:return e}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",ss:"%d 秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(206);var n=t(1);n.datepickerLocale("zh-tw","zh-TW",{closeText:"關閉",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy/mm/dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"}),n.locale("zh-tw",{buttonText:{month:"月",week:"週",day:"天",list:"活動列表"},allDayText:"整天",eventLimitText:"顯示更多",noEventsMessage:"没有任何活動"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,a){return 12===e&&(e=0),"凌晨"===a||"早上"===a||"上午"===a?e:"中午"===a?e>=11?e:e+12:"下午"===a||"晚上"===a?e+12:void 0},meridiem:function(e,a,t){var n=100*e+a;return n<600?"凌晨":n<900?"早上":n<1130?"上午":n<1230?"中午":n<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})})},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(e,a,t){t(65),t(67),t(69),t(71),t(73),t(75),t(77),t(79),t(81),t(83),t(85),t(87),t(89),t(91),t(93),t(95),t(97),t(99),t(101),t(103),t(105),t(107),t(109),t(111),t(113),t(115),t(117),t(119),t(121),t(123),t(125),t(127),t(129),t(131),t(133),t(135),t(137),t(139),t(141),t(143),t(145),t(147),t(149),t(151),t(153),t(155),t(157),t(159),t(161),t(163),t(165),t(167),t(169),t(171),t(173),t(175),t(177),t(179),t(181),t(183),t(185),t(187),t(189),t(191),t(193),t(195),t(197),t(199),t(201),t(203),t(205),e.exports=t(435)},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0});var n=t(0),r=t(1);n.locale("en"),r.locale("en"),window.jQuery.datepicker&&window.jQuery.datepicker.setDefaults(window.jQuery.datepicker.regional[""])}])});
\ No newline at end of file
+++ /dev/null
-!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var a=n[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,t),a.l=!0,a.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=95)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},95:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(96);var r=n(1);r.datepickerLocale("de","de",{closeText:"Schließen",prevText:"<Zurück",nextText:"Vor>",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),r.locale("de",{buttonText:{month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},allDayText:"Ganztägig",eventLimitText:function(e){return"+ weitere "+e},noEventsMessage:"Keine Ereignisse anzuzeigen"})},96:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){function t(e,t,n,r){var a={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return t?a[n][0]:a[n][1]}return e.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:t,mm:"%d Minuten",h:t,hh:"%d Stunden",d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})}})});
\ No newline at end of file
+++ /dev/null
-!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(a){if(r[a])return r[a].exports;var n=r[a]={i:a,l:!1,exports:{}};return e[a].call(n.exports,n,n.exports,t),n.l=!0,n.exports}var r={};return t.m=e,t.c=r,t.d=function(e,r,a){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:a})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=103)}({0:function(t,r){t.exports=e},1:function(e,r){e.exports=t},103:function(e,t,r){Object.defineProperty(t,"__esModule",{value:!0}),r(104);var a=r(1);a.datepickerLocale("en-gb","en-GB",{closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.locale("en-gb")},104:function(e,t,r){!function(e,t){t(r(0))}(0,function(e){return e.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})})}})});
\ No newline at end of file
+++ /dev/null
-!function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],r):"object"==typeof exports?r(require("moment"),require("fullcalendar")):r(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,r){return function(e){function r(t){if(n[t])return n[t].exports;var a=n[t]={i:t,l:!1,exports:{}};return e[t].call(a.exports,a,a.exports,r),a.l=!0,a.exports}var n={};return r.m=e,r.c=n,r.d=function(e,n,t){r.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:t})},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,"a",n),n},r.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},r.p="",r(r.s=127)}({0:function(r,n){r.exports=e},1:function(e,n){e.exports=r},127:function(e,r,n){Object.defineProperty(r,"__esModule",{value:!0}),n(128);var t=n(1);t.datepickerLocale("fr","fr",{closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),t.locale("fr",{buttonText:{year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},allDayHtml:"Toute la<br/>journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"})},128:function(e,r,n){!function(e,r){r(n(0))}(0,function(e){return e.defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(e,r){switch(r){case"D":return e+(1===e?"er":"");default:case"M":case"Q":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}})})}})});
\ No newline at end of file
--- /dev/null
+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.
--- /dev/null
+
+# FullCalendar Luxon Plugin
+
+A connector to the Luxon date library
+
+[View the docs »](https://fullcalendar.io/docs/luxon-plugin)
+
+This package was created from the [FullCalendar monorepo »](https://github.com/fullcalendar/fullcalendar)
--- /dev/null
+declare module "@fullcalendar/luxon" {
+ import { DateTime as LuxonDateTime, Duration as LuxonDuration } from "luxon";
+ import { Calendar, Duration } from "@fullcalendar/core";
+ export function toDateTime(date: Date, calendar: Calendar): LuxonDateTime;
+ export function toDuration(duration: Duration, calendar: Calendar): LuxonDuration;
+ const _default_10: import("@fullcalendar/core/plugin-system").PluginDef;
+ export default _default_10;
+}
\ No newline at end of file
--- /dev/null
+/*!
+FullCalendar Luxon Plugin v4.1.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/core')) :
+ typeof define === 'function' && define.amd ? define(['exports', 'luxon', '@fullcalendar/core'], factory) :
+ (global = global || self, factory(global.FullCalendarLuxon = {}, global.luxon, global.FullCalendar));
+}(this, function (exports, luxon, 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);
+ };
+
+ function toDateTime(date, calendar) {
+ if (!(calendar instanceof core.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 core.Calendar)) {
+ throw new Error('must supply a Calendar instance');
+ }
+ return luxon.Duration.fromObject(__assign({}, duration, { locale: calendar.dateEnv.locale.codes[0] }));
+ }
+ var LuxonNamedTimeZone = /** @class */ (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;
+ }(core.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 = core.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(/^(.*?)\{(.*)\}(.*)$/); // TODO: lookbehinds for escape characters
+ 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;
+ }
+ }
+ return formatStart(cmd.whole) + separator + formatEnd(cmd.whole);
+ }
+
+ exports.default = main;
+ exports.toDateTime = toDateTime;
+ exports.toDuration = toDuration;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+}));
--- /dev/null
+/*!
+FullCalendar Luxon Plugin v4.1.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/core")):"function"==typeof define&&define.amd?define(["exports","luxon","@fullcalendar/core"],t):(e=e||self,t(e.FullCalendarLuxon={},e.luxon,e.FullCalendar))}(this,function(e,t,n){"use strict";function o(e,t){function n(){this.constructor=e}f(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}function r(e,o){if(!(o instanceof n.Calendar))throw new Error("must supply a Calendar instance");return t.DateTime.fromJSDate(e,{zone:o.dateEnv.timeZone,locale:o.dateEnv.locale.codes[0]})}function a(e,o){if(!(o instanceof n.Calendar))throw new Error("must supply a Calendar instance");return t.Duration.fromObject(m({},e,{locale:o.dateEnv.locale.codes[0]}))}function i(e,t){var n=c(e);if(t.end){var o=u(t.start.array,t.timeZone,t.localeCodes[0]),r=u(t.end.array,t.timeZone,t.localeCodes[0]);return d(n,o.toFormat.bind(o),r.toFormat.bind(r),t.separator)}return u(t.date.array,t.timeZone,t.localeCodes[0]).toFormat(n.whole)}function l(e){return[e.year,e.month-1,e.day,e.hour,e.minute,e.second,e.millisecond]}function u(e,n,o){return t.DateTime.fromObject({zone:n,locale:o,year:e[0],month:e[1]+1,day:e[2],hour:e[3],minute:e[4],second:e[5],millisecond:e[6]})}function c(e){var t=e.match(/^(.*?)\{(.*)\}(.*)$/);if(t){var n=c(t[2]);return{head:t[1],middle:n,tail:t[3],whole:t[1]+n.whole+t[3]}}return{head:null,middle:null,tail:null,whole:e}}function d(e,t,n,o){if(e.middle){var r=t(e.head),a=d(e.middle,t,n,o),i=t(e.tail),l=n(e.head),u=d(e.middle,t,n,o),c=n(e.tail);if(r===l&&i===c)return r+(a===u?a:a+o+u)+i}return t(e.whole)+o+n(e.whole)}/*! *****************************************************************************
+ 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 f=function(e,t){return(f=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)},m=function(){return m=Object.assign||function(e){for(var t,n=1,o=arguments.length;n<o;n++){t=arguments[n];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},m.apply(this,arguments)},s=function(e){function n(){return null!==e&&e.apply(this,arguments)||this}return o(n,e),n.prototype.offsetForArray=function(e){return u(e,this.timeZoneName).offset},n.prototype.timestampToArray=function(e){return l(t.DateTime.fromMillis(e,{zone:this.timeZoneName}))},n}(n.NamedTimeZoneImpl),p=n.createPlugin({cmdFormatter:i,namedTimeZonedImpl:s});e.default=p,e.toDateTime=r,e.toDuration=a,Object.defineProperty(e,"__esModule",{value:!0})});
\ No newline at end of file
--- /dev/null
+{
+ "_from": "@fullcalendar/luxon@^4.1.0",
+ "_id": "@fullcalendar/luxon@4.1.0",
+ "_inBundle": false,
+ "_integrity": "sha512-z/GBThh16+i4/L+0bzqhY695tyJygeFE/0xyd1Q8WgQfISNwCoBfUB4vRIzkk1AzraCkm/s696yLRieG+bV5Fw==",
+ "_location": "/@fullcalendar/luxon",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "@fullcalendar/luxon@^4.1.0",
+ "name": "@fullcalendar/luxon",
+ "escapedName": "@fullcalendar%2fluxon",
+ "scope": "@fullcalendar",
+ "rawSpec": "^4.1.0",
+ "saveSpec": null,
+ "fetchSpec": "^4.1.0"
+ },
+ "_requiredBy": [
+ "#USER",
+ "/"
+ ],
+ "_resolved": "https://registry.npmjs.org/@fullcalendar/luxon/-/luxon-4.1.0.tgz",
+ "_shasum": "b71e0f7138de59182869563b28cd1bbb2ad1f9dc",
+ "_spec": "@fullcalendar/luxon@^4.1.0",
+ "_where": "C:\\Users\\ksaff\\Workspace\\Websites\\fullcalendar",
+ "author": {
+ "name": "Adam Shaw",
+ "email": "arshaw@arshaw.com",
+ "url": "http://arshaw.com/"
+ },
+ "bugs": {
+ "url": "https://fullcalendar.io/reporting-bugs"
+ },
+ "bundleDependencies": false,
+ "copyright": "2019 Adam Shaw",
+ "deprecated": false,
+ "description": "A connector to the Luxon date library",
+ "docs": "https://fullcalendar.io/docs/luxon-plugin",
+ "homepage": "https://fullcalendar.io/",
+ "keywords": [
+ "calendar",
+ "event",
+ "full-sized"
+ ],
+ "license": "MIT",
+ "main": "main.js",
+ "name": "@fullcalendar/luxon",
+ "peerDependencies": {
+ "luxon": "^1.12.1",
+ "@fullcalendar/core": "~4.1.0"
+ },
+ "releaseDate": "2019-04-24",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/fullcalendar/fullcalendar.git",
+ "homepage": "https://github.com/fullcalendar/fullcalendar"
+ },
+ "title": "FullCalendar Luxon Plugin",
+ "types": "main.d.ts",
+ "unpkg": "main.min.js",
+ "version": "4.1.0"
+}
--- /dev/null
+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.
--- /dev/null
+
+# FullCalendar Moment Timezone Plugin
+
+A connector to the moment-timezone library
+
+[View the docs »](https://fullcalendar.io/docs/moment-plugins#moment-timezone)
+
+This package was created from the [FullCalendar monorepo »](https://github.com/fullcalendar/fullcalendar)
--- /dev/null
+declare module "@fullcalendar/moment-timezone" {
+ import "@fullcalendar/moment-timezone/builds/moment-timezone-with-data";
+ const _default_12: import("@fullcalendar/core/plugin-system").PluginDef;
+ export default _default_12;
+}
\ No newline at end of file
--- /dev/null
+/*!
+FullCalendar Moment Timezone Plugin v4.1.0
+Docs & License: https://fullcalendar.io/
+(c) 2019 Adam Shaw
+*/
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('moment'), require('moment-timezone/builds/moment-timezone-with-data'), require('@fullcalendar/core')) :
+ typeof define === 'function' && define.amd ? define(['exports', 'moment', 'moment-timezone/builds/moment-timezone-with-data', '@fullcalendar/core'], factory) :
+ (global = global || self, factory(global.FullCalendarMomentTimezone = {}, global.moment, global.moment, global.FullCalendar));
+}(this, function (exports, moment, momentTimezoneWithData, core) { 'use strict';
+
+ moment = moment && moment.hasOwnProperty('default') ? moment['default'] : moment;
+
+ /*! *****************************************************************************
+ 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 MomentNamedTimeZone = /** @class */ (function (_super) {
+ __extends(MomentNamedTimeZone, _super);
+ function MomentNamedTimeZone() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ MomentNamedTimeZone.prototype.offsetForArray = function (a) {
+ return moment.tz(a, this.timeZoneName).utcOffset();
+ };
+ MomentNamedTimeZone.prototype.timestampToArray = function (ms) {
+ return moment.tz(ms, this.timeZoneName).toArray();
+ };
+ return MomentNamedTimeZone;
+ }(core.NamedTimeZoneImpl));
+ var main = core.createPlugin({
+ namedTimeZonedImpl: MomentNamedTimeZone
+ });
+
+ exports.default = main;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+}));
--- /dev/null
+/*!
+FullCalendar Moment Timezone Plugin v4.1.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/core")):"function"==typeof define&&define.amd?define(["exports","moment","moment-timezone/builds/moment-timezone-with-data","@fullcalendar/core"],t):(e=e||self,t(e.FullCalendarMomentTimezone={},e.moment,e.moment,e.FullCalendar))}(this,function(e,t,n,o){"use strict";function r(e,t){function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}t=t&&t.hasOwnProperty("default")?t.default:t;/*! *****************************************************************************
+ 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 i=function(e,t){return(i=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)},u=function(e){function n(){return null!==e&&e.apply(this,arguments)||this}return r(n,e),n.prototype.offsetForArray=function(e){return t.tz(e,this.timeZoneName).utcOffset()},n.prototype.timestampToArray=function(e){return t.tz(e,this.timeZoneName).toArray()},n}(o.NamedTimeZoneImpl),m=o.createPlugin({namedTimeZonedImpl:u});e.default=m,Object.defineProperty(e,"__esModule",{value:!0})});
\ No newline at end of file
--- /dev/null
+{
+ "_from": "@fullcalendar/moment-timezone@^4.1.0",
+ "_id": "@fullcalendar/moment-timezone@4.1.0",
+ "_inBundle": false,
+ "_integrity": "sha512-eGzR0xZhC2q2wiXCxopupeK6/u3z7a6kBBwdeAY+EJMlDV53FJHwXli1f4Y7WO+Z6wAiRWIia/RtSabWl7o/7A==",
+ "_location": "/@fullcalendar/moment-timezone",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "@fullcalendar/moment-timezone@^4.1.0",
+ "name": "@fullcalendar/moment-timezone",
+ "escapedName": "@fullcalendar%2fmoment-timezone",
+ "scope": "@fullcalendar",
+ "rawSpec": "^4.1.0",
+ "saveSpec": null,
+ "fetchSpec": "^4.1.0"
+ },
+ "_requiredBy": [
+ "#USER",
+ "/"
+ ],
+ "_resolved": "https://registry.npmjs.org/@fullcalendar/moment-timezone/-/moment-timezone-4.1.0.tgz",
+ "_shasum": "dd3637583bfcc64fb2daa76d5723205b2353131c",
+ "_spec": "@fullcalendar/moment-timezone@^4.1.0",
+ "_where": "C:\\Users\\ksaff\\Workspace\\Websites\\fullcalendar",
+ "author": {
+ "name": "Adam Shaw",
+ "email": "arshaw@arshaw.com",
+ "url": "http://arshaw.com/"
+ },
+ "bugs": {
+ "url": "https://fullcalendar.io/reporting-bugs"
+ },
+ "bundleDependencies": false,
+ "copyright": "2019 Adam Shaw",
+ "deprecated": false,
+ "description": "A connector to the moment-timezone library",
+ "docs": "https://fullcalendar.io/docs/moment-plugins#moment-timezone",
+ "homepage": "https://fullcalendar.io/",
+ "keywords": [
+ "calendar",
+ "event",
+ "full-sized"
+ ],
+ "license": "MIT",
+ "main": "main.js",
+ "name": "@fullcalendar/moment-timezone",
+ "peerDependencies": {
+ "moment": "^2.24.0",
+ "moment-timezone": "^0.5.25",
+ "@fullcalendar/core": "~4.1.0"
+ },
+ "releaseDate": "2019-04-24",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/fullcalendar/fullcalendar.git",
+ "homepage": "https://github.com/fullcalendar/fullcalendar"
+ },
+ "title": "FullCalendar Moment Timezone Plugin",
+ "types": "main.d.ts",
+ "unpkg": "main.min.js",
+ "version": "4.1.0"
+}
--- /dev/null
+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.
--- /dev/null
+
+# FullCalendar Moment Plugin
+
+A connector to the MomentJS date library
+
+[View the docs »](https://fullcalendar.io/docs/moment-plugins)
+
+This package was created from the [FullCalendar monorepo »](https://github.com/fullcalendar/fullcalendar)
--- /dev/null
+declare module "@fullcalendar/moment" {
+ import moment from "moment";
+ import { Calendar, Duration } from "@fullcalendar/core";
+ export function toMoment(date: Date, calendar: Calendar): moment.Moment;
+ export function toDuration(fcDuration: Duration): moment.Duration;
+ const _default_11: import("@fullcalendar/core/plugin-system").PluginDef;
+ export default _default_11;
+}
\ No newline at end of file
--- /dev/null
+/*!
+FullCalendar Moment Plugin v4.1.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/core')) :
+ typeof define === 'function' && define.amd ? define(['exports', 'moment', '@fullcalendar/core'], factory) :
+ (global = global || self, factory(global.FullCalendarMoment = {}, global.moment, global.FullCalendar));
+}(this, function (exports, moment, core) { 'use strict';
+
+ moment = moment && moment.hasOwnProperty('default') ? moment['default'] : moment;
+
+ function toMoment(date, calendar) {
+ if (!(calendar instanceof core.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); // momment accepts all the props that fc.Duration already has!
+ }
+ 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); // TODO: test for this
+ }
+ var main = core.createPlugin({
+ cmdFormatter: formatWithCmdStr
+ });
+ function createMomentFormatFunc(mom) {
+ return function (cmdStr) {
+ return cmdStr ? mom.format(cmdStr) : ''; // because calling with blank string results in ISO8601 :(
+ };
+ }
+ 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(/^(.*?)\{(.*)\}(.*)$/); // TODO: lookbehinds for escape characters
+ 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;
+ }
+ }
+ return formatStart(cmd.whole) + separator + formatEnd(cmd.whole);
+ }
+
+ exports.default = main;
+ exports.toDuration = toDuration;
+ exports.toMoment = toMoment;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+}));
--- /dev/null
+/*!
+FullCalendar Moment Plugin v4.1.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/core")):"function"==typeof define&&define.amd?define(["exports","moment","@fullcalendar/core"],t):(e=e||self,t(e.FullCalendarMoment={},e.moment,e.FullCalendar))}(this,function(e,t,n){"use strict";function r(e,t){if(!(t instanceof n.Calendar))throw new Error("must supply a Calendar instance");return u(e,t.dateEnv.timeZone,null,t.dateEnv.locale.codes[0])}function a(e){return t.duration(e)}function o(e,t){var n=i(e);if(t.end){var r=u(t.start.array,t.timeZone,t.start.timeZoneOffset,t.localeCodes[0]),a=u(t.end.array,t.timeZone,t.end.timeZoneOffset,t.localeCodes[0]);return d(n,l(r),l(a),t.separator)}return u(t.date.array,t.timeZone,t.date.timeZoneOffset,t.localeCodes[0]).format(n.whole)}function l(e){return function(t){return t?e.format(t):""}}function u(e,n,r,a){var o;return"local"===n?o=t(e):"UTC"===n?o=t.utc(e):t.tz?o=t.tz(e,n):(o=t.utc(e),null!=r&&o.utcOffset(r)),o.locale(a),o}function i(e){var t=e.match(/^(.*?)\{(.*)\}(.*)$/);if(t){var n=i(t[2]);return{head:t[1],middle:n,tail:t[3],whole:t[1]+n.whole+t[3]}}return{head:null,middle:null,tail:null,whole:e}}function d(e,t,n,r){if(e.middle){var a=t(e.head),o=d(e.middle,t,n,r),l=t(e.tail),u=n(e.head),i=d(e.middle,t,n,r),f=n(e.tail);if(a===u&&l===f)return a+(o===i?o:o+r+i)+l}return t(e.whole)+r+n(e.whole)}t=t&&t.hasOwnProperty("default")?t.default:t;var f=n.createPlugin({cmdFormatter:o});e.default=f,e.toDuration=a,e.toMoment=r,Object.defineProperty(e,"__esModule",{value:!0})});
\ No newline at end of file
--- /dev/null
+{
+ "_from": "@fullcalendar/moment@^4.1.0",
+ "_id": "@fullcalendar/moment@4.1.0",
+ "_inBundle": false,
+ "_integrity": "sha512-gaGT3X+o3HjIQb/evAtgVvIAa2m43dxI4p5tY3XHdBMSthsJ49Q0+L7S+KUK/btE6SMm/6NC6xlDb/zTyEDVCw==",
+ "_location": "/@fullcalendar/moment",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "@fullcalendar/moment@^4.1.0",
+ "name": "@fullcalendar/moment",
+ "escapedName": "@fullcalendar%2fmoment",
+ "scope": "@fullcalendar",
+ "rawSpec": "^4.1.0",
+ "saveSpec": null,
+ "fetchSpec": "^4.1.0"
+ },
+ "_requiredBy": [
+ "#USER",
+ "/"
+ ],
+ "_resolved": "https://registry.npmjs.org/@fullcalendar/moment/-/moment-4.1.0.tgz",
+ "_shasum": "12fafb189524a822587a947d67cb459fbdce181a",
+ "_spec": "@fullcalendar/moment@^4.1.0",
+ "_where": "C:\\Users\\ksaff\\Workspace\\Websites\\fullcalendar",
+ "author": {
+ "name": "Adam Shaw",
+ "email": "arshaw@arshaw.com",
+ "url": "http://arshaw.com/"
+ },
+ "bugs": {
+ "url": "https://fullcalendar.io/reporting-bugs"
+ },
+ "bundleDependencies": false,
+ "copyright": "2019 Adam Shaw",
+ "deprecated": false,
+ "description": "A connector to the MomentJS date library",
+ "docs": "https://fullcalendar.io/docs/moment-plugins",
+ "homepage": "https://fullcalendar.io/",
+ "keywords": [
+ "calendar",
+ "event",
+ "full-sized"
+ ],
+ "license": "MIT",
+ "main": "main.js",
+ "name": "@fullcalendar/moment",
+ "peerDependencies": {
+ "moment": "^2.24.0",
+ "@fullcalendar/core": "~4.1.0"
+ },
+ "releaseDate": "2019-04-24",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/fullcalendar/fullcalendar.git",
+ "homepage": "https://github.com/fullcalendar/fullcalendar"
+ },
+ "title": "FullCalendar Moment Plugin",
+ "types": "main.d.ts",
+ "unpkg": "main.min.js",
+ "version": "4.1.0"
+}
--- /dev/null
+
+For complete licensing information, visit:
+http://fullcalendar.io/scheduler/license
+
+FullCalendar Scheduler is tri-licensed, meaning you must choose
+one of three licenses to use. Here is a summary of those licenses:
+
+- Commercial License
+ (a paid license, meant for commercial use)
+ http://fullcalendar.io/scheduler/license-details
+
+- Creative Commons Non-Commercial No-Derivatives
+ (meant for trial and non-commercial use)
+ https://creativecommons.org/licenses/by-nc-nd/4.0/
+
+- GPLv3 License
+ (meant for open-source projects)
+ http://www.gnu.org/licenses/gpl-3.0.en.html
--- /dev/null
+
+# FullCalendar Resources Common Plugin
+
+Offers base support for resources. Required for all resource-related plugins.
+
+[View the docs »](https://fullcalendar.io/docs/scheduler)
+
+This package was created from the [FullCalendar monorepo »](https://github.com/fullcalendar/fullcalendar-scheduler)
--- /dev/null
+declare module "@fullcalendar/resource-common/structs/resource" {
+ import { ConstraintInput, AllowFunc, EventStore, Calendar, EventUi, BusinessHoursInput } from "@fullcalendar/core";
+ export interface ResourceInput {
+ id?: string;
+ parentId?: string;
+ children?: ResourceInput[];
+ title?: string;
+ businessHours?: BusinessHoursInput;
+ eventEditable?: boolean;
+ eventStartEditable?: boolean;
+ eventDurationEditable?: boolean;
+ eventConstraint?: ConstraintInput;
+ eventOverlap?: boolean;
+ eventAllow?: AllowFunc;
+ eventClassName?: string[] | string;
+ eventClassNames?: string[] | string;
+ eventBackgroundColor?: string;
+ eventBorderColor?: string;
+ eventTextColor?: string;
+ eventColor?: string;
+ extendedProps?: {
+ [extendedProp: string]: any;
+ };
+ [otherProp: string]: any;
+ }
+ export interface Resource {
+ id: string;
+ parentId: string;
+ title: string;
+ businessHours: EventStore | null;
+ ui: EventUi;
+ extendedProps: {
+ [extendedProp: string]: any;
+ };
+ }
+ export type ResourceHash = {
+ [resourceId: string]: Resource;
+ };
+ export function parseResource(input: ResourceInput, parentId: string, store: ResourceHash, calendar: Calendar): Resource;
+ export function getPublicId(id: string): string;
+}
+
+declare module "@fullcalendar/resource-common/resource-sources/resource-func" {
+ import { ResourceSourceError } from "@fullcalendar/resource-common/structs/resource-source";
+ import { ResourceInput } from "@fullcalendar/resource-common/structs/resource";
+ export type ResourceFunc = (arg: {
+ start: Date;
+ end: Date;
+ timeZone: string;
+ }, successCallback: (events: ResourceInput[]) => void, failureCallback: (errorObj: ResourceSourceError) => void) => any;
+}
+
+declare module "@fullcalendar/resource-common/structs/resource-source" {
+ import { DateRange, Calendar } from "@fullcalendar/core";
+ import { ResourceInput } from "@fullcalendar/resource-common/structs/resource";
+ import { ResourceFunc } from "@fullcalendar/resource-common/resource-sources/resource-func";
+ export type ResourceSourceError = {
+ message: string;
+ xhr?: XMLHttpRequest;
+ [otherProp: string]: any;
+ };
+ export type ResourceFetcher = (arg: {
+ resourceSource: ResourceSource;
+ calendar: Calendar;
+ range: DateRange | null;
+ }, success: (res: {
+ rawResources: ResourceInput[];
+ xhr?: XMLHttpRequest;
+ }) => void, failure: (error: ResourceSourceError) => void) => void;
+ export interface ExtendedResourceSourceInput {
+ id?: string;
+ resources?: ResourceInput[];
+ url?: string;
+ method?: string;
+ extraParams?: object | (() => object);
+ }
+ export type ResourceSourceInput = ResourceInput[] | ExtendedResourceSourceInput | ResourceFunc | string;
+ export interface ResourceSource {
+ _raw: any;
+ sourceId: string;
+ sourceDefId: number;
+ meta: any;
+ publicId: string;
+ isFetching: boolean;
+ latestFetchId: string;
+ fetchRange: DateRange | null;
+ }
+ export interface ResourceSourceDef {
+ ignoreRange?: boolean;
+ parseMeta: (raw: ResourceSourceInput) => object | null;
+ fetch: ResourceFetcher;
+ }
+ export function registerResourceSourceDef(def: ResourceSourceDef): void;
+ export function getResourceSourceDef(id: number): ResourceSourceDef;
+ export function doesSourceIgnoreRange(source: ResourceSource): boolean;
+ export function parseResourceSource(input: ResourceSourceInput): ResourceSource;
+}
+
+declare module "@fullcalendar/resource-common/reducers/resourceSource" {
+ import { Calendar, DateProfile } from "@fullcalendar/core";
+ import { ResourceSource } from "@fullcalendar/resource-common/structs/resource-source";
+ import { ResourceAction } from "@fullcalendar/resource-common/reducers/resources";
+ export default function (source: ResourceSource | undefined, action: ResourceAction, dateProfile: DateProfile, calendar: Calendar): ResourceSource | null;
+}
+
+declare module "@fullcalendar/resource-common/reducers/resourceStore" {
+ import { Calendar } from "@fullcalendar/core";
+ import { ResourceAction } from "@fullcalendar/resource-common/reducers/resources";
+ import { ResourceHash } from "@fullcalendar/resource-common/structs/resource";
+ import { ResourceSource } from "@fullcalendar/resource-common/structs/resource-source";
+ export default function (store: ResourceHash | undefined, action: ResourceAction, source: ResourceSource, calendar: Calendar): ResourceHash;
+}
+
+declare module "@fullcalendar/resource-common/reducers/resources" {
+ import { Calendar, CalendarState, Action, DateRange } from "@fullcalendar/core";
+ import { ResourceSource, ResourceSourceError } from "@fullcalendar/resource-common/structs/resource-source";
+ import { ResourceHash, ResourceInput } from "@fullcalendar/resource-common/structs/resource";
+ import { ResourceEntityExpansions } from "@fullcalendar/resource-common/reducers/resourceEntityExpansions";
+ module '@fullcalendar/core' {
+ interface CalendarState {
+ resourceSource?: ResourceSource | null;
+ resourceStore?: ResourceHash;
+ resourceEntityExpansions?: ResourceEntityExpansions;
+ }
+ }
+ module '@fullcalendar/core' {
+ interface Calendar {
+ dispatch(action: ResourceAction): any;
+ }
+ }
+ export type ResourceAction = Action | {
+ type: 'FETCH_RESOURCE';
+ } | {
+ type: 'RECEIVE_RESOURCES';
+ rawResources: ResourceInput[];
+ fetchId: string;
+ fetchRange: DateRange | null;
+ } | {
+ type: 'RECEIVE_RESOURCE_ERROR';
+ error: ResourceSourceError;
+ fetchId: string;
+ fetchRange: DateRange | null;
+ } | {
+ type: 'ADD_RESOURCE';
+ resourceHash: ResourceHash;
+ } | // use a hash because needs to accept children
+ {
+ type: 'REMOVE_RESOURCE';
+ resourceId: string;
+ } | {
+ type: 'SET_RESOURCE_PROP';
+ resourceId: string;
+ propName: string;
+ propValue: any;
+ } | {
+ type: 'SET_RESOURCE_ENTITY_EXPANDED';
+ id: string;
+ isExpanded: boolean;
+ } | {
+ type: 'RESET_RESOURCES';
+ } | {
+ type: 'RESET_RESOURCE_SOURCE';
+ resourceSourceInput: any;
+ } | {
+ type: 'REFETCH_RESOURCES';
+ };
+ export default function (state: CalendarState, action: ResourceAction, calendar: Calendar): {
+ resourceSource: ResourceSource;
+ resourceStore: ResourceHash;
+ resourceEntityExpansions: ResourceEntityExpansions;
+ eventSources: import("@fullcalendar/core").EventSourceHash;
+ eventSourceLoadingLevel: number;
+ loadingLevel: number;
+ viewType: string;
+ currentDate: Date;
+ dateProfile: import("@fullcalendar/core").DateProfile;
+ eventStore: import("@fullcalendar/core").EventStore;
+ dateSelection: import("@fullcalendar/core").DateSpan;
+ eventSelection: string;
+ eventDrag: import("@fullcalendar/core").EventInteractionState;
+ eventResize: import("@fullcalendar/core").EventInteractionState;
+ };
+}
+
+declare module "@fullcalendar/resource-common/reducers/resourceEntityExpansions" {
+ import { ResourceAction } from "@fullcalendar/resource-common/reducers/resources";
+ export type ResourceEntityExpansions = {
+ [id: string]: boolean;
+ };
+ export function reduceResourceEntityExpansions(expansions: ResourceEntityExpansions, action: ResourceAction): ResourceEntityExpansions;
+}
+
+declare module "@fullcalendar/resource-common/View" {
+ import { View, ViewProps, ViewSpec, ViewPropsTransformer, CalendarComponentProps, EventUi, EventUiHash, EventDefHash, EventStore, DateRange } from "@fullcalendar/core";
+ import { ResourceHash } from "@fullcalendar/resource-common/structs/resource";
+ import { ResourceEntityExpansions } from "@fullcalendar/resource-common/reducers/resourceEntityExpansions";
+ export interface ResourceViewProps extends ViewProps {
+ resourceStore: ResourceHash;
+ resourceEntityExpansions: ResourceEntityExpansions;
+ }
+ export class ResourceDataAdder implements ViewPropsTransformer {
+ filterResources: typeof filterResources;
+ transform(viewProps: ViewProps, viewSpec: ViewSpec, calendarProps: CalendarComponentProps, view: View): {
+ resourceStore: ResourceHash;
+ resourceEntityExpansions: ResourceEntityExpansions;
+ };
+ }
+ function filterResources(resourceStore: ResourceHash, doFilterResourcesWithEvents: boolean, eventStore: EventStore, activeRange: DateRange): ResourceHash;
+ export class ResourceEventConfigAdder implements ViewPropsTransformer {
+ buildResourceEventUis: typeof buildResourceEventUis;
+ injectResourceEventUis: typeof injectResourceEventUis;
+ transform(viewProps: ViewProps, viewSpec: ViewSpec, calendarProps: CalendarComponentProps): {
+ eventUiBases: {
+ [key: string]: EventUi;
+ };
+ };
+ }
+ function buildResourceEventUis(resourceStore: ResourceHash): {
+ [key: string]: EventUi;
+ };
+ function injectResourceEventUis(eventUiBases: EventUiHash, eventDefs: EventDefHash, resourceEventUis: EventUiHash): {
+ [key: string]: EventUi;
+ };
+}
+
+declare module "@fullcalendar/resource-common/structs/event" {
+ import { EventDef } from "@fullcalendar/core";
+ module '@fullcalendar/core' {
+ interface EventDef {
+ resourceIds: string[];
+ resourceEditable: boolean;
+ }
+ }
+ export function parseEventDef(def: EventDef, props: any, leftovers: any): void;
+}
+
+declare module "@fullcalendar/resource-common/EventDragging" {
+ import { EventMutation, Hit, EventDef, Calendar } from "@fullcalendar/core";
+ module '@fullcalendar/core' {
+ interface EventMutation {
+ resourceMutation?: {
+ matchResourceId: string;
+ setResourceId: string;
+ };
+ }
+ }
+ export function massageEventDragMutation(eventMutation: EventMutation, hit0: Hit, hit1: Hit): void;
+ export function applyEventDefMutation(eventDef: EventDef, mutation: EventMutation, calendar: Calendar): void;
+ export function computeResourceEditable(eventDef: EventDef, calendar: Calendar): boolean;
+ export function transformEventDrop(mutation: EventMutation, calendar: Calendar): {
+ oldResource: import("@fullcalendar/resource-common").ResourceApi;
+ newResource: import("@fullcalendar/resource-common").ResourceApi;
+ };
+}
+
+declare module "@fullcalendar/resource-common/DateSelecting" {
+ import { Hit } from "@fullcalendar/core";
+ export function transformDateSelectionJoin(hit0: Hit, hit1: Hit): false | {
+ resourceId: any;
+ };
+}
+
+declare module "@fullcalendar/resource-common/api/ResourceApi" {
+ import { Calendar, EventApi } from "@fullcalendar/core";
+ import { Resource } from "@fullcalendar/resource-common/structs/resource";
+ export { ResourceApi as default, ResourceApi };
+ class ResourceApi {
+ _calendar: Calendar;
+ _resource: Resource;
+ constructor(calendar: Calendar, rawResource: Resource);
+ setProp(name: string, value: any): void;
+ remove(): void;
+ getParent(): ResourceApi | null;
+ getChildren(): ResourceApi[];
+ getEvents(): EventApi[];
+ readonly id: string;
+ readonly title: string;
+ readonly eventConstraint: any;
+ readonly eventOverlap: any;
+ readonly eventAllow: any;
+ readonly eventBackgroundColor: string;
+ readonly eventBorderColor: string;
+ readonly eventTextColor: string;
+ readonly eventClassNames: string[];
+ readonly extendedProps: any;
+ }
+}
+
+declare module "@fullcalendar/resource-common/Calendar" {
+ import { DateSpan, Calendar } from "@fullcalendar/core";
+ import ResourceApi from "@fullcalendar/resource-common/api/ResourceApi";
+ import { ResourceInput } from "@fullcalendar/resource-common/structs/resource";
+ import { ResourceSourceInput } from "@fullcalendar/resource-common/structs/resource-source";
+ module '@fullcalendar/core' {
+ interface DatePointApi {
+ resource?: ResourceApi;
+ }
+ interface DateSpanApi {
+ resource?: ResourceApi;
+ }
+ interface Calendar {
+ addResource(input: ResourceInput): ResourceApi;
+ getResourceById(id: string): ResourceApi | null;
+ getResources(): ResourceApi[];
+ getTopLevelResources(): ResourceApi[];
+ rerenderResources(): void;
+ refetchResources(): void;
+ }
+ interface OptionsInput {
+ schedulerLicenseKey?: string;
+ resources?: ResourceSourceInput;
+ resourceLabelText?: string;
+ resourceOrder?: any;
+ filterResourcesWithEvents?: any;
+ resourceText?: any;
+ resourceGroupField?: any;
+ resourceGroupText?: any;
+ resourceAreaWidth?: any;
+ resourceColumns?: any;
+ resourcesInitiallyExpanded?: any;
+ slotWidth?: any;
+ datesAboveResources?: any;
+ resourceRender?: any;
+ }
+ }
+ export function transformDatePoint(dateSpan: DateSpan, calendar: Calendar): {
+ resource: ResourceApi;
+ } | {
+ resource?: undefined;
+ };
+ export function transformDateSpan(dateSpan: DateSpan, calendar: Calendar): {
+ resource: ResourceApi;
+ } | {
+ resource?: undefined;
+ };
+}
+
+declare module "@fullcalendar/resource-common/common/ResourceSplitter" {
+ import { Splitter, SplittableProps, DateSpan, EventDef } from "@fullcalendar/core";
+ import { ResourceHash } from "@fullcalendar/resource-common/structs/resource";
+ export interface SplittableResourceProps extends SplittableProps {
+ resourceStore: ResourceHash;
+ }
+ export { ResourceSplitter as default, ResourceSplitter };
+ class ResourceSplitter extends Splitter<SplittableResourceProps> {
+ getKeyInfo(props: SplittableResourceProps): {
+ '': {};
+ };
+ getKeysForDateSpan(dateSpan: DateSpan): string[];
+ getKeysForEventDef(eventDef: EventDef): string[];
+ }
+}
+
+declare module "@fullcalendar/resource-common/validation" {
+ import { SplittableProps, Calendar } from "@fullcalendar/core";
+ export function isPropsValidWithResources(props: SplittableProps, calendar: Calendar): boolean;
+}
+
+declare module "@fullcalendar/resource-common/ExternalElementDragging" {
+ import { DateSpan } from "@fullcalendar/core";
+ export function transformExternalDef(dateSpan: DateSpan): {
+ resourceId: any;
+ } | {
+ resourceId?: undefined;
+ };
+}
+
+declare module "@fullcalendar/resource-common/EventResizing" {
+ import { Hit } from "@fullcalendar/core";
+ export function transformEventResizeJoin(hit0: Hit, hit1: Hit): false | object;
+}
+
+declare module "@fullcalendar/resource-common/api/EventApi" {
+ import ResourceApi from "@fullcalendar/resource-common/api/ResourceApi";
+ module '@fullcalendar/core' {
+ interface EventApi {
+ getResources: () => ResourceApi[];
+ setResources: (resources: (string | ResourceApi)[]) => void;
+ }
+ }
+}
+
+declare module "@fullcalendar/resource-common/license" {
+ import { Calendar } from "@fullcalendar/core";
+ export function injectLicenseWarning(containerEl: HTMLElement, calendar: Calendar): void;
+}
+
+declare module "@fullcalendar/resource-common/option-change-handlers" {
+ import { Calendar } from "@fullcalendar/core";
+ const _default: {
+ resources: typeof handleResources;
+ };
+ export default _default;
+ function handleResources(newSourceInput: any, calendar: Calendar): void;
+}
+
+declare module "@fullcalendar/resource-common/resource-sources/resource-array" { }
+
+declare module "@fullcalendar/resource-common/resource-sources/resource-json-feed" { }
+
+declare module "@fullcalendar/resource-common/common/resource-rendering" {
+ import { Resource } from "@fullcalendar/resource-common/structs/resource";
+ export function buildResourceTextFunc(resourceTextSetting: any, calendar: any): (resource: Resource) => any;
+}
+
+declare module "@fullcalendar/resource-common/common/ResourceDayHeader" {
+ import { Component, ComponentContext, DateMarker, DateProfile, DateFormatter } from "@fullcalendar/core";
+ import { Resource } from "@fullcalendar/resource-common/structs/resource";
+ export interface ResourceDayHeaderProps {
+ dates: DateMarker[];
+ dateProfile: DateProfile;
+ datesRepDistinctDays: boolean;
+ resources: Resource[];
+ renderIntroHtml?: () => string;
+ }
+ export { ResourceDayHeader as default, ResourceDayHeader };
+ class ResourceDayHeader extends Component<ResourceDayHeaderProps> {
+ datesAboveResources: boolean;
+ resourceTextFunc: (resource: Resource) => string;
+ dateFormat: DateFormatter;
+ el: HTMLElement;
+ thead: HTMLElement;
+ constructor(context: ComponentContext, parentEl: HTMLElement);
+ destroy(): void;
+ render(props: ResourceDayHeaderProps): void;
+ renderResourceRow(resources: Resource[]): string;
+ renderDayAndResourceRows(dates: DateMarker[], resources: Resource[]): string;
+ renderResourceAndDayRows(resources: Resource[], dates: DateMarker[]): string;
+ renderResourceCell(resource: Resource, colspan: number, date?: DateMarker): string;
+ renderDateCell(date: DateMarker, colspan: number, resource?: Resource): string;
+ buildTr(cellHtmls: string[]): string;
+ processResourceEls(resources: Resource[]): void;
+ }
+}
+
+declare module "@fullcalendar/resource-common/common/resource-day-table" {
+ import { SlicedProps, EventDef, Splitter, DayTable, DayTableCell, SplittableProps, DateSpan, Seg, EventSegUiInteractionState } from "@fullcalendar/core";
+ import { Resource } from "@fullcalendar/resource-common/structs/resource";
+ export interface ResourceDayTableCell extends DayTableCell {
+ resource: Resource;
+ }
+ export abstract class AbstractResourceDayTable {
+ cells: ResourceDayTableCell[][];
+ rowCnt: number;
+ colCnt: number;
+ dayTable: DayTable;
+ resources: Resource[];
+ resourceIndex: ResourceIndex;
+ constructor(dayTable: DayTable, resources: Resource[]);
+ abstract computeCol(dateI: any, resourceI: any): number;
+ abstract computeColRanges(dateStartI: any, dateEndI: any, resourceI: any): {
+ firstCol: number;
+ lastCol: number;
+ isStart: boolean;
+ isEnd: boolean;
+ }[];
+ buildCells(): ResourceDayTableCell[][];
+ }
+ export class ResourceDayTable extends AbstractResourceDayTable {
+ computeCol(dateI: any, resourceI: any): any;
+ computeColRanges(dateStartI: any, dateEndI: any, resourceI: any): {
+ firstCol: any;
+ lastCol: any;
+ isStart: boolean;
+ isEnd: boolean;
+ }[];
+ }
+ export class DayResourceTable extends AbstractResourceDayTable {
+ computeCol(dateI: any, resourceI: any): any;
+ computeColRanges(dateStartI: any, dateEndI: any, resourceI: any): any[];
+ }
+ export class ResourceIndex {
+ indicesById: {
+ [resourceId: string]: number;
+ };
+ ids: string[];
+ length: number;
+ constructor(resources: Resource[]);
+ }
+ export interface VResourceProps extends SplittableProps {
+ resourceDayTable: AbstractResourceDayTable;
+ }
+ export class VResourceSplitter extends Splitter<VResourceProps> {
+ getKeyInfo(props: VResourceProps): any;
+ getKeysForDateSpan(dateSpan: DateSpan): string[];
+ getKeysForEventDef(eventDef: EventDef): string[];
+ }
+ export abstract class VResourceJoiner<SegType extends Seg> {
+ private joinDateSelection;
+ private joinBusinessHours;
+ private joinFgEvents;
+ private joinBgEvents;
+ private joinEventDrags;
+ private joinEventResizes;
+ joinProps(propSets: {
+ [resourceId: string]: SlicedProps<SegType>;
+ }, resourceDayTable: AbstractResourceDayTable): SlicedProps<SegType>;
+ joinSegs(resourceDayTable: AbstractResourceDayTable, ...segGroups: SegType[][]): SegType[];
+ expandSegs(resourceDayTable: AbstractResourceDayTable, segs: SegType[]): any[];
+ joinInteractions(resourceDayTable: AbstractResourceDayTable, ...interactions: EventSegUiInteractionState[]): EventSegUiInteractionState;
+ abstract transformSeg(seg: SegType, resourceDayTable: AbstractResourceDayTable, resourceI: number): SegType[];
+ }
+}
+
+declare module "@fullcalendar/resource-common/common/resource-hierarchy" {
+ import { ResourceHash, Resource } from "@fullcalendar/resource-common/structs/resource";
+ import { ResourceEntityExpansions } from "@fullcalendar/resource-common/reducers/resourceEntityExpansions";
+ export interface Group {
+ value: any;
+ spec: any;
+ }
+ export interface GroupNode {
+ id: string;
+ isExpanded: boolean;
+ group: Group;
+ }
+ export interface ResourceNode {
+ id: string;
+ rowSpans: number[];
+ depth: number;
+ isExpanded: boolean;
+ hasChildren: boolean;
+ resource: Resource;
+ resourceFields: any;
+ }
+ export function flattenResources(resourceStore: ResourceHash, orderSpecs: any): Resource[];
+ export function buildRowNodes(resourceStore: ResourceHash, groupSpecs: any, orderSpecs: any, isVGrouping: boolean, expansions: ResourceEntityExpansions, expansionDefault: boolean): (GroupNode | ResourceNode)[];
+ export function buildResourceFields(resource: Resource): {
+ id: string;
+ parentId: string;
+ title: string;
+ businessHours: import("@fullcalendar/core").EventStore;
+ ui: import("@fullcalendar/core").EventUi;
+ extendedProps: {
+ [extendedProp: string]: any;
+ };
+ startEditable: boolean;
+ durationEditable: boolean;
+ constraints: import("@fullcalendar/core").Constraint[];
+ overlap: boolean;
+ allows: import("@fullcalendar/core").AllowFunc[];
+ backgroundColor: string;
+ borderColor: string;
+ textColor: string;
+ classNames: string[];
+ };
+ export function isGroupsEqual(group0: Group, group1: Group): boolean;
+}
+
+declare module "@fullcalendar/resource-common" {
+ import "@fullcalendar/resource-common/api/EventApi";
+ import "@fullcalendar/resource-common/resource-sources/resource-array";
+ import "@fullcalendar/resource-common/resource-sources/resource-func";
+ import "@fullcalendar/resource-common/resource-sources/resource-json-feed";
+ const _default_1: import("@fullcalendar/core").PluginDef;
+ export default _default_1;
+ export { default as ResourceDayHeader } from "@fullcalendar/resource-common/common/ResourceDayHeader";
+ export { VResourceJoiner, AbstractResourceDayTable, ResourceDayTable, DayResourceTable, VResourceSplitter } from "@fullcalendar/resource-common/common/resource-day-table";
+ export { Resource, ResourceHash } from "@fullcalendar/resource-common/structs/resource";
+ export { ResourceViewProps } from "@fullcalendar/resource-common/View";
+ export { flattenResources, Group, isGroupsEqual, GroupNode, ResourceNode, buildRowNodes, buildResourceFields } from "@fullcalendar/resource-common/common/resource-hierarchy";
+ export { buildResourceTextFunc } from "@fullcalendar/resource-common/common/resource-rendering";
+ export { default as ResourceApi } from "@fullcalendar/resource-common/api/ResourceApi";
+ export { computeResourceEditable } from "@fullcalendar/resource-common/EventDragging";
+ export { default as ResourceSplitter } from "@fullcalendar/resource-common/common/ResourceSplitter";
+}
\ No newline at end of file
--- /dev/null
+/*!
+FullCalendar Resources Common Plugin v4.1.0
+Docs & License: https://fullcalendar.io/scheduler
+(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.FullCalendarResourceCommon = {}, 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 ResourceDataAdder = /** @class */ (function () {
+ function ResourceDataAdder() {
+ this.filterResources = core.memoize(filterResources);
+ }
+ ResourceDataAdder.prototype.transform = function (viewProps, viewSpec, calendarProps, view) {
+ if (viewSpec.class.needsResourceData) {
+ return {
+ resourceStore: this.filterResources(calendarProps.resourceStore, view.opt('filterResourcesWithEvents'), calendarProps.eventStore, calendarProps.dateProfile.activeRange),
+ resourceEntityExpansions: calendarProps.resourceEntityExpansions
+ };
+ }
+ };
+ return ResourceDataAdder;
+ }());
+ function filterResources(resourceStore, doFilterResourcesWithEvents, eventStore, activeRange) {
+ if (doFilterResourcesWithEvents) {
+ var instancesInRange = filterEventInstancesInRange(eventStore.instances, activeRange);
+ var hasEvents_1 = computeHasEvents(instancesInRange, eventStore.defs);
+ __assign(hasEvents_1, computeAncestorHasEvents(hasEvents_1, resourceStore));
+ return core.filterHash(resourceStore, function (resource, resourceId) {
+ return hasEvents_1[resourceId];
+ });
+ }
+ else {
+ return resourceStore;
+ }
+ }
+ function filterEventInstancesInRange(eventInstances, activeRange) {
+ return core.filterHash(eventInstances, function (eventInstance) {
+ return core.rangesIntersect(eventInstance.range, activeRange);
+ });
+ }
+ function computeHasEvents(eventInstances, eventDefs) {
+ var hasEvents = {};
+ for (var instanceId in eventInstances) {
+ var instance = eventInstances[instanceId];
+ for (var _i = 0, _a = eventDefs[instance.defId].resourceIds; _i < _a.length; _i++) {
+ var resourceId = _a[_i];
+ hasEvents[resourceId] = true;
+ }
+ }
+ return hasEvents;
+ }
+ /*
+ mark resources as having events if any of their ancestors have them
+ NOTE: resourceStore might not have all the resources that hasEvents{} has keyed
+ */
+ function computeAncestorHasEvents(hasEvents, resourceStore) {
+ var res = {};
+ for (var resourceId in hasEvents) {
+ var resource = void 0;
+ while ((resource = resourceStore[resourceId])) {
+ resourceId = resource.parentId; // now functioning as the parentId
+ if (resourceId) {
+ res[resourceId] = true;
+ }
+ else {
+ break;
+ }
+ }
+ }
+ return res;
+ }
+ // for when non-resource view should be given EventUi info (for event coloring/constraints based off of resource data)
+ var ResourceEventConfigAdder = /** @class */ (function () {
+ function ResourceEventConfigAdder() {
+ this.buildResourceEventUis = core.memoizeOutput(buildResourceEventUis, core.isObjectsSimilar);
+ this.injectResourceEventUis = core.memoize(injectResourceEventUis);
+ }
+ ResourceEventConfigAdder.prototype.transform = function (viewProps, viewSpec, calendarProps) {
+ if (!viewSpec.class.needsResourceData) { // is a non-resource view?
+ return {
+ eventUiBases: this.injectResourceEventUis(viewProps.eventUiBases, viewProps.eventStore.defs, this.buildResourceEventUis(calendarProps.resourceStore))
+ };
+ }
+ };
+ return ResourceEventConfigAdder;
+ }());
+ function buildResourceEventUis(resourceStore) {
+ return core.mapHash(resourceStore, function (resource) {
+ return resource.ui;
+ });
+ }
+ function injectResourceEventUis(eventUiBases, eventDefs, resourceEventUis) {
+ return core.mapHash(eventUiBases, function (eventUi, defId) {
+ if (defId) { // not the '' key
+ return injectResourceEventUi(eventUi, eventDefs[defId], resourceEventUis);
+ }
+ else {
+ return eventUi;
+ }
+ });
+ }
+ function injectResourceEventUi(origEventUi, eventDef, resourceEventUis) {
+ var parts = [];
+ // first resource takes precedence, which fights with the ordering of combineEventUis, thus the unshifts
+ for (var _i = 0, _a = eventDef.resourceIds; _i < _a.length; _i++) {
+ var resourceId = _a[_i];
+ if (resourceEventUis[resourceId]) {
+ parts.unshift(resourceEventUis[resourceId]);
+ }
+ }
+ parts.unshift(origEventUi);
+ return core.combineEventUis(parts);
+ }
+
+ var RESOURCE_SOURCE_PROPS = {
+ id: String
+ };
+ var defs = [];
+ var uid = 0;
+ function registerResourceSourceDef(def) {
+ defs.push(def);
+ }
+ function getResourceSourceDef(id) {
+ return defs[id];
+ }
+ function doesSourceIgnoreRange(source) {
+ return Boolean(defs[source.sourceDefId].ignoreRange);
+ }
+ function parseResourceSource(input) {
+ for (var i = defs.length - 1; i >= 0; i--) { // later-added plugins take precedence
+ var def = defs[i];
+ var meta = def.parseMeta(input);
+ if (meta) {
+ var res = parseResourceSourceProps((typeof input === 'object' && input) ? input : {}, meta, i);
+ res._raw = core.freezeRaw(input);
+ return res;
+ }
+ }
+ return null;
+ }
+ function parseResourceSourceProps(input, meta, sourceDefId) {
+ var props = core.refineProps(input, RESOURCE_SOURCE_PROPS);
+ props.sourceId = String(uid++);
+ props.sourceDefId = sourceDefId;
+ props.meta = meta;
+ props.publicId = props.id;
+ props.isFetching = false;
+ props.latestFetchId = '';
+ props.fetchRange = null;
+ delete props.id;
+ return props;
+ }
+
+ function reduceResourceSource (source, action, dateProfile, calendar) {
+ switch (action.type) {
+ case 'INIT':
+ return createSource(calendar.opt('resources'), calendar);
+ case 'RESET_RESOURCE_SOURCE':
+ return createSource(action.resourceSourceInput, calendar, true);
+ case 'PREV': // TODO: how do we track all actions that affect dateProfile :(
+ case 'NEXT':
+ case 'SET_DATE':
+ case 'SET_VIEW_TYPE':
+ return handleRange(source, dateProfile.activeRange, calendar);
+ case 'RECEIVE_RESOURCES':
+ case 'RECEIVE_RESOURCE_ERROR':
+ return receiveResponse(source, action.fetchId, action.fetchRange);
+ case 'REFETCH_RESOURCES':
+ return fetchSource(source, dateProfile.activeRange, calendar);
+ default:
+ return source;
+ }
+ }
+ var uid$1 = 0;
+ function createSource(input, calendar, forceFetch) {
+ if (input) {
+ var source = parseResourceSource(input);
+ if (forceFetch || !calendar.opt('refetchResourcesOnNavigate')) { // because assumes handleRange will do it later
+ source = fetchSource(source, null, calendar);
+ }
+ return source;
+ }
+ return null;
+ }
+ function handleRange(source, activeRange, calendar) {
+ if (calendar.opt('refetchResourcesOnNavigate') &&
+ !doesSourceIgnoreRange(source) &&
+ (!source.fetchRange || !core.rangesEqual(source.fetchRange, activeRange))) {
+ return fetchSource(source, activeRange, calendar);
+ }
+ else {
+ return source;
+ }
+ }
+ function fetchSource(source, fetchRange, calendar) {
+ var sourceDef = getResourceSourceDef(source.sourceDefId);
+ var fetchId = String(uid$1++);
+ sourceDef.fetch({
+ resourceSource: source,
+ calendar: calendar,
+ range: fetchRange
+ }, function (res) {
+ // HACK
+ // do before calling dispatch in case dispatch renders synchronously
+ calendar.afterSizingTriggers._resourcesRendered = [null]; // fire once
+ calendar.dispatch({
+ type: 'RECEIVE_RESOURCES',
+ fetchId: fetchId,
+ fetchRange: fetchRange,
+ rawResources: res.rawResources
+ });
+ }, function (error) {
+ calendar.dispatch({
+ type: 'RECEIVE_RESOURCE_ERROR',
+ fetchId: fetchId,
+ fetchRange: fetchRange,
+ error: error
+ });
+ });
+ return __assign({}, source, { isFetching: true, latestFetchId: fetchId });
+ }
+ function receiveResponse(source, fetchId, fetchRange) {
+ if (fetchId === source.latestFetchId) {
+ return __assign({}, source, { isFetching: false, fetchRange: fetchRange });
+ }
+ return source;
+ }
+
+ var RESOURCE_PROPS = {
+ id: String,
+ title: String,
+ parentId: String,
+ businessHours: null,
+ children: null,
+ extendedProps: null
+ };
+ var PRIVATE_ID_PREFIX = '_fc:';
+ var uid$2 = 0;
+ /*
+ needs a full store so that it can populate children too
+ */
+ function parseResource(input, parentId, store, calendar) {
+ if (parentId === void 0) { parentId = ''; }
+ var leftovers0 = {};
+ var props = core.refineProps(input, RESOURCE_PROPS, {}, leftovers0);
+ var leftovers1 = {};
+ var ui = core.processScopedUiProps('event', leftovers0, calendar, leftovers1);
+ if (!props.id) {
+ props.id = PRIVATE_ID_PREFIX + (uid$2++);
+ }
+ if (!props.parentId) { // give precedence to the parentId property
+ props.parentId = parentId;
+ }
+ props.businessHours = props.businessHours ? core.parseBusinessHours(props.businessHours, calendar) : null;
+ props.ui = ui;
+ props.extendedProps = __assign({}, leftovers1, props.extendedProps);
+ // help out ResourceApi from having user modify props
+ Object.freeze(ui.classNames);
+ Object.freeze(props.extendedProps);
+ if (store[props.id]) ;
+ else {
+ store[props.id] = props;
+ if (props.children) {
+ for (var _i = 0, _a = props.children; _i < _a.length; _i++) {
+ var childInput = _a[_i];
+ parseResource(childInput, props.id, store, calendar);
+ }
+ delete props.children;
+ }
+ }
+ return props;
+ }
+ /*
+ TODO: use this in more places
+ */
+ function getPublicId(id) {
+ if (id.indexOf(PRIVATE_ID_PREFIX) === 0) {
+ return '';
+ }
+ return id;
+ }
+
+ function reduceResourceStore (store, action, source, calendar) {
+ switch (action.type) {
+ case 'INIT':
+ return {};
+ case 'RECEIVE_RESOURCES':
+ return receiveRawResources(store, action.rawResources, action.fetchId, source, calendar);
+ case 'ADD_RESOURCE':
+ return addResource(store, action.resourceHash);
+ case 'REMOVE_RESOURCE':
+ return removeResource(store, action.resourceId);
+ case 'SET_RESOURCE_PROP':
+ return setResourceProp(store, action.resourceId, action.propName, action.propValue);
+ case 'RESET_RESOURCES':
+ // must make the calendar think each resource is a new object :/
+ return core.mapHash(store, function (resource) {
+ return __assign({}, resource);
+ });
+ default:
+ return store;
+ }
+ }
+ function receiveRawResources(existingStore, inputs, fetchId, source, calendar) {
+ if (source.latestFetchId === fetchId) {
+ var nextStore = {};
+ for (var _i = 0, inputs_1 = inputs; _i < inputs_1.length; _i++) {
+ var input = inputs_1[_i];
+ parseResource(input, '', nextStore, calendar);
+ }
+ return nextStore;
+ }
+ else {
+ return existingStore;
+ }
+ }
+ function addResource(existingStore, additions) {
+ // TODO: warn about duplicate IDs
+ return __assign({}, existingStore, additions);
+ }
+ function removeResource(existingStore, resourceId) {
+ var newStore = __assign({}, existingStore);
+ delete newStore[resourceId];
+ // promote children
+ for (var childResourceId in newStore) { // a child, *maybe* but probably not
+ if (newStore[childResourceId].parentId === resourceId) {
+ newStore[childResourceId] = __assign({}, newStore[childResourceId], { parentId: '' });
+ }
+ }
+ return newStore;
+ }
+ function setResourceProp(existingStore, resourceId, name, value) {
+ var _a, _b;
+ var existingResource = existingStore[resourceId];
+ // TODO: sanitization
+ if (existingResource) {
+ return __assign({}, existingStore, (_a = {}, _a[resourceId] = __assign({}, existingResource, (_b = {}, _b[name] = value, _b)), _a));
+ }
+ else {
+ return existingStore;
+ }
+ }
+
+ function reduceResourceEntityExpansions(expansions, action) {
+ var _a;
+ switch (action.type) {
+ case 'INIT':
+ return {};
+ case 'SET_RESOURCE_ENTITY_EXPANDED':
+ return __assign({}, expansions, (_a = {}, _a[action.id] = action.isExpanded, _a));
+ default:
+ return expansions;
+ }
+ }
+
+ function resourcesReducers (state, action, calendar) {
+ var resourceSource = reduceResourceSource(state.resourceSource, action, state.dateProfile, calendar);
+ var resourceStore = reduceResourceStore(state.resourceStore, action, resourceSource, calendar);
+ var resourceEntityExpansions = reduceResourceEntityExpansions(state.resourceEntityExpansions, action);
+ return __assign({}, state, { resourceSource: resourceSource,
+ resourceStore: resourceStore,
+ resourceEntityExpansions: resourceEntityExpansions });
+ }
+
+ var RESOURCE_RELATED_PROPS = {
+ resourceId: String,
+ resourceIds: function (items) {
+ return (items || []).map(function (item) {
+ return String(item);
+ });
+ },
+ resourceEditable: Boolean
+ };
+ function parseEventDef(def, props, leftovers) {
+ var resourceRelatedProps = core.refineProps(props, RESOURCE_RELATED_PROPS, {}, leftovers);
+ var resourceIds = resourceRelatedProps.resourceIds;
+ if (resourceRelatedProps.resourceId) {
+ resourceIds.push(resourceRelatedProps.resourceId);
+ }
+ def.resourceIds = resourceIds;
+ def.resourceEditable = resourceRelatedProps.resourceEditable;
+ }
+
+ function massageEventDragMutation(eventMutation, hit0, hit1) {
+ var resource0 = hit0.dateSpan.resourceId;
+ var resource1 = hit1.dateSpan.resourceId;
+ if (resource0 && resource1 &&
+ resource0 !== resource1) {
+ eventMutation.resourceMutation = {
+ matchResourceId: resource0,
+ setResourceId: resource1
+ };
+ }
+ }
+ /*
+ TODO: all this would be much easier if we were using a hash!
+ */
+ function applyEventDefMutation(eventDef, mutation, calendar) {
+ var resourceMutation = mutation.resourceMutation;
+ if (resourceMutation && computeResourceEditable(eventDef, calendar)) {
+ var index = eventDef.resourceIds.indexOf(resourceMutation.matchResourceId);
+ if (index !== -1) {
+ var resourceIds = eventDef.resourceIds.slice(); // copy
+ resourceIds.splice(index, 1); // remove
+ if (resourceIds.indexOf(resourceMutation.setResourceId) === -1) { // not already in there
+ resourceIds.push(resourceMutation.setResourceId); // add
+ }
+ eventDef.resourceIds = resourceIds;
+ }
+ }
+ }
+ /*
+ HACK
+ TODO: use EventUi system instead of this
+ */
+ function computeResourceEditable(eventDef, calendar) {
+ var resourceEditable = eventDef.resourceEditable;
+ if (resourceEditable == null) {
+ var source = eventDef.sourceId && calendar.state.eventSources[eventDef.sourceId];
+ if (source) {
+ resourceEditable = source.extendedProps.resourceEditable; // used the Source::extendedProps hack
+ }
+ if (resourceEditable == null) {
+ resourceEditable = calendar.opt('eventResourceEditable');
+ if (resourceEditable == null) {
+ resourceEditable = calendar.opt('editable'); // TODO: use defaults system instead
+ }
+ }
+ }
+ return resourceEditable;
+ }
+ function transformEventDrop(mutation, calendar) {
+ var resourceMutation = mutation.resourceMutation;
+ if (resourceMutation) {
+ return {
+ oldResource: calendar.getResourceById(resourceMutation.matchResourceId),
+ newResource: calendar.getResourceById(resourceMutation.setResourceId)
+ };
+ }
+ else {
+ return {
+ oldResource: null,
+ newResource: null
+ };
+ }
+ }
+
+ function transformDateSelectionJoin(hit0, hit1) {
+ var resourceId0 = hit0.dateSpan.resourceId;
+ var resourceId1 = hit1.dateSpan.resourceId;
+ if (resourceId0 && resourceId1) {
+ if (hit0.component.allowAcrossResources === false &&
+ resourceId0 !== resourceId1) {
+ return false;
+ }
+ else {
+ return { resourceId: resourceId0 };
+ }
+ }
+ }
+
+ var ResourceApi = /** @class */ (function () {
+ function ResourceApi(calendar, rawResource) {
+ this._calendar = calendar;
+ this._resource = rawResource;
+ }
+ ResourceApi.prototype.setProp = function (name, value) {
+ this._calendar.dispatch({
+ type: 'SET_RESOURCE_PROP',
+ resourceId: this._resource.id,
+ propName: name,
+ propValue: value
+ });
+ };
+ ResourceApi.prototype.remove = function () {
+ this._calendar.dispatch({
+ type: 'REMOVE_RESOURCE',
+ resourceId: this._resource.id
+ });
+ };
+ ResourceApi.prototype.getParent = function () {
+ var calendar = this._calendar;
+ var parentId = this._resource.parentId;
+ if (parentId) {
+ return new ResourceApi(calendar, calendar.state.resourceSource[parentId]);
+ }
+ else {
+ return null;
+ }
+ };
+ ResourceApi.prototype.getChildren = function () {
+ var thisResourceId = this._resource.id;
+ var calendar = this._calendar;
+ var resourceStore = calendar.state.resourceStore;
+ var childApis = [];
+ for (var resourceId in resourceStore) {
+ if (resourceStore[resourceId].parentId === thisResourceId) {
+ childApis.push(new ResourceApi(calendar, resourceStore[resourceId]));
+ }
+ }
+ return childApis;
+ };
+ /*
+ this is really inefficient!
+ TODO: make EventApi::resourceIds a hash or keep an index in the Calendar's state
+ */
+ ResourceApi.prototype.getEvents = function () {
+ var thisResourceId = this._resource.id;
+ var calendar = this._calendar;
+ var _a = calendar.state.eventStore, defs = _a.defs, instances = _a.instances;
+ var eventApis = [];
+ for (var instanceId in instances) {
+ var instance = instances[instanceId];
+ var def = defs[instance.defId];
+ if (def.resourceIds.indexOf(thisResourceId) !== -1) { // inefficient!!!
+ eventApis.push(new core.EventApi(calendar, def, instance));
+ }
+ }
+ return eventApis;
+ };
+ Object.defineProperty(ResourceApi.prototype, "id", {
+ get: function () { return this._resource.id; },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(ResourceApi.prototype, "title", {
+ get: function () { return this._resource.title; },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(ResourceApi.prototype, "eventConstraint", {
+ get: function () { return this._resource.ui.constraints[0] || null; },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(ResourceApi.prototype, "eventOverlap", {
+ get: function () { return this._resource.ui.overlap; },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(ResourceApi.prototype, "eventAllow", {
+ get: function () { return this._resource.ui.allows[0] || null; },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(ResourceApi.prototype, "eventBackgroundColor", {
+ get: function () { return this._resource.ui.backgroundColor; },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(ResourceApi.prototype, "eventBorderColor", {
+ get: function () { return this._resource.ui.borderColor; },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(ResourceApi.prototype, "eventTextColor", {
+ get: function () { return this._resource.ui.textColor; },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(ResourceApi.prototype, "eventClassNames", {
+ // NOTE: user can't modify these because Object.freeze was called in event-def parsing
+ get: function () { return this._resource.ui.classNames; },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(ResourceApi.prototype, "extendedProps", {
+ get: function () { return this._resource.extendedProps; },
+ enumerable: true,
+ configurable: true
+ });
+ return ResourceApi;
+ }());
+
+ core.Calendar.prototype.addResource = function (input, scrollTo) {
+ var _a;
+ if (scrollTo === void 0) { scrollTo = true; }
+ var resourceHash;
+ var resource;
+ if (input instanceof ResourceApi) {
+ resource = input._resource;
+ resourceHash = (_a = {}, _a[resource.id] = resource, _a);
+ }
+ else {
+ resourceHash = {};
+ resource = parseResource(input, '', resourceHash, this);
+ }
+ // HACK
+ if (scrollTo) {
+ this.component.view.addScroll({ forcedRowId: resource.id });
+ }
+ this.dispatch({
+ type: 'ADD_RESOURCE',
+ resourceHash: resourceHash
+ });
+ return new ResourceApi(this, resource);
+ };
+ core.Calendar.prototype.getResourceById = function (id) {
+ id = String(id);
+ if (this.state.resourceStore) { // guard against calendar with no resource functionality
+ var rawResource = this.state.resourceStore[id];
+ if (rawResource) {
+ return new ResourceApi(this, rawResource);
+ }
+ }
+ return null;
+ };
+ core.Calendar.prototype.getResources = function () {
+ var resourceStore = this.state.resourceStore;
+ var resourceApis = [];
+ if (resourceStore) { // guard against calendar with no resource functionality
+ for (var resourceId in resourceStore) {
+ resourceApis.push(new ResourceApi(this, resourceStore[resourceId]));
+ }
+ }
+ return resourceApis;
+ };
+ core.Calendar.prototype.getTopLevelResources = function () {
+ var resourceStore = this.state.resourceStore;
+ var resourceApis = [];
+ if (resourceStore) { // guard against calendar with no resource functionality
+ for (var resourceId in resourceStore) {
+ if (!resourceStore[resourceId].parentId) {
+ resourceApis.push(new ResourceApi(this, resourceStore[resourceId]));
+ }
+ }
+ }
+ return resourceApis;
+ };
+ core.Calendar.prototype.rerenderResources = function () {
+ this.dispatch({
+ type: 'RESET_RESOURCES'
+ });
+ };
+ core.Calendar.prototype.refetchResources = function () {
+ this.dispatch({
+ type: 'REFETCH_RESOURCES'
+ });
+ };
+ function transformDatePoint(dateSpan, calendar) {
+ return dateSpan.resourceId ?
+ { resource: calendar.getResourceById(dateSpan.resourceId) } :
+ {};
+ }
+ function transformDateSpan(dateSpan, calendar) {
+ return dateSpan.resourceId ?
+ { resource: calendar.getResourceById(dateSpan.resourceId) } :
+ {};
+ }
+
+ /*
+ splits things BASED OFF OF which resources they are associated with.
+ creates a '' entry which is when something has NO resource.
+ */
+ var ResourceSplitter = /** @class */ (function (_super) {
+ __extends(ResourceSplitter, _super);
+ function ResourceSplitter() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ ResourceSplitter.prototype.getKeyInfo = function (props) {
+ return __assign({ '': {} }, props.resourceStore // already has `ui` and `businessHours` keys!
+ );
+ };
+ ResourceSplitter.prototype.getKeysForDateSpan = function (dateSpan) {
+ return [dateSpan.resourceId || ''];
+ };
+ ResourceSplitter.prototype.getKeysForEventDef = function (eventDef) {
+ var resourceIds = eventDef.resourceIds;
+ if (!resourceIds.length) {
+ return [''];
+ }
+ return resourceIds;
+ };
+ return ResourceSplitter;
+ }(core.Splitter));
+
+ function isPropsValidWithResources(props, calendar) {
+ var splitter = new ResourceSplitter();
+ var sets = splitter.splitProps(__assign({}, props, { resourceStore: calendar.state.resourceStore }));
+ for (var resourceId in sets) {
+ var props_1 = sets[resourceId];
+ // merge in event data from the non-resource segment
+ if (resourceId && sets['']) { // current segment is not the non-resource one, and there IS a non-resource one
+ props_1 = __assign({}, props_1, { eventStore: core.mergeEventStores(sets[''].eventStore, props_1.eventStore), eventUiBases: __assign({}, sets[''].eventUiBases, props_1.eventUiBases) });
+ }
+ if (!core.isPropsValid(props_1, calendar, { resourceId: resourceId }, filterConfig.bind(null, resourceId))) {
+ return false;
+ }
+ }
+ return true;
+ }
+ function filterConfig(resourceId, config) {
+ return __assign({}, config, { constraints: filterConstraints(resourceId, config.constraints) });
+ }
+ function filterConstraints(resourceId, constraints) {
+ return constraints.map(function (constraint) {
+ var defs = constraint.defs;
+ if (defs) { // we are dealing with an EventStore
+ // if any of the events define constraints to resources that are NOT this resource,
+ // then this resource is unconditionally prohibited, which is what a `false` value does.
+ for (var defId in defs) {
+ var resourceIds = defs[defId].resourceIds;
+ if (resourceIds.length && resourceIds.indexOf(resourceId) === -1) { // TODO: use a hash?!!! (for other reasons too)
+ return false;
+ }
+ }
+ }
+ return constraint;
+ });
+ }
+
+ function transformExternalDef(dateSpan) {
+ return dateSpan.resourceId ?
+ { resourceId: dateSpan.resourceId } :
+ {};
+ }
+
+ function transformEventResizeJoin(hit0, hit1) {
+ var component = hit0.component;
+ if (component.allowAcrossResources === false &&
+ hit0.dateSpan.resourceId !== hit1.dateSpan.resourceId) {
+ return false;
+ }
+ }
+
+ core.EventApi.prototype.getResources = function () {
+ var calendar = this._calendar;
+ return this._def.resourceIds.map(function (resourceId) {
+ return calendar.getResourceById(resourceId);
+ });
+ };
+ core.EventApi.prototype.setResources = function (resources) {
+ var resourceIds = [];
+ // massage resources -> resourceIds
+ for (var _i = 0, resources_1 = resources; _i < resources_1.length; _i++) {
+ var resource = resources_1[_i];
+ var resourceId = null;
+ if (typeof resource === 'string') {
+ resourceId = resource;
+ }
+ else if (typeof resource === 'number') {
+ resourceId = String(resource);
+ }
+ else if (resource instanceof ResourceApi) {
+ resourceId = resource.id; // guaranteed to always have an ID. hmmm
+ }
+ else {
+ console.warn('unknown resource type: ' + resource);
+ }
+ if (resourceId) {
+ resourceIds.push(resourceId);
+ }
+ }
+ this.mutate({
+ standardProps: {
+ resourceIds: resourceIds
+ }
+ });
+ };
+
+ var RELEASE_DATE = '2019-04-24'; // for Scheduler
+ var UPGRADE_WINDOW = 365 + 7; // days. 1 week leeway, for tz shift reasons too
+ var LICENSE_INFO_URL = 'http://fullcalendar.io/scheduler/license/';
+ var PRESET_LICENSE_KEYS = [
+ 'GPL-My-Project-Is-Open-Source',
+ 'CC-Attribution-NonCommercial-NoDerivatives'
+ ];
+ var CSS = {
+ position: 'absolute',
+ 'z-index': 99999,
+ bottom: '1px',
+ left: '1px',
+ background: '#eee',
+ 'border-color': '#ddd',
+ 'border-style': 'solid',
+ 'border-width': '1px 1px 0 0',
+ padding: '2px 4px',
+ 'font-size': '12px',
+ 'border-top-right-radius': '3px'
+ };
+ function injectLicenseWarning(containerEl, calendar) {
+ var key = calendar.opt('schedulerLicenseKey');
+ if (!isImmuneUrl(window.location.href) && !isValidKey(key)) {
+ core.appendToElement(containerEl, '<div class="fc-license-message" style="' + core.htmlEscape(core.cssToStr(CSS)) + '">' +
+ 'Please use a valid license key. <a href="' + LICENSE_INFO_URL + '">More Info</a>' +
+ '</div>');
+ }
+ }
+ /*
+ This decryption is not meant to be bulletproof. Just a way to remind about an upgrade.
+ */
+ function isValidKey(key) {
+ if (PRESET_LICENSE_KEYS.indexOf(key) !== -1) {
+ return true;
+ }
+ var parts = (key || '').match(/^(\d+)\-fcs\-(\d+)$/);
+ if (parts && (parts[1].length === 10)) {
+ var purchaseDate = new Date(parseInt(parts[2], 10) * 1000);
+ var releaseDate = new Date(core.config.mockSchedulerReleaseDate || RELEASE_DATE);
+ if (core.isValidDate(releaseDate)) { // token won't be replaced in dev mode
+ var minPurchaseDate = core.addDays(releaseDate, -UPGRADE_WINDOW);
+ if (minPurchaseDate < purchaseDate) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+ function isImmuneUrl(url) {
+ return /\w+\:\/\/fullcalendar\.io\/|\/demos\/[\w-]+\.html$/.test(url);
+ }
+
+ var optionChangeHandlers = {
+ resources: handleResources
+ };
+ function handleResources(newSourceInput, calendar) {
+ var oldSourceInput = calendar.state.resourceSource._raw;
+ if (!core.isValuesSimilar(oldSourceInput, newSourceInput, 2)) {
+ calendar.dispatch({
+ type: 'RESET_RESOURCE_SOURCE',
+ resourceSourceInput: newSourceInput
+ });
+ }
+ }
+
+ registerResourceSourceDef({
+ ignoreRange: true,
+ parseMeta: function (raw) {
+ if (Array.isArray(raw)) {
+ return raw;
+ }
+ else if (Array.isArray(raw.resources)) {
+ return raw.resources;
+ }
+ return null;
+ },
+ fetch: function (arg, successCallback) {
+ successCallback({
+ rawResources: arg.resourceSource.meta
+ });
+ }
+ });
+
+ registerResourceSourceDef({
+ parseMeta: function (raw) {
+ if (typeof raw === 'function') {
+ return raw;
+ }
+ else if (typeof raw.resources === 'function') {
+ return raw.resources;
+ }
+ return null;
+ },
+ fetch: function (arg, success, failure) {
+ var dateEnv = arg.calendar.dateEnv;
+ var func = arg.resourceSource.meta;
+ var publicArg = {};
+ if (arg.range) {
+ publicArg = {
+ 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
+ };
+ }
+ // TODO: make more dry with EventSourceFunc
+ // TODO: accept a response?
+ core.unpromisify(func.bind(null, publicArg), function (rawResources) {
+ success({ rawResources: rawResources }); // needs an object response
+ }, failure // send errorObj directly to failure callback
+ );
+ }
+ });
+
+ registerResourceSourceDef({
+ parseMeta: function (raw) {
+ if (typeof raw === 'string') {
+ 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
+ };
+ },
+ fetch: function (arg, successCallback, failureCallback) {
+ var meta = arg.resourceSource.meta;
+ var requestParams = buildRequestParams(meta, arg.range, arg.calendar);
+ core.requestJson(meta.method, meta.url, requestParams, function (rawResources, xhr) {
+ successCallback({ rawResources: rawResources, xhr: xhr });
+ }, function (message, xhr) {
+ failureCallback({ message: message, xhr: xhr });
+ });
+ }
+ });
+ // TODO: somehow consolidate with event json feed
+ function buildRequestParams(meta, range, calendar) {
+ var dateEnv = calendar.dateEnv;
+ var startParam;
+ var endParam;
+ var timeZoneParam;
+ var customRequestParams;
+ var params = {};
+ if (range) {
+ // 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');
+ // }
+ params[startParam] = dateEnv.formatIso(range.start);
+ params[endParam] = dateEnv.formatIso(range.end);
+ if (dateEnv.timeZone !== 'local') {
+ params[timeZoneParam] = dateEnv.timeZone;
+ }
+ }
+ // 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);
+ return params;
+ }
+
+ function buildResourceTextFunc(resourceTextSetting, calendar) {
+ if (typeof resourceTextSetting === 'function') {
+ return function (resource) {
+ return resourceTextSetting(new ResourceApi(calendar, resource));
+ };
+ }
+ else {
+ return function (resource) {
+ return resource.title || getPublicId(resource.id);
+ };
+ }
+ }
+
+ var ResourceDayHeader = /** @class */ (function (_super) {
+ __extends(ResourceDayHeader, _super);
+ function ResourceDayHeader(context, parentEl) {
+ var _this = _super.call(this, context) || this;
+ _this.datesAboveResources = _this.opt('datesAboveResources');
+ _this.resourceTextFunc = buildResourceTextFunc(_this.opt('resourceText'), _this.calendar);
+ parentEl.innerHTML = ''; // because might be nbsp
+ parentEl.appendChild(_this.el = core.htmlToElement('<div class="fc-row ' + _this.theme.getClass('headerRow') + '">' +
+ '<table class="' + _this.theme.getClass('tableGrid') + '">' +
+ '<thead></thead>' +
+ '</table>' +
+ '</div>'));
+ _this.thead = _this.el.querySelector('thead');
+ return _this;
+ }
+ ResourceDayHeader.prototype.destroy = function () {
+ core.removeElement(this.el);
+ };
+ ResourceDayHeader.prototype.render = function (props) {
+ var html;
+ this.dateFormat = core.createFormatter(this.opt('columnHeaderFormat') ||
+ core.computeFallbackHeaderFormat(props.datesRepDistinctDays, props.dates.length));
+ if (props.dates.length === 1) {
+ html = this.renderResourceRow(props.resources);
+ }
+ else {
+ if (this.datesAboveResources) {
+ html = this.renderDayAndResourceRows(props.dates, props.resources);
+ }
+ else {
+ html = this.renderResourceAndDayRows(props.resources, props.dates);
+ }
+ }
+ this.thead.innerHTML = html;
+ this.processResourceEls(props.resources);
+ };
+ ResourceDayHeader.prototype.renderResourceRow = function (resources) {
+ var _this = this;
+ var cellHtmls = resources.map(function (resource) {
+ return _this.renderResourceCell(resource, 1);
+ });
+ return this.buildTr(cellHtmls);
+ };
+ ResourceDayHeader.prototype.renderDayAndResourceRows = function (dates, resources) {
+ var dateHtmls = [];
+ var resourceHtmls = [];
+ for (var _i = 0, dates_1 = dates; _i < dates_1.length; _i++) {
+ var date = dates_1[_i];
+ dateHtmls.push(this.renderDateCell(date, resources.length));
+ for (var _a = 0, resources_1 = resources; _a < resources_1.length; _a++) {
+ var resource = resources_1[_a];
+ resourceHtmls.push(this.renderResourceCell(resource, 1, date));
+ }
+ }
+ return this.buildTr(dateHtmls) +
+ this.buildTr(resourceHtmls);
+ };
+ ResourceDayHeader.prototype.renderResourceAndDayRows = function (resources, dates) {
+ var resourceHtmls = [];
+ var dateHtmls = [];
+ for (var _i = 0, resources_2 = resources; _i < resources_2.length; _i++) {
+ var resource = resources_2[_i];
+ resourceHtmls.push(this.renderResourceCell(resource, dates.length));
+ for (var _a = 0, dates_2 = dates; _a < dates_2.length; _a++) {
+ var date = dates_2[_a];
+ dateHtmls.push(this.renderDateCell(date, 1, resource));
+ }
+ }
+ return this.buildTr(resourceHtmls) +
+ this.buildTr(dateHtmls);
+ };
+ // Cell Rendering Utils
+ // ----------------------------------------------------------------------------------------------
+ // a cell with the resource name. might be associated with a specific day
+ ResourceDayHeader.prototype.renderResourceCell = function (resource, colspan, date) {
+ var dateEnv = this.dateEnv;
+ return '<th class="fc-resource-cell"' +
+ ' data-resource-id="' + resource.id + '"' +
+ (date ?
+ ' data-date="' + dateEnv.formatIso(date, { omitTime: true }) + '"' :
+ '') +
+ (colspan > 1 ?
+ ' colspan="' + colspan + '"' :
+ '') +
+ '>' +
+ core.htmlEscape(this.resourceTextFunc(resource)) +
+ '</th>';
+ };
+ // a cell with date text. might have a resource associated with it
+ ResourceDayHeader.prototype.renderDateCell = function (date, colspan, resource) {
+ var props = this.props;
+ return core.renderDateCell(date, props.dateProfile, props.datesRepDistinctDays, props.dates.length * props.resources.length, this.dateFormat, this.context, colspan, resource ? 'data-resource-id="' + resource.id + '"' : '');
+ };
+ ResourceDayHeader.prototype.buildTr = function (cellHtmls) {
+ if (!cellHtmls.length) {
+ cellHtmls = ['<td> </td>'];
+ }
+ if (this.props.renderIntroHtml) {
+ cellHtmls = [this.props.renderIntroHtml()].concat(cellHtmls);
+ }
+ if (this.isRtl) {
+ cellHtmls.reverse();
+ }
+ return '<tr>' +
+ cellHtmls.join('') +
+ '</tr>';
+ };
+ // Post-rendering
+ // ----------------------------------------------------------------------------------------------
+ // given a container with already rendered resource cells
+ ResourceDayHeader.prototype.processResourceEls = function (resources) {
+ var _this = this;
+ var view = this.view;
+ core.findElements(this.thead, '.fc-resource-cell').forEach(function (node, col) {
+ col = col % resources.length;
+ if (_this.isRtl) {
+ col = resources.length - 1 - col;
+ }
+ var resource = resources[col];
+ view.publiclyTrigger('resourceRender', [
+ {
+ resource: new ResourceApi(_this.calendar, resource),
+ el: node,
+ view: view
+ }
+ ]);
+ });
+ };
+ return ResourceDayHeader;
+ }(core.Component));
+
+ var AbstractResourceDayTable = /** @class */ (function () {
+ function AbstractResourceDayTable(dayTable, resources) {
+ this.dayTable = dayTable;
+ this.resources = resources;
+ this.resourceIndex = new ResourceIndex(resources);
+ this.rowCnt = dayTable.rowCnt;
+ this.colCnt = dayTable.colCnt * resources.length;
+ this.cells = this.buildCells();
+ }
+ AbstractResourceDayTable.prototype.buildCells = function () {
+ var _a = this, rowCnt = _a.rowCnt, dayTable = _a.dayTable, resources = _a.resources;
+ var rows = [];
+ for (var row = 0; row < rowCnt; row++) {
+ var rowCells = [];
+ for (var dateCol = 0; dateCol < dayTable.colCnt; dateCol++) {
+ for (var resourceCol = 0; resourceCol < resources.length; resourceCol++) {
+ var resource = resources[resourceCol];
+ var htmlAttrs = 'data-resource-id="' + resource.id + '"';
+ rowCells[this.computeCol(dateCol, resourceCol)] = {
+ date: dayTable.cells[row][dateCol].date,
+ resource: resource,
+ htmlAttrs: htmlAttrs
+ };
+ }
+ }
+ rows.push(rowCells);
+ }
+ return rows;
+ };
+ return AbstractResourceDayTable;
+ }());
+ /*
+ resources over dates
+ */
+ var ResourceDayTable = /** @class */ (function (_super) {
+ __extends(ResourceDayTable, _super);
+ function ResourceDayTable() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ ResourceDayTable.prototype.computeCol = function (dateI, resourceI) {
+ return resourceI * this.dayTable.colCnt + dateI;
+ };
+ /*
+ all date ranges are intact
+ */
+ ResourceDayTable.prototype.computeColRanges = function (dateStartI, dateEndI, resourceI) {
+ return [
+ {
+ firstCol: this.computeCol(dateStartI, resourceI),
+ lastCol: this.computeCol(dateEndI, resourceI),
+ isStart: true,
+ isEnd: true
+ }
+ ];
+ };
+ return ResourceDayTable;
+ }(AbstractResourceDayTable));
+ /*
+ dates over resources
+ */
+ var DayResourceTable = /** @class */ (function (_super) {
+ __extends(DayResourceTable, _super);
+ function DayResourceTable() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ DayResourceTable.prototype.computeCol = function (dateI, resourceI) {
+ return dateI * this.resources.length + resourceI;
+ };
+ /*
+ every single day is broken up
+ */
+ DayResourceTable.prototype.computeColRanges = function (dateStartI, dateEndI, resourceI) {
+ var segs = [];
+ for (var i = dateStartI; i <= dateEndI; i++) {
+ var col = this.computeCol(i, resourceI);
+ segs.push({
+ firstCol: col,
+ lastCol: col,
+ isStart: i === dateStartI,
+ isEnd: i === dateEndI
+ });
+ }
+ return segs;
+ };
+ return DayResourceTable;
+ }(AbstractResourceDayTable));
+ var ResourceIndex = /** @class */ (function () {
+ function ResourceIndex(resources) {
+ var indicesById = {};
+ var ids = [];
+ for (var i = 0; i < resources.length; i++) {
+ var id = resources[i].id;
+ ids.push(id);
+ indicesById[id] = i;
+ }
+ this.ids = ids;
+ this.indicesById = indicesById;
+ this.length = resources.length;
+ }
+ return ResourceIndex;
+ }());
+ /*
+ TODO: just use ResourceHash somehow? could then use the generic ResourceSplitter
+ */
+ var VResourceSplitter = /** @class */ (function (_super) {
+ __extends(VResourceSplitter, _super);
+ function VResourceSplitter() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ VResourceSplitter.prototype.getKeyInfo = function (props) {
+ var resourceDayTable = props.resourceDayTable;
+ var hash = core.mapHash(resourceDayTable.resourceIndex.indicesById, function (i) {
+ return resourceDayTable.resources[i]; // has `ui` AND `businessHours` keys!
+ }); // :(
+ hash[''] = {};
+ return hash;
+ };
+ VResourceSplitter.prototype.getKeysForDateSpan = function (dateSpan) {
+ return [dateSpan.resourceId || ''];
+ };
+ VResourceSplitter.prototype.getKeysForEventDef = function (eventDef) {
+ var resourceIds = eventDef.resourceIds;
+ if (!resourceIds.length) {
+ return [''];
+ }
+ return resourceIds;
+ };
+ return VResourceSplitter;
+ }(core.Splitter));
+ // joiner
+ var NO_SEGS = []; // for memoizing
+ var VResourceJoiner = /** @class */ (function () {
+ function VResourceJoiner() {
+ this.joinDateSelection = core.memoize(this.joinSegs);
+ this.joinBusinessHours = core.memoize(this.joinSegs);
+ this.joinFgEvents = core.memoize(this.joinSegs);
+ this.joinBgEvents = core.memoize(this.joinSegs);
+ this.joinEventDrags = core.memoize(this.joinInteractions);
+ this.joinEventResizes = core.memoize(this.joinInteractions);
+ }
+ /*
+ propSets also has a '' key for things with no resource
+ */
+ VResourceJoiner.prototype.joinProps = function (propSets, resourceDayTable) {
+ var dateSelectionSets = [];
+ var businessHoursSets = [];
+ var fgEventSets = [];
+ var bgEventSets = [];
+ var eventDrags = [];
+ var eventResizes = [];
+ var eventSelection = '';
+ var keys = resourceDayTable.resourceIndex.ids.concat(['']); // add in the all-resource key
+ for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
+ var key = keys_1[_i];
+ var props = propSets[key];
+ dateSelectionSets.push(props.dateSelectionSegs);
+ businessHoursSets.push(key ? props.businessHourSegs : NO_SEGS); // don't include redundant all-resource businesshours
+ fgEventSets.push(key ? props.fgEventSegs : NO_SEGS); // don't include fg all-resource segs
+ bgEventSets.push(props.bgEventSegs);
+ eventDrags.push(props.eventDrag);
+ eventResizes.push(props.eventResize);
+ eventSelection = eventSelection || props.eventSelection;
+ }
+ return {
+ dateSelectionSegs: this.joinDateSelection.apply(this, [resourceDayTable].concat(dateSelectionSets)),
+ businessHourSegs: this.joinBusinessHours.apply(this, [resourceDayTable].concat(businessHoursSets)),
+ fgEventSegs: this.joinFgEvents.apply(this, [resourceDayTable].concat(fgEventSets)),
+ bgEventSegs: this.joinBgEvents.apply(this, [resourceDayTable].concat(bgEventSets)),
+ eventDrag: this.joinEventDrags.apply(this, [resourceDayTable].concat(eventDrags)),
+ eventResize: this.joinEventResizes.apply(this, [resourceDayTable].concat(eventResizes)),
+ eventSelection: eventSelection
+ };
+ };
+ VResourceJoiner.prototype.joinSegs = function (resourceDayTable) {
+ var segGroups = [];
+ for (var _i = 1; _i < arguments.length; _i++) {
+ segGroups[_i - 1] = arguments[_i];
+ }
+ var resourceCnt = resourceDayTable.resources.length;
+ var transformedSegs = [];
+ for (var i = 0; i < resourceCnt; i++) {
+ for (var _a = 0, _b = segGroups[i]; _a < _b.length; _a++) {
+ var seg = _b[_a];
+ transformedSegs.push.apply(transformedSegs, this.transformSeg(seg, resourceDayTable, i));
+ }
+ for (var _c = 0, _d = segGroups[resourceCnt]; _c < _d.length; _c++) { // one beyond. the all-resource
+ var seg = _d[_c];
+ transformedSegs.push.apply(// one beyond. the all-resource
+ transformedSegs, this.transformSeg(seg, resourceDayTable, i));
+ }
+ }
+ return transformedSegs;
+ };
+ /*
+ for expanding non-resource segs to all resources.
+ only for public use.
+ no memoizing.
+ */
+ VResourceJoiner.prototype.expandSegs = function (resourceDayTable, segs) {
+ var resourceCnt = resourceDayTable.resources.length;
+ var transformedSegs = [];
+ for (var i = 0; i < resourceCnt; i++) {
+ for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
+ var seg = segs_1[_i];
+ transformedSegs.push.apply(transformedSegs, this.transformSeg(seg, resourceDayTable, i));
+ }
+ }
+ return transformedSegs;
+ };
+ VResourceJoiner.prototype.joinInteractions = function (resourceDayTable) {
+ var interactions = [];
+ for (var _i = 1; _i < arguments.length; _i++) {
+ interactions[_i - 1] = arguments[_i];
+ }
+ var resourceCnt = resourceDayTable.resources.length;
+ var affectedInstances = {};
+ var transformedSegs = [];
+ var isEvent = false;
+ var sourceSeg = null;
+ for (var i = 0; i < resourceCnt; i++) {
+ var interaction = interactions[i];
+ if (interaction) {
+ for (var _a = 0, _b = interaction.segs; _a < _b.length; _a++) {
+ var seg = _b[_a];
+ transformedSegs.push.apply(transformedSegs, this.transformSeg(seg, resourceDayTable, i) // TODO: templateify Interaction::segs
+ );
+ }
+ __assign(affectedInstances, interaction.affectedInstances);
+ isEvent = isEvent || interaction.isEvent;
+ sourceSeg = sourceSeg || interaction.sourceSeg;
+ }
+ if (interactions[resourceCnt]) { // one beyond. the all-resource
+ for (var _c = 0, _d = interactions[resourceCnt].segs; _c < _d.length; _c++) {
+ var seg = _d[_c];
+ transformedSegs.push.apply(transformedSegs, this.transformSeg(seg, resourceDayTable, i) // TODO: templateify Interaction::segs
+ );
+ }
+ }
+ }
+ return {
+ affectedInstances: affectedInstances,
+ segs: transformedSegs,
+ isEvent: isEvent,
+ sourceSeg: sourceSeg
+ };
+ };
+ return VResourceJoiner;
+ }());
+
+ /*
+ doesn't accept grouping
+ */
+ function flattenResources(resourceStore, orderSpecs) {
+ return buildRowNodes(resourceStore, [], orderSpecs, false, {}, true)
+ .map(function (node) {
+ return node.resource;
+ });
+ }
+ function buildRowNodes(resourceStore, groupSpecs, orderSpecs, isVGrouping, expansions, expansionDefault) {
+ var complexNodes = buildHierarchy(resourceStore, isVGrouping ? -1 : 1, groupSpecs, orderSpecs);
+ var flatNodes = [];
+ flattenNodes(complexNodes, flatNodes, isVGrouping, [], 0, expansions, expansionDefault);
+ return flatNodes;
+ }
+ function flattenNodes(complexNodes, res, isVGrouping, rowSpans, depth, expansions, expansionDefault) {
+ for (var i = 0; i < complexNodes.length; i++) {
+ var complexNode = complexNodes[i];
+ var group = complexNode.group;
+ if (group) {
+ if (isVGrouping) {
+ var firstRowIndex = res.length;
+ var rowSpanIndex = rowSpans.length;
+ flattenNodes(complexNode.children, res, isVGrouping, rowSpans.concat(0), depth, expansions, expansionDefault);
+ if (firstRowIndex < res.length) {
+ var firstRow = res[firstRowIndex];
+ var firstRowSpans = firstRow.rowSpans = firstRow.rowSpans.slice();
+ firstRowSpans[rowSpanIndex] = res.length - firstRowIndex;
+ }
+ }
+ else {
+ var id = group.spec.field + ':' + group.value;
+ var isExpanded = expansions[id] != null ? expansions[id] : expansionDefault;
+ res.push({ id: id, group: group, isExpanded: isExpanded });
+ if (isExpanded) {
+ flattenNodes(complexNode.children, res, isVGrouping, rowSpans, depth + 1, expansions, expansionDefault);
+ }
+ }
+ }
+ else if (complexNode.resource) {
+ var id = complexNode.resource.id;
+ var isExpanded = expansions[id] != null ? expansions[id] : expansionDefault;
+ res.push({
+ id: id,
+ rowSpans: rowSpans,
+ depth: depth,
+ isExpanded: isExpanded,
+ hasChildren: Boolean(complexNode.children.length),
+ resource: complexNode.resource,
+ resourceFields: complexNode.resourceFields
+ });
+ if (isExpanded) {
+ flattenNodes(complexNode.children, res, isVGrouping, rowSpans, depth + 1, expansions, expansionDefault);
+ }
+ }
+ }
+ }
+ function buildHierarchy(resourceStore, maxDepth, groupSpecs, orderSpecs) {
+ var resourceNodes = buildResourceNodes(resourceStore, orderSpecs);
+ var builtNodes = [];
+ for (var resourceId in resourceNodes) {
+ var resourceNode = resourceNodes[resourceId];
+ if (!resourceNode.resource.parentId) {
+ insertResourceNode(resourceNode, builtNodes, groupSpecs, 0, maxDepth, orderSpecs);
+ }
+ }
+ return builtNodes;
+ }
+ function buildResourceNodes(resourceStore, orderSpecs) {
+ var nodeHash = {};
+ for (var resourceId in resourceStore) {
+ var resource = resourceStore[resourceId];
+ nodeHash[resourceId] = {
+ resource: resource,
+ resourceFields: buildResourceFields(resource),
+ children: []
+ };
+ }
+ for (var resourceId in resourceStore) {
+ var resource = resourceStore[resourceId];
+ if (resource.parentId) {
+ var parentNode = nodeHash[resource.parentId];
+ if (parentNode) {
+ insertResourceNodeInSiblings(nodeHash[resourceId], parentNode.children, orderSpecs);
+ }
+ }
+ }
+ return nodeHash;
+ }
+ function insertResourceNode(resourceNode, nodes, groupSpecs, depth, maxDepth, orderSpecs) {
+ if (groupSpecs.length && (maxDepth === -1 || depth <= maxDepth)) {
+ var groupNode = ensureGroupNodes(resourceNode, nodes, groupSpecs[0]);
+ insertResourceNode(resourceNode, groupNode.children, groupSpecs.slice(1), depth + 1, maxDepth, orderSpecs);
+ }
+ else {
+ insertResourceNodeInSiblings(resourceNode, nodes, orderSpecs);
+ }
+ }
+ function ensureGroupNodes(resourceNode, nodes, groupSpec) {
+ var groupValue = resourceNode.resourceFields[groupSpec.field];
+ var groupNode;
+ var newGroupIndex;
+ // find an existing group that matches, or determine the position for a new group
+ if (groupSpec.order) {
+ for (newGroupIndex = 0; newGroupIndex < nodes.length; newGroupIndex++) {
+ var node = nodes[newGroupIndex];
+ if (node.group) {
+ var cmp = core.flexibleCompare(groupValue, node.group.value) * groupSpec.order;
+ if (cmp === 0) {
+ groupNode = node;
+ break;
+ }
+ else if (cmp < 0) {
+ break;
+ }
+ }
+ }
+ }
+ else { // the groups are unordered
+ for (newGroupIndex = 0; newGroupIndex < nodes.length; newGroupIndex++) {
+ var node = nodes[newGroupIndex];
+ if (node.group && groupValue === node.group.value) {
+ groupNode = node;
+ break;
+ }
+ }
+ }
+ if (!groupNode) {
+ groupNode = {
+ group: {
+ value: groupValue,
+ spec: groupSpec
+ },
+ children: []
+ };
+ nodes.splice(newGroupIndex, 0, groupNode);
+ }
+ return groupNode;
+ }
+ function insertResourceNodeInSiblings(resourceNode, siblings, orderSpecs) {
+ var i;
+ for (i = 0; i < siblings.length; i++) {
+ var cmp = core.compareByFieldSpecs(siblings[i].resourceFields, resourceNode.resourceFields, orderSpecs);
+ if (cmp > 0) { // went 1 past. insert at i
+ break;
+ }
+ }
+ siblings.splice(i, 0, resourceNode);
+ }
+ function buildResourceFields(resource) {
+ var obj = __assign({}, resource.extendedProps, resource.ui, resource);
+ delete obj.ui;
+ delete obj.extendedProps;
+ return obj;
+ }
+ function isGroupsEqual(group0, group1) {
+ return group0.spec === group1.spec && group0.value === group1.value;
+ }
+
+ var main = core.createPlugin({
+ reducers: [resourcesReducers],
+ eventDefParsers: [parseEventDef],
+ eventDragMutationMassagers: [massageEventDragMutation],
+ eventDefMutationAppliers: [applyEventDefMutation],
+ dateSelectionTransformers: [transformDateSelectionJoin],
+ datePointTransforms: [transformDatePoint],
+ dateSpanTransforms: [transformDateSpan],
+ viewPropsTransformers: [ResourceDataAdder, ResourceEventConfigAdder],
+ isPropsValid: isPropsValidWithResources,
+ externalDefTransforms: [transformExternalDef],
+ eventResizeJoinTransforms: [transformEventResizeJoin],
+ viewContainerModifiers: [injectLicenseWarning],
+ eventDropTransformers: [transformEventDrop],
+ optionChangeHandlers: optionChangeHandlers
+ });
+
+ exports.AbstractResourceDayTable = AbstractResourceDayTable;
+ exports.DayResourceTable = DayResourceTable;
+ exports.ResourceApi = ResourceApi;
+ exports.ResourceDayHeader = ResourceDayHeader;
+ exports.ResourceDayTable = ResourceDayTable;
+ exports.ResourceSplitter = ResourceSplitter;
+ exports.VResourceJoiner = VResourceJoiner;
+ exports.VResourceSplitter = VResourceSplitter;
+ exports.buildResourceFields = buildResourceFields;
+ exports.buildResourceTextFunc = buildResourceTextFunc;
+ exports.buildRowNodes = buildRowNodes;
+ exports.computeResourceEditable = computeResourceEditable;
+ exports.default = main;
+ exports.flattenResources = flattenResources;
+ exports.isGroupsEqual = isGroupsEqual;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+}));
--- /dev/null
+/*!
+FullCalendar Resources Common Plugin v4.1.0
+Docs & License: https://fullcalendar.io/scheduler
+(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):(e=e||self,r(e.FullCalendarResourceCommon={},e.FullCalendar))}(this,function(e,r){"use strict";function t(e,r){function t(){this.constructor=e}oe(e,r),e.prototype=null===r?Object.create(r):(t.prototype=r.prototype,new t)}function n(e,t,n,i){if(t){var a=o(n.instances,i),c=s(a,n.defs);return se(c,u(c,e)),r.filterHash(e,function(e,r){return c[r]})}return e}function o(e,t){return r.filterHash(e,function(e){return r.rangesIntersect(e.range,t)})}function s(e,r){var t={};for(var n in e)for(var o=e[n],s=0,u=r[o.defId].resourceIds;s<u.length;s++){var i=u[s];t[i]=!0}return t}function u(e,r){var t={};for(var n in e)for(var o=void 0;(o=r[n])&&(n=o.parentId);)t[n]=!0;return t}function i(e){return r.mapHash(e,function(e){return e.ui})}function a(e,t,n){return r.mapHash(e,function(e,r){return r?c(e,t[r],n):e})}function c(e,t,n){for(var o=[],s=0,u=t.resourceIds;s<u.length;s++){var i=u[s];n[i]&&o.unshift(n[i])}return o.unshift(e),r.combineEventUis(o)}function l(e){ce.push(e)}function d(e){return ce[e]}function f(e){return Boolean(ce[e.sourceDefId].ignoreRange)}function p(e){for(var t=ce.length-1;t>=0;t--){var n=ce[t],o=n.parseMeta(e);if(o){var s=h("object"==typeof e&&e?e:{},o,t);return s._raw=r.freezeRaw(e),s}}return null}function h(e,t,n){var o=r.refineProps(e,ae);return o.sourceId=String(le++),o.sourceDefId=n,o.meta=t,o.publicId=o.id,o.isFetching=!1,o.latestFetchId="",o.fetchRange=null,delete o.id,o}function v(e,r,t,n){switch(r.type){case"INIT":return g(n.opt("resources"),n);case"RESET_RESOURCE_SOURCE":return g(r.resourceSourceInput,n,!0);case"PREV":case"NEXT":case"SET_DATE":case"SET_VIEW_TYPE":return R(e,t.activeRange,n);case"RECEIVE_RESOURCES":case"RECEIVE_RESOURCE_ERROR":return E(e,r.fetchId,r.fetchRange);case"REFETCH_RESOURCES":return y(e,t.activeRange,n);default:return e}}function g(e,r,t){if(e){var n=p(e);return!t&&r.opt("refetchResourcesOnNavigate")||(n=y(n,null,r)),n}return null}function R(e,t,n){return!n.opt("refetchResourcesOnNavigate")||f(e)||e.fetchRange&&r.rangesEqual(e.fetchRange,t)?e:y(e,t,n)}function y(e,r,t){var n=d(e.sourceDefId),o=String(de++);return n.fetch({resourceSource:e,calendar:t,range:r},function(e){t.afterSizingTriggers._resourcesRendered=[null],t.dispatch({type:"RECEIVE_RESOURCES",fetchId:o,fetchRange:r,rawResources:e.rawResources})},function(e){t.dispatch({type:"RECEIVE_RESOURCE_ERROR",fetchId:o,fetchRange:r,error:e})}),se({},e,{isFetching:!0,latestFetchId:o})}function E(e,r,t){return r===e.latestFetchId?se({},e,{isFetching:!1,fetchRange:t}):e}function m(e,t,n,o){void 0===t&&(t="");var s={},u=r.refineProps(e,fe,{},s),i={},a=r.processScopedUiProps("event",s,o,i);if(u.id||(u.id=pe+he++),u.parentId||(u.parentId=t),u.businessHours=u.businessHours?r.parseBusinessHours(u.businessHours,o):null,u.ui=a,u.extendedProps=se({},i,u.extendedProps),Object.freeze(a.classNames),Object.freeze(u.extendedProps),n[u.id]);else if(n[u.id]=u,u.children){for(var c=0,l=u.children;c<l.length;c++){var d=l[c];m(d,u.id,n,o)}delete u.children}return u}function S(e){return 0===e.indexOf(pe)?"":e}function I(e,t,n,o){switch(t.type){case"INIT":return{};case"RECEIVE_RESOURCES":return b(e,t.rawResources,t.fetchId,n,o);case"ADD_RESOURCE":return C(e,t.resourceHash);case"REMOVE_RESOURCE":return _(e,t.resourceId);case"SET_RESOURCE_PROP":return w(e,t.resourceId,t.propName,t.propValue);case"RESET_RESOURCES":return r.mapHash(e,function(e){return se({},e)});default:return e}}function b(e,r,t,n,o){if(n.latestFetchId===t){for(var s={},u=0,i=r;u<i.length;u++){var a=i[u];m(a,"",s,o)}return s}return e}function C(e,r){return se({},e,r)}function _(e,r){var t=se({},e);delete t[r];for(var n in t)t[n].parentId===r&&(t[n]=se({},t[n],{parentId:""}));return t}function w(e,r,t,n){var o,s,u=e[r];return u?se({},e,(o={},o[r]=se({},u,(s={},s[t]=n,s)),o)):e}function P(e,r){var t;switch(r.type){case"INIT":return{};case"SET_RESOURCE_ENTITY_EXPANDED":return se({},e,(t={},t[r.id]=r.isExpanded,t));default:return e}}function O(e,r,t){var n=v(e.resourceSource,r,e.dateProfile,t),o=I(e.resourceStore,r,n,t),s=P(e.resourceEntityExpansions,r);return se({},e,{resourceSource:n,resourceStore:o,resourceEntityExpansions:s})}function x(e,t,n){var o=r.refineProps(t,ve,{},n),s=o.resourceIds;o.resourceId&&s.push(o.resourceId),e.resourceIds=s,e.resourceEditable=o.resourceEditable}function T(e,r,t){var n=r.dateSpan.resourceId,o=t.dateSpan.resourceId;n&&o&&n!==o&&(e.resourceMutation={matchResourceId:n,setResourceId:o})}function D(e,r,t){var n=r.resourceMutation;if(n&&j(e,t)){var o=e.resourceIds.indexOf(n.matchResourceId);if(o!==-1){var s=e.resourceIds.slice();s.splice(o,1),s.indexOf(n.setResourceId)===-1&&s.push(n.setResourceId),e.resourceIds=s}}}function j(e,r){var t=e.resourceEditable;if(null==t){var n=e.sourceId&&r.state.eventSources[e.sourceId];n&&(t=n.extendedProps.resourceEditable),null==t&&(t=r.opt("eventResourceEditable"),null==t&&(t=r.opt("editable")))}return t}function F(e,r){var t=e.resourceMutation;return t?{oldResource:r.getResourceById(t.matchResourceId),newResource:r.getResourceById(t.setResourceId)}:{oldResource:null,newResource:null}}function U(e,r){var t=e.dateSpan.resourceId,n=r.dateSpan.resourceId;if(t&&n)return(e.component.allowAcrossResources!==!1||t===n)&&{resourceId:t}}function A(e,r){return e.resourceId?{resource:r.getResourceById(e.resourceId)}:{}}function H(e,r){return e.resourceId?{resource:r.getResourceById(e.resourceId)}:{}}function B(e,t){var n=new Re,o=n.splitProps(se({},e,{resourceStore:t.state.resourceStore}));for(var s in o){var u=o[s];if(s&&o[""]&&(u=se({},u,{eventStore:r.mergeEventStores(o[""].eventStore,u.eventStore),eventUiBases:se({},o[""].eventUiBases,u.eventUiBases)})),!r.isPropsValid(u,t,{resourceId:s},z.bind(null,s)))return!1}return!0}function z(e,r){return se({},r,{constraints:M(e,r.constraints)})}function M(e,r){return r.map(function(r){var t=r.defs;if(t)for(var n in t){var o=t[n].resourceIds;if(o.length&&o.indexOf(e)===-1)return!1}return r})}function V(e){return e.resourceId?{resourceId:e.resourceId}:{}}function N(e,r){var t=e.component;if(t.allowAcrossResources===!1&&e.dateSpan.resourceId!==r.dateSpan.resourceId)return!1}function k(e,t){var n=t.opt("schedulerLicenseKey");q(window.location.href)||K(n)||r.appendToElement(e,'<div class="fc-license-message" style="'+r.htmlEscape(r.cssToStr(Ie))+'">Please use a valid license key. <a href="'+me+'">More Info</a></div>')}function K(e){if(Se.indexOf(e)!==-1)return!0;var t=(e||"").match(/^(\d+)\-fcs\-(\d+)$/);if(t&&10===t[1].length){var n=new Date(1e3*parseInt(t[2],10)),o=new Date(r.config.mockSchedulerReleaseDate||ye);if(r.isValidDate(o)){var s=r.addDays(o,-Ee);if(s<n)return!0}}return!1}function q(e){return/\w+\:\/\/fullcalendar\.io\/|\/demos\/[\w-]+\.html$/.test(e)}function L(e,t){var n=t.state.resourceSource._raw;r.isValuesSimilar(n,e,2)||t.dispatch({type:"RESET_RESOURCE_SOURCE",resourceSourceInput:e})}function Z(e,r,t){var n,o,s,u,i=t.dateEnv,a={};return r&&(n=t.opt("startParam"),o=t.opt("endParam"),s=t.opt("timeZoneParam"),a[n]=i.formatIso(r.start),a[o]=i.formatIso(r.end),"local"!==i.timeZone&&(a[s]=i.timeZone)),u="function"==typeof e.extraParams?e.extraParams():e.extraParams||{},se(a,u),a}function G(e,r){return"function"==typeof e?function(t){return e(new ge(r,t))}:function(e){return e.title||S(e.id)}}function J(e,r){return W(e,[],r,!1,{},!0).map(function(e){return e.resource})}function W(e,r,t,n,o,s){var u=Y(e,n?-1:1,r,t),i=[];return X(u,i,n,[],0,o,s),i}function X(e,r,t,n,o,s,u){for(var i=0;i<e.length;i++){var a=e[i],c=a.group;if(c)if(t){var l=r.length,d=n.length;if(X(a.children,r,t,n.concat(0),o,s,u),l<r.length){var f=r[l],p=f.rowSpans=f.rowSpans.slice();p[d]=r.length-l}}else{var h=c.spec.field+":"+c.value,v=null!=s[h]?s[h]:u;r.push({id:h,group:c,isExpanded:v}),v&&X(a.children,r,t,n,o+1,s,u)}else if(a.resource){var h=a.resource.id,v=null!=s[h]?s[h]:u;r.push({id:h,rowSpans:n,depth:o,isExpanded:v,hasChildren:Boolean(a.children.length),resource:a.resource,resourceFields:a.resourceFields}),v&&X(a.children,r,t,n,o+1,s,u)}}}function Y(e,r,t,n){var o=$(e,n),s=[];for(var u in o){var i=o[u];i.resource.parentId||Q(i,s,t,0,r,n)}return s}function $(e,r){var t={};for(var n in e){var o=e[n];t[n]={resource:o,resourceFields:te(o),children:[]}}for(var n in e){var o=e[n];if(o.parentId){var s=t[o.parentId];s&&re(t[n],s.children,r)}}return t}function Q(e,r,t,n,o,s){if(t.length&&(o===-1||n<=o)){var u=ee(e,r,t[0]);Q(e,u.children,t.slice(1),n+1,o,s)}else re(e,r,s)}function ee(e,t,n){var o,s,u=e.resourceFields[n.field];if(n.order)for(s=0;s<t.length;s++){var i=t[s];if(i.group){var a=r.flexibleCompare(u,i.group.value)*n.order;if(0===a){o=i;break}if(a<0)break}}else for(s=0;s<t.length;s++){var i=t[s];if(i.group&&u===i.group.value){o=i;break}}return o||(o={group:{value:u,spec:n},children:[]},t.splice(s,0,o)),o}function re(e,t,n){var o;for(o=0;o<t.length;o++){var s=r.compareByFieldSpecs(t[o].resourceFields,e.resourceFields,n);if(s>0)break}t.splice(o,0,e)}function te(e){var r=se({},e.extendedProps,e.ui,e);return delete r.ui,delete r.extendedProps,r}function ne(e,r){return e.spec===r.spec&&e.value===r.value}/*! *****************************************************************************
+ 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 oe=function(e,r){return(oe=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,r){e.__proto__=r}||function(e,r){for(var t in r)r.hasOwnProperty(t)&&(e[t]=r[t])})(e,r)},se=function(){return se=Object.assign||function(e){for(var r,t=1,n=arguments.length;t<n;t++){r=arguments[t];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e},se.apply(this,arguments)},ue=function(){function e(){this.filterResources=r.memoize(n)}return e.prototype.transform=function(e,r,t,n){if(r["class"].needsResourceData)return{resourceStore:this.filterResources(t.resourceStore,n.opt("filterResourcesWithEvents"),t.eventStore,t.dateProfile.activeRange),resourceEntityExpansions:t.resourceEntityExpansions}},e}(),ie=function(){function e(){this.buildResourceEventUis=r.memoizeOutput(i,r.isObjectsSimilar),this.injectResourceEventUis=r.memoize(a)}return e.prototype.transform=function(e,r,t){if(!r["class"].needsResourceData)return{eventUiBases:this.injectResourceEventUis(e.eventUiBases,e.eventStore.defs,this.buildResourceEventUis(t.resourceStore))}},e}(),ae={id:String},ce=[],le=0,de=0,fe={id:String,title:String,parentId:String,businessHours:null,children:null,extendedProps:null},pe="_fc:",he=0,ve={resourceId:String,resourceIds:function(e){return(e||[]).map(function(e){return String(e)})},resourceEditable:Boolean},ge=function(){function e(e,r){this._calendar=e,this._resource=r}return e.prototype.setProp=function(e,r){this._calendar.dispatch({type:"SET_RESOURCE_PROP",resourceId:this._resource.id,propName:e,propValue:r})},e.prototype.remove=function(){this._calendar.dispatch({type:"REMOVE_RESOURCE",resourceId:this._resource.id})},e.prototype.getParent=function(){var r=this._calendar,t=this._resource.parentId;return t?new e(r,r.state.resourceSource[t]):null},e.prototype.getChildren=function(){var r=this._resource.id,t=this._calendar,n=t.state.resourceStore,o=[];for(var s in n)n[s].parentId===r&&o.push(new e(t,n[s]));return o},e.prototype.getEvents=function(){var e=this._resource.id,t=this._calendar,n=t.state.eventStore,o=n.defs,s=n.instances,u=[];for(var i in s){var a=s[i],c=o[a.defId];c.resourceIds.indexOf(e)!==-1&&u.push(new r.EventApi(t,c,a))}return u},Object.defineProperty(e.prototype,"id",{get:function(){return this._resource.id},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"title",{get:function(){return this._resource.title},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"eventConstraint",{get:function(){return this._resource.ui.constraints[0]||null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"eventOverlap",{get:function(){return this._resource.ui.overlap},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"eventAllow",{get:function(){return this._resource.ui.allows[0]||null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"eventBackgroundColor",{get:function(){return this._resource.ui.backgroundColor},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"eventBorderColor",{get:function(){return this._resource.ui.borderColor},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"eventTextColor",{get:function(){return this._resource.ui.textColor},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"eventClassNames",{get:function(){return this._resource.ui.classNames},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"extendedProps",{get:function(){return this._resource.extendedProps},enumerable:!0,configurable:!0}),e}();r.Calendar.prototype.addResource=function(e,r){var t;void 0===r&&(r=!0);var n,o;return e instanceof ge?(o=e._resource,t={},t[o.id]=o,n=t):(n={},o=m(e,"",n,this)),r&&this.component.view.addScroll({forcedRowId:o.id}),this.dispatch({type:"ADD_RESOURCE",resourceHash:n}),new ge(this,o)},r.Calendar.prototype.getResourceById=function(e){if(e=String(e),this.state.resourceStore){var r=this.state.resourceStore[e];if(r)return new ge(this,r)}return null},r.Calendar.prototype.getResources=function(){var e=this.state.resourceStore,r=[];if(e)for(var t in e)r.push(new ge(this,e[t]));return r},r.Calendar.prototype.getTopLevelResources=function(){var e=this.state.resourceStore,r=[];if(e)for(var t in e)e[t].parentId||r.push(new ge(this,e[t]));return r},r.Calendar.prototype.rerenderResources=function(){this.dispatch({type:"RESET_RESOURCES"})},r.Calendar.prototype.refetchResources=function(){this.dispatch({type:"REFETCH_RESOURCES"})};var Re=function(e){function r(){return null!==e&&e.apply(this,arguments)||this}return t(r,e),r.prototype.getKeyInfo=function(e){return se({"":{}},e.resourceStore)},r.prototype.getKeysForDateSpan=function(e){return[e.resourceId||""]},r.prototype.getKeysForEventDef=function(e){var r=e.resourceIds;return r.length?r:[""]},r}(r.Splitter);r.EventApi.prototype.getResources=function(){var e=this._calendar;return this._def.resourceIds.map(function(r){return e.getResourceById(r)})},r.EventApi.prototype.setResources=function(e){for(var r=[],t=0,n=e;t<n.length;t++){var o=n[t],s=null;"string"==typeof o?s=o:"number"==typeof o?s=String(o):o instanceof ge?s=o.id:console.warn("unknown resource type: "+o),s&&r.push(s)}this.mutate({standardProps:{resourceIds:r}})};var ye="2019-04-24",Ee=372,me="http://fullcalendar.io/scheduler/license/",Se=["GPL-My-Project-Is-Open-Source","CC-Attribution-NonCommercial-NoDerivatives"],Ie={position:"absolute","z-index":99999,bottom:"1px",left:"1px",background:"#eee","border-color":"#ddd","border-style":"solid","border-width":"1px 1px 0 0",padding:"2px 4px","font-size":"12px","border-top-right-radius":"3px"},be={resources:L};l({ignoreRange:!0,parseMeta:function(e){return Array.isArray(e)?e:Array.isArray(e.resources)?e.resources:null},fetch:function(e,r){r({rawResources:e.resourceSource.meta})}}),l({parseMeta:function(e){return"function"==typeof e?e:"function"==typeof e.resources?e.resources:null},fetch:function(e,t,n){var o=e.calendar.dateEnv,s=e.resourceSource.meta,u={};e.range&&(u={start:o.toDate(e.range.start),end:o.toDate(e.range.end),startStr:o.formatIso(e.range.start),endStr:o.formatIso(e.range.end),timeZone:o.timeZone}),r.unpromisify(s.bind(null,u),function(e){t({rawResources:e})},n)}}),l({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}},fetch:function(e,t,n){var o=e.resourceSource.meta,s=Z(o,e.range,e.calendar);r.requestJson(o.method,o.url,s,function(e,r){t({rawResources:e,xhr:r})},function(e,r){n({message:e,xhr:r})})}});var Ce=function(e){function n(t,n){var o=e.call(this,t)||this;return o.datesAboveResources=o.opt("datesAboveResources"),o.resourceTextFunc=G(o.opt("resourceText"),o.calendar),n.innerHTML="",n.appendChild(o.el=r.htmlToElement('<div class="fc-row '+o.theme.getClass("headerRow")+'"><table class="'+o.theme.getClass("tableGrid")+'"><thead></thead></table></div>')),o.thead=o.el.querySelector("thead"),o}return t(n,e),n.prototype.destroy=function(){r.removeElement(this.el)},n.prototype.render=function(e){var t;this.dateFormat=r.createFormatter(this.opt("columnHeaderFormat")||r.computeFallbackHeaderFormat(e.datesRepDistinctDays,e.dates.length)),t=1===e.dates.length?this.renderResourceRow(e.resources):this.datesAboveResources?this.renderDayAndResourceRows(e.dates,e.resources):this.renderResourceAndDayRows(e.resources,e.dates),this.thead.innerHTML=t,this.processResourceEls(e.resources)},n.prototype.renderResourceRow=function(e){var r=this,t=e.map(function(e){return r.renderResourceCell(e,1)});return this.buildTr(t)},n.prototype.renderDayAndResourceRows=function(e,r){for(var t=[],n=[],o=0,s=e;o<s.length;o++){var u=s[o];t.push(this.renderDateCell(u,r.length));for(var i=0,a=r;i<a.length;i++){var c=a[i];n.push(this.renderResourceCell(c,1,u))}}return this.buildTr(t)+this.buildTr(n)},n.prototype.renderResourceAndDayRows=function(e,r){for(var t=[],n=[],o=0,s=e;o<s.length;o++){var u=s[o];t.push(this.renderResourceCell(u,r.length));for(var i=0,a=r;i<a.length;i++){var c=a[i];n.push(this.renderDateCell(c,1,u))}}return this.buildTr(t)+this.buildTr(n)},n.prototype.renderResourceCell=function(e,t,n){var o=this.dateEnv;return'<th class="fc-resource-cell" data-resource-id="'+e.id+'"'+(n?' data-date="'+o.formatIso(n,{omitTime:!0})+'"':"")+(t>1?' colspan="'+t+'"':"")+">"+r.htmlEscape(this.resourceTextFunc(e))+"</th>"},n.prototype.renderDateCell=function(e,t,n){var o=this.props;return r.renderDateCell(e,o.dateProfile,o.datesRepDistinctDays,o.dates.length*o.resources.length,this.dateFormat,this.context,t,n?'data-resource-id="'+n.id+'"':"")},n.prototype.buildTr=function(e){return e.length||(e=["<td> </td>"]),this.props.renderIntroHtml&&(e=[this.props.renderIntroHtml()].concat(e)),this.isRtl&&e.reverse(),"<tr>"+e.join("")+"</tr>"},n.prototype.processResourceEls=function(e){var t=this,n=this.view;r.findElements(this.thead,".fc-resource-cell").forEach(function(r,o){o%=e.length,t.isRtl&&(o=e.length-1-o);var s=e[o];n.publiclyTrigger("resourceRender",[{resource:new ge(t.calendar,s),el:r,view:n}])})},n}(r.Component),_e=function(){function e(e,r){this.dayTable=e,this.resources=r,this.resourceIndex=new Oe(r),this.rowCnt=e.rowCnt,this.colCnt=e.colCnt*r.length,this.cells=this.buildCells()}return e.prototype.buildCells=function(){for(var e=this,r=e.rowCnt,t=e.dayTable,n=e.resources,o=[],s=0;s<r;s++){for(var u=[],i=0;i<t.colCnt;i++)for(var a=0;a<n.length;a++){var c=n[a],l='data-resource-id="'+c.id+'"';u[this.computeCol(i,a)]={date:t.cells[s][i].date,resource:c,htmlAttrs:l}}o.push(u)}return o},e}(),we=function(e){function r(){return null!==e&&e.apply(this,arguments)||this}return t(r,e),r.prototype.computeCol=function(e,r){return r*this.dayTable.colCnt+e},r.prototype.computeColRanges=function(e,r,t){return[{firstCol:this.computeCol(e,t),lastCol:this.computeCol(r,t),isStart:!0,isEnd:!0}]},r}(_e),Pe=function(e){function r(){return null!==e&&e.apply(this,arguments)||this}return t(r,e),r.prototype.computeCol=function(e,r){return e*this.resources.length+r},r.prototype.computeColRanges=function(e,r,t){for(var n=[],o=e;o<=r;o++){var s=this.computeCol(o,t);n.push({firstCol:s,lastCol:s,isStart:o===e,isEnd:o===r})}return n},r}(_e),Oe=function(){function e(e){for(var r={},t=[],n=0;n<e.length;n++){var o=e[n].id;t.push(o),r[o]=n}this.ids=t,this.indicesById=r,this.length=e.length}return e}(),xe=function(e){function n(){return null!==e&&e.apply(this,arguments)||this}return t(n,e),n.prototype.getKeyInfo=function(e){var t=e.resourceDayTable,n=r.mapHash(t.resourceIndex.indicesById,function(e){return t.resources[e]});return n[""]={},n},n.prototype.getKeysForDateSpan=function(e){return[e.resourceId||""]},n.prototype.getKeysForEventDef=function(e){var r=e.resourceIds;return r.length?r:[""]},n}(r.Splitter),Te=[],De=function(){function e(){this.joinDateSelection=r.memoize(this.joinSegs),this.joinBusinessHours=r.memoize(this.joinSegs),this.joinFgEvents=r.memoize(this.joinSegs),this.joinBgEvents=r.memoize(this.joinSegs),this.joinEventDrags=r.memoize(this.joinInteractions),this.joinEventResizes=r.memoize(this.joinInteractions)}return e.prototype.joinProps=function(e,r){for(var t=[],n=[],o=[],s=[],u=[],i=[],a="",c=r.resourceIndex.ids.concat([""]),l=0,d=c;l<d.length;l++){var f=d[l],p=e[f];t.push(p.dateSelectionSegs),n.push(f?p.businessHourSegs:Te),o.push(f?p.fgEventSegs:Te),s.push(p.bgEventSegs),u.push(p.eventDrag),i.push(p.eventResize),a=a||p.eventSelection}return{dateSelectionSegs:this.joinDateSelection.apply(this,[r].concat(t)),businessHourSegs:this.joinBusinessHours.apply(this,[r].concat(n)),fgEventSegs:this.joinFgEvents.apply(this,[r].concat(o)),bgEventSegs:this.joinBgEvents.apply(this,[r].concat(s)),eventDrag:this.joinEventDrags.apply(this,[r].concat(u)),eventResize:this.joinEventResizes.apply(this,[r].concat(i)),eventSelection:a}},e.prototype.joinSegs=function(e){for(var r=[],t=1;t<arguments.length;t++)r[t-1]=arguments[t];for(var n=e.resources.length,o=[],s=0;s<n;s++){for(var u=0,i=r[s];u<i.length;u++){var a=i[u];o.push.apply(o,this.transformSeg(a,e,s))}for(var c=0,l=r[n];c<l.length;c++){var a=l[c];o.push.apply(o,this.transformSeg(a,e,s))}}return o},e.prototype.expandSegs=function(e,r){for(var t=e.resources.length,n=[],o=0;o<t;o++)for(var s=0,u=r;s<u.length;s++){var i=u[s];n.push.apply(n,this.transformSeg(i,e,o))}return n},e.prototype.joinInteractions=function(e){for(var r=[],t=1;t<arguments.length;t++)r[t-1]=arguments[t];for(var n=e.resources.length,o={},s=[],u=!1,i=null,a=0;a<n;a++){var c=r[a];if(c){for(var l=0,d=c.segs;l<d.length;l++){var f=d[l];s.push.apply(s,this.transformSeg(f,e,a))}se(o,c.affectedInstances),u=u||c.isEvent,i=i||c.sourceSeg}if(r[n])for(var p=0,h=r[n].segs;p<h.length;p++){var f=h[p];s.push.apply(s,this.transformSeg(f,e,a))}}return{affectedInstances:o,segs:s,isEvent:u,sourceSeg:i}},e}(),je=r.createPlugin({reducers:[O],eventDefParsers:[x],eventDragMutationMassagers:[T],eventDefMutationAppliers:[D],dateSelectionTransformers:[U],datePointTransforms:[A],dateSpanTransforms:[H],viewPropsTransformers:[ue,ie],isPropsValid:B,externalDefTransforms:[V],eventResizeJoinTransforms:[N],viewContainerModifiers:[k],eventDropTransformers:[F],optionChangeHandlers:be});e.AbstractResourceDayTable=_e,e.DayResourceTable=Pe,e.ResourceApi=ge,e.ResourceDayHeader=Ce,e.ResourceDayTable=we,e.ResourceSplitter=Re,e.VResourceJoiner=De,e.VResourceSplitter=xe,e.buildResourceFields=te,e.buildResourceTextFunc=G,e.buildRowNodes=W,e.computeResourceEditable=j,e["default"]=je,e.flattenResources=J,e.isGroupsEqual=ne,Object.defineProperty(e,"__esModule",{value:!0})});
\ No newline at end of file
--- /dev/null
+{
+ "_from": "@fullcalendar/resource-common",
+ "_id": "@fullcalendar/resource-common@4.1.0",
+ "_inBundle": false,
+ "_integrity": "sha512-IaqUeHnjTZtVoiJsvcJqNuUdh8UQl1wYcbdA1n2Xu/e/9lUKKUVHmrzAuq+YdfwhOsmXeTGgMy2Fu9NazRXSjQ==",
+ "_location": "/@fullcalendar/resource-common",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "tag",
+ "registry": true,
+ "raw": "@fullcalendar/resource-common",
+ "name": "@fullcalendar/resource-common",
+ "escapedName": "@fullcalendar%2fresource-common",
+ "scope": "@fullcalendar",
+ "rawSpec": "",
+ "saveSpec": null,
+ "fetchSpec": "latest"
+ },
+ "_requiredBy": [
+ "#USER",
+ "/"
+ ],
+ "_resolved": "https://registry.npmjs.org/@fullcalendar/resource-common/-/resource-common-4.1.0.tgz",
+ "_shasum": "7342a6737965ec49b6fbdc700ae74f9a9062780c",
+ "_spec": "@fullcalendar/resource-common",
+ "_where": "C:\\Users\\ksaff\\Workspace\\Websites\\fullcalendar",
+ "author": {
+ "name": "Adam Shaw",
+ "email": "arshaw@arshaw.com",
+ "url": "http://arshaw.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/fullcalendar/fullcalendar-scheduler/issues"
+ },
+ "bundleDependencies": false,
+ "copyright": "2019 Adam Shaw",
+ "deprecated": false,
+ "description": "Offers base support for resources. Required for all resource-related plugins.",
+ "docs": "https://fullcalendar.io/docs/scheduler",
+ "homepage": "https://fullcalendar.io/scheduler",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "main": "main.js",
+ "name": "@fullcalendar/resource-common",
+ "peerDependencies": {
+ "@fullcalendar/core": "~4.1.0"
+ },
+ "releaseDate": "2019-04-24",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/fullcalendar/fullcalendar-scheduler.git",
+ "homepage": "https://github.com/fullcalendar/fullcalendar-scheduler"
+ },
+ "title": "FullCalendar Resources Common Plugin",
+ "types": "main.d.ts",
+ "unpkg": "main.min.js",
+ "version": "4.1.0"
+}
--- /dev/null
+
+For complete licensing information, visit:
+http://fullcalendar.io/scheduler/license
+
+FullCalendar Scheduler is tri-licensed, meaning you must choose
+one of three licenses to use. Here is a summary of those licenses:
+
+- Commercial License
+ (a paid license, meant for commercial use)
+ http://fullcalendar.io/scheduler/license-details
+
+- Creative Commons Non-Commercial No-Derivatives
+ (meant for trial and non-commercial use)
+ https://creativecommons.org/licenses/by-nc-nd/4.0/
+
+- GPLv3 License
+ (meant for open-source projects)
+ http://www.gnu.org/licenses/gpl-3.0.en.html
--- /dev/null
+
+# FullCalendar Resource Day Grid Plugin
+
+Displays events in individual columns for days and resources
+
+[View the docs »](https://fullcalendar.io/docs/resource-daygrid-view)
+
+This package was created from the [FullCalendar monorepo »](https://github.com/fullcalendar/fullcalendar-scheduler)
--- /dev/null
+declare module "@fullcalendar/resource-daygrid/ResourceDayGrid" {
+ import { Hit, DateSpan, DateComponent, DateProfile, EventStore, EventUiHash, EventInteractionState, ComponentContext, Duration } from "@fullcalendar/core";
+ import { DayGrid } from "@fullcalendar/daygrid";
+ import { AbstractResourceDayTable } from "@fullcalendar/resource-common";
+ export interface ResourceDayGridProps {
+ dateProfile: DateProfile | null;
+ resourceDayTable: AbstractResourceDayTable;
+ businessHours: EventStore;
+ eventStore: EventStore;
+ eventUiBases: EventUiHash;
+ dateSelection: DateSpan | null;
+ eventSelection: string;
+ eventDrag: EventInteractionState | null;
+ eventResize: EventInteractionState | null;
+ isRigid: boolean;
+ nextDayThreshold: Duration;
+ }
+ export { ResourceDayGrid as default, ResourceDayGrid };
+ class ResourceDayGrid extends DateComponent<ResourceDayGridProps> {
+ dayGrid: DayGrid;
+ private splitter;
+ private slicers;
+ private joiner;
+ constructor(context: ComponentContext, dayGrid: DayGrid);
+ destroy(): void;
+ render(props: ResourceDayGridProps): void;
+ buildPositionCaches(): void;
+ queryHit(positionLeft: number, positionTop: number): Hit;
+ }
+}
+
+declare module "@fullcalendar/resource-daygrid/ResourceDayGridView" {
+ import { ComponentContext, ViewSpec, DateProfileGenerator } from "@fullcalendar/core";
+ import { AbstractDayGridView } from "@fullcalendar/daygrid";
+ import { ResourceDayHeader, ResourceViewProps } from "@fullcalendar/resource-common";
+ import ResourceDayGrid from "@fullcalendar/resource-daygrid/ResourceDayGrid";
+ export { ResourceDayGridView as default, ResourceDayGridView };
+ class ResourceDayGridView extends AbstractDayGridView {
+ static needsResourceData: boolean;
+ props: ResourceViewProps;
+ header: ResourceDayHeader;
+ resourceDayGrid: ResourceDayGrid;
+ private resourceOrderSpecs;
+ private flattenResources;
+ private buildResourceDayTable;
+ constructor(context: ComponentContext, viewSpec: ViewSpec, dateProfileGenerator: DateProfileGenerator, parentEl: HTMLElement);
+ destroy(): void;
+ render(props: ResourceViewProps): void;
+ }
+}
+
+declare module "@fullcalendar/resource-daygrid" {
+ import ResourceDayGridView from "@fullcalendar/resource-daygrid/ResourceDayGridView";
+ export { ResourceDayGridView };
+ export { default as ResourceDayGrid } from "@fullcalendar/resource-daygrid/ResourceDayGrid";
+ const _default_2: import("@fullcalendar/core").PluginDef;
+ export default _default_2;
+}
\ No newline at end of file
--- /dev/null
+/*!
+FullCalendar Resource Day Grid Plugin v4.1.0
+Docs & License: https://fullcalendar.io/scheduler
+(c) 2019 Adam Shaw
+*/
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fullcalendar/core'), require('@fullcalendar/resource-common'), require('@fullcalendar/daygrid')) :
+ typeof define === 'function' && define.amd ? define(['exports', '@fullcalendar/core', '@fullcalendar/resource-common', '@fullcalendar/daygrid'], factory) :
+ (global = global || self, factory(global.FullCalendarResourceDayGrid = {}, global.FullCalendar, global.FullCalendarResourceCommon, global.FullCalendarDayGrid));
+}(this, function (exports, core, ResourceCommonPlugin, DayGridPlugin) { 'use strict';
+
+ var ResourceCommonPlugin__default = 'default' in ResourceCommonPlugin ? ResourceCommonPlugin['default'] : ResourceCommonPlugin;
+ var DayGridPlugin__default = 'default' in DayGridPlugin ? DayGridPlugin['default'] : DayGridPlugin;
+
+ /*! *****************************************************************************
+ 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 ResourceDayGrid = /** @class */ (function (_super) {
+ __extends(ResourceDayGrid, _super);
+ function ResourceDayGrid(context, dayGrid) {
+ var _this = _super.call(this, context, dayGrid.el) || this;
+ _this.splitter = new ResourceCommonPlugin.VResourceSplitter();
+ _this.slicers = {};
+ _this.joiner = new ResourceDayGridJoiner();
+ _this.dayGrid = dayGrid;
+ context.calendar.registerInteractiveComponent(_this, {
+ el: _this.dayGrid.el
+ });
+ return _this;
+ }
+ ResourceDayGrid.prototype.destroy = function () {
+ _super.prototype.destroy.call(this);
+ this.calendar.unregisterInteractiveComponent(this);
+ };
+ ResourceDayGrid.prototype.render = function (props) {
+ var _this = this;
+ var dayGrid = this.dayGrid;
+ var dateProfile = props.dateProfile, resourceDayTable = props.resourceDayTable, nextDayThreshold = props.nextDayThreshold;
+ var splitProps = this.splitter.splitProps(props);
+ this.slicers = core.mapHash(splitProps, function (split, resourceId) {
+ return _this.slicers[resourceId] || new DayGridPlugin.DayGridSlicer();
+ });
+ var slicedProps = core.mapHash(this.slicers, function (slicer, resourceId) {
+ return slicer.sliceProps(splitProps[resourceId], dateProfile, nextDayThreshold, dayGrid, resourceDayTable.dayTable);
+ });
+ dayGrid.allowAcrossResources = resourceDayTable.dayTable.colCnt === 1;
+ dayGrid.receiveProps(__assign({}, this.joiner.joinProps(slicedProps, resourceDayTable), { dateProfile: dateProfile, cells: resourceDayTable.cells, isRigid: props.isRigid }));
+ };
+ ResourceDayGrid.prototype.buildPositionCaches = function () {
+ this.dayGrid.buildPositionCaches();
+ };
+ ResourceDayGrid.prototype.queryHit = function (positionLeft, positionTop) {
+ var rawHit = this.dayGrid.positionToHit(positionLeft, positionTop);
+ if (rawHit) {
+ return {
+ component: this.dayGrid,
+ dateSpan: {
+ range: rawHit.dateSpan.range,
+ allDay: rawHit.dateSpan.allDay,
+ resourceId: this.props.resourceDayTable.cells[rawHit.row][rawHit.col].resource.id
+ },
+ dayEl: rawHit.dayEl,
+ rect: {
+ left: rawHit.relativeRect.left,
+ right: rawHit.relativeRect.right,
+ top: rawHit.relativeRect.top,
+ bottom: rawHit.relativeRect.bottom
+ },
+ layer: 0
+ };
+ }
+ };
+ return ResourceDayGrid;
+ }(core.DateComponent));
+ var ResourceDayGridJoiner = /** @class */ (function (_super) {
+ __extends(ResourceDayGridJoiner, _super);
+ function ResourceDayGridJoiner() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ ResourceDayGridJoiner.prototype.transformSeg = function (seg, resourceDayTable, resourceI) {
+ var colRanges = resourceDayTable.computeColRanges(seg.firstCol, seg.lastCol, resourceI);
+ return colRanges.map(function (colRange) {
+ return __assign({}, seg, colRange, { isStart: seg.isStart && colRange.isStart, isEnd: seg.isEnd && colRange.isEnd });
+ });
+ };
+ return ResourceDayGridJoiner;
+ }(ResourceCommonPlugin.VResourceJoiner));
+
+ var ResourceDayGridView = /** @class */ (function (_super) {
+ __extends(ResourceDayGridView, _super);
+ function ResourceDayGridView(context, viewSpec, dateProfileGenerator, parentEl) {
+ var _this = _super.call(this, context, viewSpec, dateProfileGenerator, parentEl) || this;
+ _this.flattenResources = core.memoize(ResourceCommonPlugin.flattenResources);
+ _this.buildResourceDayTable = core.memoize(buildResourceDayTable);
+ _this.resourceOrderSpecs = core.parseFieldSpecs(_this.opt('resourceOrder'));
+ if (_this.opt('columnHeader')) {
+ _this.header = new ResourceCommonPlugin.ResourceDayHeader(_this.context, _this.el.querySelector('.fc-head-container'));
+ }
+ _this.resourceDayGrid = new ResourceDayGrid(context, _this.dayGrid);
+ return _this;
+ }
+ ResourceDayGridView.prototype.destroy = function () {
+ _super.prototype.destroy.call(this);
+ if (this.header) {
+ this.header.destroy();
+ }
+ this.resourceDayGrid.destroy();
+ };
+ ResourceDayGridView.prototype.render = function (props) {
+ _super.prototype.render.call(this, props); // for flags for updateSize
+ var resources = this.flattenResources(props.resourceStore, this.resourceOrderSpecs);
+ var resourceDayTable = this.buildResourceDayTable(this.props.dateProfile, this.dateProfileGenerator, resources, this.opt('datesAboveResources'));
+ if (this.header) {
+ this.header.receiveProps({
+ resources: resources,
+ dates: resourceDayTable.dayTable.headerDates,
+ dateProfile: props.dateProfile,
+ datesRepDistinctDays: true,
+ renderIntroHtml: this.renderHeadIntroHtml
+ });
+ }
+ this.resourceDayGrid.receiveProps({
+ dateProfile: props.dateProfile,
+ resourceDayTable: resourceDayTable,
+ businessHours: props.businessHours,
+ eventStore: props.eventStore,
+ eventUiBases: props.eventUiBases,
+ dateSelection: props.dateSelection,
+ eventSelection: props.eventSelection,
+ eventDrag: props.eventDrag,
+ eventResize: props.eventResize,
+ isRigid: this.hasRigidRows(),
+ nextDayThreshold: this.nextDayThreshold
+ });
+ };
+ ResourceDayGridView.needsResourceData = true; // for ResourceViewProps
+ return ResourceDayGridView;
+ }(DayGridPlugin.AbstractDayGridView));
+ function buildResourceDayTable(dateProfile, dateProfileGenerator, resources, datesAboveResources) {
+ var dayTable = DayGridPlugin.buildBasicDayTable(dateProfile, dateProfileGenerator);
+ return datesAboveResources ?
+ new ResourceCommonPlugin.DayResourceTable(dayTable, resources) :
+ new ResourceCommonPlugin.ResourceDayTable(dayTable, resources);
+ }
+
+ var main = core.createPlugin({
+ deps: [ResourceCommonPlugin__default, DayGridPlugin__default],
+ defaultView: 'resourceDayGridDay',
+ views: {
+ resourceDayGrid: ResourceDayGridView,
+ resourceDayGridDay: {
+ type: 'resourceDayGrid',
+ duration: { days: 1 }
+ },
+ resourceDayGridWeek: {
+ type: 'resourceDayGrid',
+ duration: { weeks: 1 }
+ },
+ resourceDayGridMonth: {
+ type: 'resourceDayGrid',
+ duration: { months: 1 },
+ // TODO: wish we didn't have to C&P from dayGrid's file
+ monthMode: true,
+ fixedWeekCount: true
+ }
+ }
+ });
+
+ exports.ResourceDayGrid = ResourceDayGrid;
+ exports.ResourceDayGridView = ResourceDayGridView;
+ exports.default = main;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+}));
--- /dev/null
+/*!
+FullCalendar Resource Day Grid Plugin v4.1.0
+Docs & License: https://fullcalendar.io/scheduler
+(c) 2019 Adam Shaw
+*/
+!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@fullcalendar/core"),require("@fullcalendar/resource-common"),require("@fullcalendar/daygrid")):"function"==typeof define&&define.amd?define(["exports","@fullcalendar/core","@fullcalendar/resource-common","@fullcalendar/daygrid"],r):(e=e||self,r(e.FullCalendarResourceDayGrid={},e.FullCalendar,e.FullCalendarResourceCommon,e.FullCalendarDayGrid))}(this,function(e,r,t,o){"use strict";function i(e,r){function t(){this.constructor=e}l(e,r),e.prototype=null===r?Object.create(r):(t.prototype=r.prototype,new t)}function a(e,r,i,a){var s=o.buildBasicDayTable(e,r);return a?new t.DayResourceTable(s,i):new t.ResourceDayTable(s,i)}var s="default"in t?t["default"]:t,n="default"in o?o["default"]:o,l=function(e,r){return(l=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,r){e.__proto__=r}||function(e,r){for(var t in r)r.hasOwnProperty(t)&&(e[t]=r[t])})(e,r)},c=function(){return c=Object.assign||function(e){for(var r,t=1,o=arguments.length;t<o;t++){r=arguments[t];for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(e[i]=r[i])}return e},c.apply(this,arguments)},d=function(e){function a(r,o){var i=e.call(this,r,o.el)||this;return i.splitter=new t.VResourceSplitter,i.slicers={},i.joiner=new u,i.dayGrid=o,r.calendar.registerInteractiveComponent(i,{el:i.dayGrid.el}),i}return i(a,e),a.prototype.destroy=function(){e.prototype.destroy.call(this),this.calendar.unregisterInteractiveComponent(this)},a.prototype.render=function(e){var t=this,i=this.dayGrid,a=e.dateProfile,s=e.resourceDayTable,n=e.nextDayThreshold,l=this.splitter.splitProps(e);this.slicers=r.mapHash(l,function(e,r){return t.slicers[r]||new o.DayGridSlicer});var d=r.mapHash(this.slicers,function(e,r){return e.sliceProps(l[r],a,n,i,s.dayTable)});i.allowAcrossResources=1===s.dayTable.colCnt,i.receiveProps(c({},this.joiner.joinProps(d,s),{dateProfile:a,cells:s.cells,isRigid:e.isRigid}))},a.prototype.buildPositionCaches=function(){this.dayGrid.buildPositionCaches()},a.prototype.queryHit=function(e,r){var t=this.dayGrid.positionToHit(e,r);if(t)return{component:this.dayGrid,dateSpan:{range:t.dateSpan.range,allDay:t.dateSpan.allDay,resourceId:this.props.resourceDayTable.cells[t.row][t.col].resource.id},dayEl:t.dayEl,rect:{left:t.relativeRect.left,right:t.relativeRect.right,top:t.relativeRect.top,bottom:t.relativeRect.bottom},layer:0}},a}(r.DateComponent),u=function(e){function r(){return null!==e&&e.apply(this,arguments)||this}return i(r,e),r.prototype.transformSeg=function(e,r,t){var o=r.computeColRanges(e.firstCol,e.lastCol,t);return o.map(function(r){return c({},e,r,{isStart:e.isStart&&r.isStart,isEnd:e.isEnd&&r.isEnd})})},r}(t.VResourceJoiner),y=function(e){function o(o,i,s,n){var l=e.call(this,o,i,s,n)||this;return l.flattenResources=r.memoize(t.flattenResources),l.buildResourceDayTable=r.memoize(a),l.resourceOrderSpecs=r.parseFieldSpecs(l.opt("resourceOrder")),l.opt("columnHeader")&&(l.header=new t.ResourceDayHeader(l.context,l.el.querySelector(".fc-head-container"))),l.resourceDayGrid=new d(o,l.dayGrid),l}return i(o,e),o.prototype.destroy=function(){e.prototype.destroy.call(this),this.header&&this.header.destroy(),this.resourceDayGrid.destroy()},o.prototype.render=function(r){e.prototype.render.call(this,r);var t=this.flattenResources(r.resourceStore,this.resourceOrderSpecs),o=this.buildResourceDayTable(this.props.dateProfile,this.dateProfileGenerator,t,this.opt("datesAboveResources"));this.header&&this.header.receiveProps({resources:t,dates:o.dayTable.headerDates,dateProfile:r.dateProfile,datesRepDistinctDays:!0,renderIntroHtml:this.renderHeadIntroHtml}),this.resourceDayGrid.receiveProps({dateProfile:r.dateProfile,resourceDayTable:o,businessHours:r.businessHours,eventStore:r.eventStore,eventUiBases:r.eventUiBases,dateSelection:r.dateSelection,eventSelection:r.eventSelection,eventDrag:r.eventDrag,eventResize:r.eventResize,isRigid:this.hasRigidRows(),nextDayThreshold:this.nextDayThreshold})},o.needsResourceData=!0,o}(o.AbstractDayGridView),p=r.createPlugin({deps:[s,n],defaultView:"resourceDayGridDay",views:{resourceDayGrid:y,resourceDayGridDay:{type:"resourceDayGrid",duration:{days:1}},resourceDayGridWeek:{type:"resourceDayGrid",duration:{weeks:1}},resourceDayGridMonth:{type:"resourceDayGrid",duration:{months:1},monthMode:!0,fixedWeekCount:!0}}});e.ResourceDayGrid=d,e.ResourceDayGridView=y,e["default"]=p,Object.defineProperty(e,"__esModule",{value:!0})});
\ No newline at end of file
--- /dev/null
+{
+ "_from": "@fullcalendar/resource-daygrid",
+ "_id": "@fullcalendar/resource-daygrid@4.1.0",
+ "_inBundle": false,
+ "_integrity": "sha512-Q6rAh00FqKgLdmeymR/gTDKvqQ2umo5rfGjfMJskrA9oVCZDv/ZBBbVq/Rc8k+UcB3pn+vo32VSbmwDfIus5hA==",
+ "_location": "/@fullcalendar/resource-daygrid",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "tag",
+ "registry": true,
+ "raw": "@fullcalendar/resource-daygrid",
+ "name": "@fullcalendar/resource-daygrid",
+ "escapedName": "@fullcalendar%2fresource-daygrid",
+ "scope": "@fullcalendar",
+ "rawSpec": "",
+ "saveSpec": null,
+ "fetchSpec": "latest"
+ },
+ "_requiredBy": [
+ "#USER",
+ "/",
+ "/@fullcalendar/resource-timegrid"
+ ],
+ "_resolved": "https://registry.npmjs.org/@fullcalendar/resource-daygrid/-/resource-daygrid-4.1.0.tgz",
+ "_shasum": "8826d3ecd1b278784e392f773eb5daf6e0a5355f",
+ "_spec": "@fullcalendar/resource-daygrid",
+ "_where": "C:\\Users\\ksaff\\Workspace\\Websites\\fullcalendar",
+ "author": {
+ "name": "Adam Shaw",
+ "email": "arshaw@arshaw.com",
+ "url": "http://arshaw.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/fullcalendar/fullcalendar-scheduler/issues"
+ },
+ "bundleDependencies": false,
+ "copyright": "2019 Adam Shaw",
+ "dependencies": {
+ "@fullcalendar/daygrid": "~4.1.0",
+ "@fullcalendar/resource-common": "~4.1.0"
+ },
+ "deprecated": false,
+ "description": "Displays events in individual columns for days and resources",
+ "docs": "https://fullcalendar.io/docs/resource-daygrid-view",
+ "homepage": "https://fullcalendar.io/scheduler",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "main": "main.js",
+ "name": "@fullcalendar/resource-daygrid",
+ "peerDependencies": {
+ "@fullcalendar/core": "~4.1.0"
+ },
+ "releaseDate": "2019-04-24",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/fullcalendar/fullcalendar-scheduler.git",
+ "homepage": "https://github.com/fullcalendar/fullcalendar-scheduler"
+ },
+ "title": "FullCalendar Resource Day Grid Plugin",
+ "types": "main.d.ts",
+ "unpkg": "main.min.js",
+ "version": "4.1.0"
+}
--- /dev/null
+
+For complete licensing information, visit:
+http://fullcalendar.io/scheduler/license
+
+FullCalendar Scheduler is tri-licensed, meaning you must choose
+one of three licenses to use. Here is a summary of those licenses:
+
+- Commercial License
+ (a paid license, meant for commercial use)
+ http://fullcalendar.io/scheduler/license-details
+
+- Creative Commons Non-Commercial No-Derivatives
+ (meant for trial and non-commercial use)
+ https://creativecommons.org/licenses/by-nc-nd/4.0/
+
+- GPLv3 License
+ (meant for open-source projects)
+ http://www.gnu.org/licenses/gpl-3.0.en.html
--- /dev/null
+
+# FullCalendar Resource Time Grid Plugin
+
+Displays events on a vertical resource view with time slots
+
+[View the docs »](https://fullcalendar.io/docs/vertical-resource-view)
+
+This package was created from the [FullCalendar monorepo »](https://github.com/fullcalendar/fullcalendar-scheduler)
--- /dev/null
+declare module "@fullcalendar/resource-timegrid/ResourceTimeGrid" {
+ import { DateSpan, DateComponent, DateProfile, EventStore, EventUiHash, EventInteractionState, ComponentContext, DateMarker, Hit } from "@fullcalendar/core";
+ import { TimeGrid } from "@fullcalendar/timegrid";
+ import { AbstractResourceDayTable } from "@fullcalendar/resource-common";
+ export interface ResourceTimeGridProps {
+ dateProfile: DateProfile | null;
+ resourceDayTable: AbstractResourceDayTable;
+ businessHours: EventStore;
+ eventStore: EventStore;
+ eventUiBases: EventUiHash;
+ dateSelection: DateSpan | null;
+ eventSelection: string;
+ eventDrag: EventInteractionState | null;
+ eventResize: EventInteractionState | null;
+ }
+ export { ResourceTimeGrid as default, ResourceTimeGrid };
+ class ResourceTimeGrid extends DateComponent<ResourceTimeGridProps> {
+ timeGrid: TimeGrid;
+ private buildDayRanges;
+ private dayRanges;
+ private splitter;
+ private slicers;
+ private joiner;
+ constructor(context: ComponentContext, timeGrid: TimeGrid);
+ destroy(): void;
+ render(props: ResourceTimeGridProps): void;
+ renderNowIndicator(date: DateMarker): void;
+ buildPositionCaches(): void;
+ queryHit(positionLeft: number, positionTop: number): Hit;
+ }
+}
+
+declare module "@fullcalendar/resource-timegrid/ResourceTimeGridView" {
+ import { ComponentContext, ViewSpec, DateProfileGenerator } from "@fullcalendar/core";
+ import { AbstractTimeGridView } from "@fullcalendar/timegrid";
+ import { ResourceDayHeader, ResourceViewProps } from "@fullcalendar/resource-common";
+ import { ResourceDayGrid } from "@fullcalendar/resource-daygrid";
+ import ResourceTimeGrid from "@fullcalendar/resource-timegrid/ResourceTimeGrid";
+ export { ResourceTimeGridView as default, ResourceTimeGridView };
+ class ResourceTimeGridView extends AbstractTimeGridView {
+ static needsResourceData: boolean;
+ props: ResourceViewProps;
+ header: ResourceDayHeader;
+ resourceTimeGrid: ResourceTimeGrid;
+ resourceDayGrid: ResourceDayGrid;
+ private resourceOrderSpecs;
+ private flattenResources;
+ private buildResourceDayTable;
+ constructor(context: ComponentContext, viewSpec: ViewSpec, dateProfileGenerator: DateProfileGenerator, parentEl: HTMLElement);
+ destroy(): void;
+ render(props: ResourceViewProps): void;
+ renderNowIndicator(date: any): void;
+ }
+}
+
+declare module "@fullcalendar/resource-timegrid" {
+ import ResourceTimeGridView from "@fullcalendar/resource-timegrid/ResourceTimeGridView";
+ export { ResourceTimeGridView };
+ export { default as ResourceTimeGrid } from "@fullcalendar/resource-timegrid/ResourceTimeGrid";
+ const _default_3: import("@fullcalendar/core").PluginDef;
+ export default _default_3;
+}
\ No newline at end of file
--- /dev/null
+/*!
+FullCalendar Resource Time Grid Plugin v4.1.0
+Docs & License: https://fullcalendar.io/scheduler
+(c) 2019 Adam Shaw
+*/
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fullcalendar/core'), require('@fullcalendar/resource-common'), require('@fullcalendar/timegrid'), require('@fullcalendar/resource-daygrid')) :
+ typeof define === 'function' && define.amd ? define(['exports', '@fullcalendar/core', '@fullcalendar/resource-common', '@fullcalendar/timegrid', '@fullcalendar/resource-daygrid'], factory) :
+ (global = global || self, factory(global.FullCalendarResourceTimeGrid = {}, global.FullCalendar, global.FullCalendarResourceCommon, global.FullCalendarTimeGrid, global.FullCalendarResourceDayGrid));
+}(this, function (exports, core, ResourceCommonPlugin, TimeGridPlugin, resourceDaygrid) { 'use strict';
+
+ var ResourceCommonPlugin__default = 'default' in ResourceCommonPlugin ? ResourceCommonPlugin['default'] : ResourceCommonPlugin;
+ var TimeGridPlugin__default = 'default' in TimeGridPlugin ? TimeGridPlugin['default'] : TimeGridPlugin;
+
+ /*! *****************************************************************************
+ 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 ResourceTimeGrid = /** @class */ (function (_super) {
+ __extends(ResourceTimeGrid, _super);
+ function ResourceTimeGrid(context, timeGrid) {
+ var _this = _super.call(this, context, timeGrid.el) || this;
+ _this.buildDayRanges = core.memoize(TimeGridPlugin.buildDayRanges);
+ _this.splitter = new ResourceCommonPlugin.VResourceSplitter();
+ _this.slicers = {};
+ _this.joiner = new ResourceTimeGridJoiner();
+ _this.timeGrid = timeGrid;
+ context.calendar.registerInteractiveComponent(_this, {
+ el: _this.timeGrid.el
+ });
+ return _this;
+ }
+ ResourceTimeGrid.prototype.destroy = function () {
+ this.calendar.unregisterInteractiveComponent(this);
+ };
+ ResourceTimeGrid.prototype.render = function (props) {
+ var _this = this;
+ var timeGrid = this.timeGrid;
+ var dateProfile = props.dateProfile, resourceDayTable = props.resourceDayTable;
+ var dayRanges = this.dayRanges = this.buildDayRanges(resourceDayTable.dayTable, dateProfile, this.dateEnv);
+ var splitProps = this.splitter.splitProps(props);
+ this.slicers = core.mapHash(splitProps, function (split, resourceId) {
+ return _this.slicers[resourceId] || new TimeGridPlugin.TimeGridSlicer();
+ });
+ var slicedProps = core.mapHash(this.slicers, function (slicer, resourceId) {
+ return slicer.sliceProps(splitProps[resourceId], dateProfile, null, timeGrid, dayRanges);
+ });
+ timeGrid.allowAcrossResources = dayRanges.length === 1;
+ timeGrid.receiveProps(__assign({}, this.joiner.joinProps(slicedProps, resourceDayTable), { dateProfile: dateProfile, cells: resourceDayTable.cells[0] }));
+ };
+ ResourceTimeGrid.prototype.renderNowIndicator = function (date) {
+ var timeGrid = this.timeGrid;
+ var resourceDayTable = this.props.resourceDayTable;
+ var nonResourceSegs = this.slicers[''].sliceNowDate(date, timeGrid, this.dayRanges);
+ var segs = this.joiner.expandSegs(resourceDayTable, nonResourceSegs);
+ timeGrid.renderNowIndicator(segs, date);
+ };
+ ResourceTimeGrid.prototype.buildPositionCaches = function () {
+ this.timeGrid.buildPositionCaches();
+ };
+ ResourceTimeGrid.prototype.queryHit = function (positionLeft, positionTop) {
+ var rawHit = this.timeGrid.positionToHit(positionLeft, positionTop);
+ if (rawHit) {
+ return {
+ component: this.timeGrid,
+ dateSpan: {
+ range: rawHit.dateSpan.range,
+ allDay: rawHit.dateSpan.allDay,
+ resourceId: this.props.resourceDayTable.cells[0][rawHit.col].resource.id
+ },
+ dayEl: rawHit.dayEl,
+ rect: {
+ left: rawHit.relativeRect.left,
+ right: rawHit.relativeRect.right,
+ top: rawHit.relativeRect.top,
+ bottom: rawHit.relativeRect.bottom
+ },
+ layer: 0
+ };
+ }
+ };
+ return ResourceTimeGrid;
+ }(core.DateComponent));
+ var ResourceTimeGridJoiner = /** @class */ (function (_super) {
+ __extends(ResourceTimeGridJoiner, _super);
+ function ResourceTimeGridJoiner() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ ResourceTimeGridJoiner.prototype.transformSeg = function (seg, resourceDayTable, resourceI) {
+ return [
+ __assign({}, seg, { col: resourceDayTable.computeCol(seg.col, resourceI) })
+ ];
+ };
+ return ResourceTimeGridJoiner;
+ }(ResourceCommonPlugin.VResourceJoiner));
+
+ var ResourceTimeGridView = /** @class */ (function (_super) {
+ __extends(ResourceTimeGridView, _super);
+ function ResourceTimeGridView(context, viewSpec, dateProfileGenerator, parentEl) {
+ var _this = _super.call(this, context, viewSpec, dateProfileGenerator, parentEl) || this;
+ _this.flattenResources = core.memoize(ResourceCommonPlugin.flattenResources);
+ _this.buildResourceDayTable = core.memoize(buildResourceDayTable);
+ _this.resourceOrderSpecs = core.parseFieldSpecs(_this.opt('resourceOrder'));
+ if (_this.opt('columnHeader')) {
+ _this.header = new ResourceCommonPlugin.ResourceDayHeader(_this.context, _this.el.querySelector('.fc-head-container'));
+ }
+ _this.resourceTimeGrid = new ResourceTimeGrid(context, _this.timeGrid);
+ if (_this.dayGrid) {
+ _this.resourceDayGrid = new resourceDaygrid.ResourceDayGrid(context, _this.dayGrid);
+ }
+ return _this;
+ }
+ ResourceTimeGridView.prototype.destroy = function () {
+ _super.prototype.destroy.call(this);
+ if (this.header) {
+ this.header.destroy();
+ }
+ this.resourceTimeGrid.destroy();
+ if (this.resourceDayGrid) {
+ this.resourceDayGrid.destroy();
+ }
+ };
+ ResourceTimeGridView.prototype.render = function (props) {
+ _super.prototype.render.call(this, props); // for flags for updateSize
+ var splitProps = this.splitter.splitProps(props);
+ var resources = this.flattenResources(props.resourceStore, this.resourceOrderSpecs);
+ var resourceDayTable = this.buildResourceDayTable(this.props.dateProfile, this.dateProfileGenerator, resources, this.opt('datesAboveResources'));
+ if (this.header) {
+ this.header.receiveProps({
+ resources: resources,
+ dates: resourceDayTable.dayTable.headerDates,
+ dateProfile: props.dateProfile,
+ datesRepDistinctDays: true,
+ renderIntroHtml: this.renderHeadIntroHtml
+ });
+ }
+ this.resourceTimeGrid.receiveProps(__assign({}, splitProps['timed'], { dateProfile: props.dateProfile, resourceDayTable: resourceDayTable }));
+ if (this.resourceDayGrid) {
+ this.resourceDayGrid.receiveProps(__assign({}, splitProps['allDay'], { dateProfile: props.dateProfile, resourceDayTable: resourceDayTable, isRigid: false, nextDayThreshold: this.nextDayThreshold }));
+ }
+ };
+ ResourceTimeGridView.prototype.renderNowIndicator = function (date) {
+ this.resourceTimeGrid.renderNowIndicator(date);
+ };
+ ResourceTimeGridView.needsResourceData = true; // for ResourceViewProps
+ return ResourceTimeGridView;
+ }(TimeGridPlugin.AbstractTimeGridView));
+ function buildResourceDayTable(dateProfile, dateProfileGenerator, resources, datesAboveResources) {
+ var dayTable = TimeGridPlugin.buildDayTable(dateProfile, dateProfileGenerator);
+ return datesAboveResources ?
+ new ResourceCommonPlugin.DayResourceTable(dayTable, resources) :
+ new ResourceCommonPlugin.ResourceDayTable(dayTable, resources);
+ }
+
+ var main = core.createPlugin({
+ deps: [ResourceCommonPlugin__default, TimeGridPlugin__default],
+ defaultView: 'resourceTimeGridDay',
+ views: {
+ resourceTimeGrid: {
+ class: ResourceTimeGridView,
+ // TODO: wish we didn't have to C&P from timeGrid's file
+ allDaySlot: true,
+ slotDuration: '00:30:00',
+ slotEventOverlap: true // a bad name. confused with overlap/constraint system
+ },
+ resourceTimeGridDay: {
+ type: 'resourceTimeGrid',
+ duration: { days: 1 }
+ },
+ resourceTimeGridWeek: {
+ type: 'resourceTimeGrid',
+ duration: { weeks: 1 }
+ }
+ }
+ });
+
+ exports.ResourceTimeGrid = ResourceTimeGrid;
+ exports.ResourceTimeGridView = ResourceTimeGridView;
+ exports.default = main;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+}));
--- /dev/null
+/*!
+FullCalendar Resource Time Grid Plugin v4.1.0
+Docs & License: https://fullcalendar.io/scheduler
+(c) 2019 Adam Shaw
+*/
+!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@fullcalendar/core"),require("@fullcalendar/resource-common"),require("@fullcalendar/timegrid"),require("@fullcalendar/resource-daygrid")):"function"==typeof define&&define.amd?define(["exports","@fullcalendar/core","@fullcalendar/resource-common","@fullcalendar/timegrid","@fullcalendar/resource-daygrid"],r):(e=e||self,r(e.FullCalendarResourceTimeGrid={},e.FullCalendar,e.FullCalendarResourceCommon,e.FullCalendarTimeGrid,e.FullCalendarResourceDayGrid))}(this,function(e,r,t,i,o){"use strict";function s(e,r){function t(){this.constructor=e}c(e,r),e.prototype=null===r?Object.create(r):(t.prototype=r.prototype,new t)}function a(e,r,o,s){var a=i.buildDayTable(e,r);return s?new t.DayResourceTable(a,o):new t.ResourceDayTable(a,o)}var n="default"in t?t["default"]:t,l="default"in i?i["default"]:i,c=function(e,r){return(c=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,r){e.__proto__=r}||function(e,r){for(var t in r)r.hasOwnProperty(t)&&(e[t]=r[t])})(e,r)},d=function(){return d=Object.assign||function(e){for(var r,t=1,i=arguments.length;t<i;t++){r=arguments[t];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e},d.apply(this,arguments)},u=function(e){function o(o,s){var a=e.call(this,o,s.el)||this;return a.buildDayRanges=r.memoize(i.buildDayRanges),a.splitter=new t.VResourceSplitter,a.slicers={},a.joiner=new p,a.timeGrid=s,o.calendar.registerInteractiveComponent(a,{el:a.timeGrid.el}),a}return s(o,e),o.prototype.destroy=function(){this.calendar.unregisterInteractiveComponent(this)},o.prototype.render=function(e){var t=this,o=this.timeGrid,s=e.dateProfile,a=e.resourceDayTable,n=this.dayRanges=this.buildDayRanges(a.dayTable,s,this.dateEnv),l=this.splitter.splitProps(e);this.slicers=r.mapHash(l,function(e,r){return t.slicers[r]||new i.TimeGridSlicer});var c=r.mapHash(this.slicers,function(e,r){return e.sliceProps(l[r],s,null,o,n)});o.allowAcrossResources=1===n.length,o.receiveProps(d({},this.joiner.joinProps(c,a),{dateProfile:s,cells:a.cells[0]}))},o.prototype.renderNowIndicator=function(e){var r=this.timeGrid,t=this.props.resourceDayTable,i=this.slicers[""].sliceNowDate(e,r,this.dayRanges),o=this.joiner.expandSegs(t,i);r.renderNowIndicator(o,e)},o.prototype.buildPositionCaches=function(){this.timeGrid.buildPositionCaches()},o.prototype.queryHit=function(e,r){var t=this.timeGrid.positionToHit(e,r);if(t)return{component:this.timeGrid,dateSpan:{range:t.dateSpan.range,allDay:t.dateSpan.allDay,resourceId:this.props.resourceDayTable.cells[0][t.col].resource.id},dayEl:t.dayEl,rect:{left:t.relativeRect.left,right:t.relativeRect.right,top:t.relativeRect.top,bottom:t.relativeRect.bottom},layer:0}},o}(r.DateComponent),p=function(e){function r(){return null!==e&&e.apply(this,arguments)||this}return s(r,e),r.prototype.transformSeg=function(e,r,t){return[d({},e,{col:r.computeCol(e.col,t)})]},r}(t.VResourceJoiner),y=function(e){function i(i,s,n,l){var c=e.call(this,i,s,n,l)||this;return c.flattenResources=r.memoize(t.flattenResources),c.buildResourceDayTable=r.memoize(a),c.resourceOrderSpecs=r.parseFieldSpecs(c.opt("resourceOrder")),c.opt("columnHeader")&&(c.header=new t.ResourceDayHeader(c.context,c.el.querySelector(".fc-head-container"))),c.resourceTimeGrid=new u(i,c.timeGrid),c.dayGrid&&(c.resourceDayGrid=new o.ResourceDayGrid(i,c.dayGrid)),c}return s(i,e),i.prototype.destroy=function(){e.prototype.destroy.call(this),this.header&&this.header.destroy(),this.resourceTimeGrid.destroy(),this.resourceDayGrid&&this.resourceDayGrid.destroy()},i.prototype.render=function(r){e.prototype.render.call(this,r);var t=this.splitter.splitProps(r),i=this.flattenResources(r.resourceStore,this.resourceOrderSpecs),o=this.buildResourceDayTable(this.props.dateProfile,this.dateProfileGenerator,i,this.opt("datesAboveResources"));this.header&&this.header.receiveProps({resources:i,dates:o.dayTable.headerDates,dateProfile:r.dateProfile,datesRepDistinctDays:!0,renderIntroHtml:this.renderHeadIntroHtml}),this.resourceTimeGrid.receiveProps(d({},t.timed,{dateProfile:r.dateProfile,resourceDayTable:o})),this.resourceDayGrid&&this.resourceDayGrid.receiveProps(d({},t.allDay,{dateProfile:r.dateProfile,resourceDayTable:o,isRigid:!1,nextDayThreshold:this.nextDayThreshold}))},i.prototype.renderNowIndicator=function(e){this.resourceTimeGrid.renderNowIndicator(e)},i.needsResourceData=!0,i}(i.AbstractTimeGridView),f=r.createPlugin({deps:[n,l],defaultView:"resourceTimeGridDay",views:{resourceTimeGrid:{"class":y,allDaySlot:!0,slotDuration:"00:30:00",slotEventOverlap:!0},resourceTimeGridDay:{type:"resourceTimeGrid",duration:{days:1}},resourceTimeGridWeek:{type:"resourceTimeGrid",duration:{weeks:1}}}});e.ResourceTimeGrid=u,e.ResourceTimeGridView=y,e["default"]=f,Object.defineProperty(e,"__esModule",{value:!0})});
\ No newline at end of file
--- /dev/null
+{
+ "_from": "@fullcalendar/resource-timegrid",
+ "_id": "@fullcalendar/resource-timegrid@4.1.0",
+ "_inBundle": false,
+ "_integrity": "sha512-QsaOapGVoJfDt6CHzooKLRFhsnQCrrH0KUC/8V1RMu5H82y4+wOqj/FN1c+4J+WbnVXvCqJe5xIAQv9/2MwjbA==",
+ "_location": "/@fullcalendar/resource-timegrid",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "tag",
+ "registry": true,
+ "raw": "@fullcalendar/resource-timegrid",
+ "name": "@fullcalendar/resource-timegrid",
+ "escapedName": "@fullcalendar%2fresource-timegrid",
+ "scope": "@fullcalendar",
+ "rawSpec": "",
+ "saveSpec": null,
+ "fetchSpec": "latest"
+ },
+ "_requiredBy": [
+ "#USER",
+ "/"
+ ],
+ "_resolved": "https://registry.npmjs.org/@fullcalendar/resource-timegrid/-/resource-timegrid-4.1.0.tgz",
+ "_shasum": "32866c7f7da644da4fd100143d836bfaf750d1ab",
+ "_spec": "@fullcalendar/resource-timegrid",
+ "_where": "C:\\Users\\ksaff\\Workspace\\Websites\\fullcalendar",
+ "author": {
+ "name": "Adam Shaw",
+ "email": "arshaw@arshaw.com",
+ "url": "http://arshaw.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/fullcalendar/fullcalendar-scheduler/issues"
+ },
+ "bundleDependencies": false,
+ "copyright": "2019 Adam Shaw",
+ "dependencies": {
+ "@fullcalendar/resource-common": "~4.1.0",
+ "@fullcalendar/resource-daygrid": "~4.1.0",
+ "@fullcalendar/timegrid": "~4.1.0"
+ },
+ "deprecated": false,
+ "description": "Displays events on a vertical resource view with time slots",
+ "docs": "https://fullcalendar.io/docs/vertical-resource-view",
+ "homepage": "https://fullcalendar.io/scheduler",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "main": "main.js",
+ "name": "@fullcalendar/resource-timegrid",
+ "peerDependencies": {
+ "@fullcalendar/core": "~4.1.0"
+ },
+ "releaseDate": "2019-04-24",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/fullcalendar/fullcalendar-scheduler.git",
+ "homepage": "https://github.com/fullcalendar/fullcalendar-scheduler"
+ },
+ "title": "FullCalendar Resource Time Grid Plugin",
+ "types": "main.d.ts",
+ "unpkg": "main.min.js",
+ "version": "4.1.0"
+}
--- /dev/null
+
+For complete licensing information, visit:
+http://fullcalendar.io/scheduler/license
+
+FullCalendar Scheduler is tri-licensed, meaning you must choose
+one of three licenses to use. Here is a summary of those licenses:
+
+- Commercial License
+ (a paid license, meant for commercial use)
+ http://fullcalendar.io/scheduler/license-details
+
+- Creative Commons Non-Commercial No-Derivatives
+ (meant for trial and non-commercial use)
+ https://creativecommons.org/licenses/by-nc-nd/4.0/
+
+- GPLv3 License
+ (meant for open-source projects)
+ http://www.gnu.org/licenses/gpl-3.0.en.html
--- /dev/null
+
+# FullCalendar Resource Timeline Plugin
+
+Display events and resources on a horizontal time axis
+
+[View the docs »](https://fullcalendar.io/docs/timeline-view)
+
+This package was created from the [FullCalendar monorepo »](https://github.com/fullcalendar/fullcalendar-scheduler)
--- /dev/null
+/*!
+FullCalendar Resource Timeline Plugin v4.1.0
+Docs & License: https://fullcalendar.io/scheduler
+(c) 2019 Adam Shaw
+*/
+/* Divider between resources and time area
+--------------------------------------------------------------------------------------------------*/
+.fc-timeline .fc-divider {
+ width: 3px;
+ border-style: double;
+ /* overcome neighboring borders */ }
+
+.fc-timeline .fc-head > tr > .fc-divider {
+ border-bottom: 0; }
+
+.fc-timeline .fc-body > tr > .fc-divider {
+ border-top: 0; }
+
+/* Resource Area
+--------------------------------------------------------------------------------------------------*/
+.fc-resource-area {
+ width: 30%; }
+
+.fc-resource-area col {
+ width: 40%;
+ min-width: 70px;
+ /* will be read by JS */ }
+
+.fc-resource-area col.fc-main-col {
+ width: 60%;
+ /* make the first column in a nested setup bigger */ }
+
+.fc-flat .fc-expander-space {
+ /* fc-flat is opposite of fc-nested */
+ display: none; }
+
+.fc-ltr .fc-resource-area tr > * {
+ text-align: left; }
+
+.fc-rtl .fc-resource-area tr > * {
+ text-align: right; }
+
+.fc-resource-area .fc-cell-content {
+ padding-left: 4px;
+ padding-right: 4px; }
+
+/* head */
+.fc-resource-area .fc-super th {
+ text-align: center; }
+
+.fc-resource-area th > div {
+ position: relative; }
+
+.fc-resource-area th .fc-cell-content {
+ position: relative;
+ z-index: 1; }
+
+.fc-resource-area th .fc-col-resizer {
+ position: absolute;
+ z-index: 2;
+ top: 0;
+ bottom: 0;
+ width: 5px; }
+
+.fc-timeline .fc-col-resizer {
+ cursor: col-resize; }
+
+.fc-ltr .fc-resource-area th .fc-col-resizer {
+ right: -3px; }
+
+.fc-rtl .fc-resource-area th .fc-col-resizer {
+ left: -3px; }
+
+/* body */
+.fc-body .fc-resource-area .fc-cell-content {
+ /* might BE the cell */
+ padding-top: 8px;
+ padding-bottom: 8px; }
+
+.fc-no-overlap .fc-body .fc-resource-area .fc-cell-content {
+ /* might BE the cell */
+ padding-top: 6px;
+ padding-bottom: 6px; }
+
+.fc-resource-area .fc-icon {
+ /* the expander and spacers before the expander */
+ display: inline-block;
+ width: 1em;
+ /* ensure constant width, esp for empty icons */
+ text-align: center; }
+
+.fc-resource-area .fc-expander {
+ cursor: pointer;
+ opacity: 0.65; }
+
+/* body resource rows */
+.fc-time-area .fc-rows {
+ position: relative;
+ z-index: 3; }
+
+.fc-time-area .fc-rows td > div {
+ position: relative; }
+
+.fc-time-area .fc-rows .fc-bgevent-container,
+.fc-time-area .fc-rows .fc-highlight-container {
+ z-index: 1; }
--- /dev/null
+declare module "@fullcalendar/resource-timeline/Row" {
+ import { Component, ComponentContext } from "@fullcalendar/core";
+ export { Row as default, Row };
+ abstract class Row<PropsType> extends Component<PropsType> {
+ spreadsheetTr: HTMLElement;
+ timeAxisTr: HTMLElement;
+ isSizeDirty: boolean;
+ constructor(context: ComponentContext, spreadsheetParent: HTMLElement, spreadsheetNextSibling: HTMLElement, timeAxisParent: HTMLElement, timeAxisNextSibling: HTMLElement);
+ destroy(): void;
+ abstract getHeightEls(): HTMLElement[];
+ updateSize(isResize: boolean): void;
+ }
+}
+
+declare module "@fullcalendar/resource-timeline/render-utils" {
+ export function updateExpanderIcon(el: HTMLElement, isExpanded: boolean): void;
+ export function clearExpanderIcon(el: HTMLElement): void;
+ export function updateTrResourceId(tr: HTMLElement, resourceId: string): void;
+}
+
+declare module "@fullcalendar/resource-timeline/GroupRow" {
+ import { Group } from "@fullcalendar/resource-common";
+ import Row from "@fullcalendar/resource-timeline/Row";
+ export interface GroupRowProps {
+ spreadsheetColCnt: number;
+ id: string;
+ isExpanded: boolean;
+ group: Group;
+ }
+ export { GroupRow as default, GroupRow };
+ class GroupRow extends Row<GroupRowProps> {
+ spreadsheetHeightEl: HTMLElement;
+ timeAxisHeightEl: HTMLElement;
+ expanderIconEl: HTMLElement;
+ private _renderCells;
+ private _updateExpanderIcon;
+ render(props: GroupRowProps): void;
+ destroy(): void;
+ renderCells(group: Group, spreadsheetColCnt: number): void;
+ unrenderCells(): void;
+ renderSpreadsheetContent(group: Group): HTMLElement;
+ renderCellText(group: Group): any;
+ getHeightEls(): HTMLElement[];
+ updateExpanderIcon(isExpanded: boolean): void;
+ onExpanderClick: (ev: UIEvent) => void;
+ }
+}
+
+declare module "@fullcalendar/resource-timeline/SpreadsheetRow" {
+ import { Component, ComponentContext } from "@fullcalendar/core";
+ import { Resource } from "@fullcalendar/resource-common";
+ export interface SpreadsheetRowProps {
+ colSpecs: any;
+ id: string;
+ rowSpans: number[];
+ depth: number;
+ isExpanded: boolean;
+ hasChildren: boolean;
+ resource: Resource;
+ }
+ export { SpreadsheetRow as default, SpreadsheetRow };
+ class SpreadsheetRow extends Component<SpreadsheetRowProps> {
+ tr: HTMLElement;
+ heightEl: HTMLElement;
+ expanderIconEl: HTMLElement;
+ private _renderRow;
+ private _updateTrResourceId;
+ private _updateExpanderIcon;
+ constructor(context: ComponentContext, tr: HTMLElement);
+ render(props: SpreadsheetRowProps): void;
+ destroy(): void;
+ renderRow(resource: Resource, rowSpans: number[], depth: number, colSpecs: any): void;
+ unrenderRow(): void;
+ updateExpanderIcon(hasChildren: boolean, isExpanded: boolean): void;
+ onExpanderClick: (ev: UIEvent) => void;
+ }
+}
+
+declare module "@fullcalendar/resource-timeline/ResourceRow" {
+ import { Duration, ComponentContext, EventInteractionState, DateSpan, EventUiHash, EventStore, DateProfile } from "@fullcalendar/core";
+ import { TimelineLane, TimeAxis } from "@fullcalendar/timeline";
+ import Row from "@fullcalendar/resource-timeline/Row";
+ import SpreadsheetRow from "@fullcalendar/resource-timeline/SpreadsheetRow";
+ import { Resource } from "@fullcalendar/resource-common";
+ export interface ResourceRowProps {
+ dateProfile: DateProfile;
+ nextDayThreshold: Duration;
+ businessHours: EventStore | null;
+ eventStore: EventStore | null;
+ eventUiBases: EventUiHash;
+ dateSelection: DateSpan | null;
+ eventSelection: string;
+ eventDrag: EventInteractionState | null;
+ eventResize: EventInteractionState | null;
+ colSpecs: any;
+ id: string;
+ rowSpans: number[];
+ depth: number;
+ isExpanded: boolean;
+ hasChildren: boolean;
+ resource: Resource;
+ }
+ export { ResourceRow as default, ResourceRow };
+ class ResourceRow extends Row<ResourceRowProps> {
+ innerContainerEl: HTMLElement;
+ spreadsheetRow: SpreadsheetRow;
+ lane: TimelineLane;
+ private _updateTrResourceId;
+ constructor(context: ComponentContext, a: any, b: any, c: any, d: any, timeAxis: TimeAxis);
+ destroy(): void;
+ render(props: ResourceRowProps): void;
+ updateSize(isResize: boolean): void;
+ getHeightEls(): HTMLElement[];
+ }
+}
+
+declare module "@fullcalendar/resource-timeline/SpreadsheetHeader" {
+ import { ElementDragging, Component, ComponentContext, EmitterMixin } from "@fullcalendar/core";
+ export interface SpreadsheetHeaderProps {
+ superHeaderText: string;
+ colSpecs: any;
+ colTags: string;
+ }
+ export { SpreadsheetHeader as default, SpreadsheetHeader };
+ class SpreadsheetHeader extends Component<SpreadsheetHeaderProps> {
+ tableEl: HTMLElement;
+ resizerEls: HTMLElement[];
+ resizables: ElementDragging[];
+ thEls: HTMLElement[];
+ colEls: HTMLElement[];
+ colWidths: number[];
+ emitter: EmitterMixin;
+ constructor(context: ComponentContext, parentEl: HTMLElement);
+ destroy(): void;
+ render(props: SpreadsheetHeaderProps): void;
+ initColResizing(): void;
+ }
+}
+
+declare module "@fullcalendar/resource-timeline/Spreadsheet" {
+ import { Component, ComponentContext } from "@fullcalendar/core";
+ import { HeaderBodyLayout } from "@fullcalendar/timeline";
+ import SpreadsheetHeader from "@fullcalendar/resource-timeline/SpreadsheetHeader";
+ export interface SpreadsheetProps {
+ superHeaderText: string;
+ colSpecs: any;
+ }
+ export { Spreadsheet as default, Spreadsheet };
+ class Spreadsheet extends Component<SpreadsheetProps> {
+ header: SpreadsheetHeader;
+ layout: HeaderBodyLayout;
+ bodyContainerEl: HTMLElement;
+ bodyColGroup: HTMLElement;
+ bodyTbody: HTMLElement;
+ bodyColEls: HTMLElement[];
+ private _renderCells;
+ constructor(context: ComponentContext, headParentEl: HTMLElement, bodyParentEl: HTMLElement);
+ destroy(): void;
+ render(props: SpreadsheetProps): void;
+ renderCells(superHeaderText: any, colSpecs: any): void;
+ unrenderCells(): void;
+ renderColTags(colSpecs: any): string;
+ updateSize(isResize: any, totalHeight: any, isAuto: any): void;
+ applyColWidths(colWidths: (number | string)[]): void;
+ }
+}
+
+declare module "@fullcalendar/resource-timeline/ResourceTimelineView" {
+ import { ElementDragging, SplittableProps, PositionCache, Hit, View, ViewSpec, ComponentContext, DateProfileGenerator, DateProfile } from "@fullcalendar/core";
+ import { ScrollJoiner, TimelineLane, StickyScroller, TimeAxis } from "@fullcalendar/timeline";
+ import { GroupNode, ResourceNode, ResourceViewProps } from "@fullcalendar/resource-common";
+ import GroupRow from "@fullcalendar/resource-timeline/GroupRow";
+ import ResourceRow from "@fullcalendar/resource-timeline/ResourceRow";
+ import Spreadsheet from "@fullcalendar/resource-timeline/Spreadsheet";
+ export { ResourceTimelineView as default, ResourceTimelineView };
+ class ResourceTimelineView extends View {
+ static needsResourceData: boolean;
+ props: ResourceViewProps;
+ spreadsheet: Spreadsheet;
+ timeAxis: TimeAxis;
+ lane: TimelineLane;
+ bodyScrollJoiner: ScrollJoiner;
+ spreadsheetBodyStickyScroller: StickyScroller;
+ isStickyScrollDirty: boolean;
+ timeAxisTbody: HTMLElement;
+ miscHeight: number;
+ rowNodes: (GroupNode | ResourceNode)[];
+ rowComponents: (GroupRow | ResourceRow)[];
+ rowComponentsById: {
+ [id: string]: (GroupRow | ResourceRow);
+ };
+ resourceAreaHeadEl: HTMLElement;
+ resourceAreaWidth?: number;
+ resourceAreaWidthDraggings: ElementDragging[];
+ superHeaderText: any;
+ isVGrouping: any;
+ isHGrouping: any;
+ groupSpecs: any;
+ colSpecs: any;
+ orderSpecs: any;
+ rowPositions: PositionCache;
+ private splitter;
+ private hasResourceBusinessHours;
+ private buildRowNodes;
+ private hasNesting;
+ private _updateHasNesting;
+ constructor(context: ComponentContext, viewSpec: ViewSpec, dateProfileGenerator: DateProfileGenerator, parentEl: HTMLElement);
+ renderSkeletonHtml(): string;
+ render(props: ResourceViewProps): void;
+ updateHasNesting(isNesting: boolean): void;
+ diffRows(newNodes: any): void;
+ addRow(index: any, rowNode: any): void;
+ removeRows(startIndex: any, len: any, oldRowNodes: any): void;
+ buildChildComponent(node: (GroupNode | ResourceNode), spreadsheetTbody: HTMLElement, spreadsheetNext: HTMLElement, timeAxisTbody: HTMLElement, timeAxisNext: HTMLElement): GroupRow | ResourceRow;
+ renderRows(dateProfile: DateProfile, fallbackBusinessHours: any, splitProps: {
+ [resourceId: string]: SplittableProps;
+ }): void;
+ updateSize(isResize: any, viewHeight: any, isAuto: any): void;
+ syncHeadHeights(): void;
+ updateRowSizes(isResize: boolean): number;
+ destroy(): void;
+ getNowIndicatorUnit(dateProfile: DateProfile): string;
+ renderNowIndicator(date: any): void;
+ unrenderNowIndicator(): void;
+ queryScroll(): any;
+ applyScroll(scroll: any, isResize: any): void;
+ computeDateScroll(timeMs: number): {
+ left: number;
+ };
+ queryDateScroll(): {
+ left: number;
+ };
+ applyDateScroll(scroll: any): void;
+ queryResourceScroll(): any;
+ applyResourceScroll(scroll: any): void;
+ buildPositionCaches(): void;
+ queryHit(positionLeft: number, positionTop: number): Hit;
+ setResourceAreaWidth(widthVal: any): void;
+ initResourceAreaWidthDragging(): void;
+ }
+}
+
+declare module "@fullcalendar/resource-timeline" {
+ import ResourceTimelineView from "@fullcalendar/resource-timeline/ResourceTimelineView";
+ export { ResourceTimelineView };
+ const _default_5: import("@fullcalendar/core").PluginDef;
+ export default _default_5;
+}
\ No newline at end of file
--- /dev/null
+/*!
+FullCalendar Resource Timeline Plugin v4.1.0
+Docs & License: https://fullcalendar.io/scheduler
+(c) 2019 Adam Shaw
+*/
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fullcalendar/core'), require('@fullcalendar/timeline'), require('@fullcalendar/resource-common')) :
+ typeof define === 'function' && define.amd ? define(['exports', '@fullcalendar/core', '@fullcalendar/timeline', '@fullcalendar/resource-common'], factory) :
+ (global = global || self, factory(global.FullCalendarResourceTimeline = {}, global.FullCalendar, global.FullCalendarTimeline, global.FullCalendarResourceCommon));
+}(this, function (exports, core, TimelinePlugin, ResourceCommonPlugin) { 'use strict';
+
+ var TimelinePlugin__default = 'default' in TimelinePlugin ? TimelinePlugin['default'] : TimelinePlugin;
+ var ResourceCommonPlugin__default = 'default' in ResourceCommonPlugin ? ResourceCommonPlugin['default'] : ResourceCommonPlugin;
+
+ /*! *****************************************************************************
+ 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 Row = /** @class */ (function (_super) {
+ __extends(Row, _super);
+ function Row(context, spreadsheetParent, spreadsheetNextSibling, timeAxisParent, timeAxisNextSibling) {
+ var _this = _super.call(this, context) || this;
+ _this.isSizeDirty = false;
+ spreadsheetParent.insertBefore(_this.spreadsheetTr = document.createElement('tr'), spreadsheetNextSibling);
+ timeAxisParent.insertBefore(_this.timeAxisTr = document.createElement('tr'), timeAxisNextSibling);
+ return _this;
+ }
+ Row.prototype.destroy = function () {
+ core.removeElement(this.spreadsheetTr);
+ core.removeElement(this.timeAxisTr);
+ _super.prototype.destroy.call(this);
+ };
+ Row.prototype.updateSize = function (isResize) {
+ this.isSizeDirty = false;
+ };
+ return Row;
+ }(core.Component));
+
+ function updateExpanderIcon(el, isExpanded) {
+ var classList = el.classList;
+ if (isExpanded) {
+ classList.remove('fc-icon-plus-square');
+ classList.add('fc-icon-minus-square');
+ }
+ else {
+ classList.remove('fc-icon-minus-square');
+ classList.add('fc-icon-plus-square');
+ }
+ }
+ function clearExpanderIcon(el) {
+ var classList = el.classList;
+ classList.remove('fc-icon-minus-square');
+ classList.remove('fc-icon-plus-square');
+ }
+ function updateTrResourceId(tr, resourceId) {
+ tr.setAttribute('data-resource-id', resourceId);
+ }
+
+ var GroupRow = /** @class */ (function (_super) {
+ __extends(GroupRow, _super);
+ function GroupRow() {
+ var _this = _super !== null && _super.apply(this, arguments) || this;
+ _this._renderCells = core.memoizeRendering(_this.renderCells, _this.unrenderCells);
+ _this._updateExpanderIcon = core.memoizeRendering(_this.updateExpanderIcon, null, [_this._renderCells]);
+ _this.onExpanderClick = function (ev) {
+ var props = _this.props;
+ _this.calendar.dispatch({
+ type: 'SET_RESOURCE_ENTITY_EXPANDED',
+ id: props.id,
+ isExpanded: !props.isExpanded
+ });
+ };
+ return _this;
+ }
+ GroupRow.prototype.render = function (props) {
+ this._renderCells(props.group, props.spreadsheetColCnt);
+ this._updateExpanderIcon(props.isExpanded);
+ this.isSizeDirty = true;
+ };
+ GroupRow.prototype.destroy = function () {
+ _super.prototype.destroy.call(this);
+ this._renderCells.unrender(); // should unrender everything else
+ };
+ GroupRow.prototype.renderCells = function (group, spreadsheetColCnt) {
+ var spreadsheetContentEl = this.renderSpreadsheetContent(group);
+ this.spreadsheetTr.appendChild(core.createElement('td', {
+ className: 'fc-divider',
+ colSpan: spreadsheetColCnt // span across all columns
+ }, this.spreadsheetHeightEl = core.createElement('div', null, spreadsheetContentEl)) // needed by setTrInnerHeight
+ );
+ this.expanderIconEl = spreadsheetContentEl.querySelector('.fc-icon');
+ this.expanderIconEl.parentElement.addEventListener('click', this.onExpanderClick);
+ // insert a single cell, with a single empty <div>.
+ // there will be no content
+ this.timeAxisTr.appendChild(core.createElement('td', { className: 'fc-divider' }, this.timeAxisHeightEl = document.createElement('div')));
+ };
+ GroupRow.prototype.unrenderCells = function () {
+ this.spreadsheetTr.innerHTML = '';
+ this.timeAxisTr.innerHTML = '';
+ };
+ /*
+ Renders the content wrapper element that will be inserted into this row's TD cell.
+ */
+ GroupRow.prototype.renderSpreadsheetContent = function (group) {
+ var text = this.renderCellText(group);
+ var contentEl = core.htmlToElement('<div class="fc-cell-content">' +
+ '<span class="fc-expander">' +
+ '<span class="fc-icon"></span>' +
+ '</span>' +
+ '<span class="fc-cell-text">' +
+ (text ? core.htmlEscape(text) : ' ') +
+ '</span>' +
+ '</div>');
+ var filter = group.spec.render;
+ if (typeof filter === 'function') {
+ contentEl = filter(contentEl, group.value) || contentEl;
+ }
+ return contentEl;
+ };
+ GroupRow.prototype.renderCellText = function (group) {
+ var text = group.value || ''; // might be null/undefined if an ad-hoc grouping
+ var filter = group.spec.text;
+ if (typeof filter === 'function') {
+ text = filter(text) || text;
+ }
+ return text;
+ };
+ GroupRow.prototype.getHeightEls = function () {
+ return [this.spreadsheetHeightEl, this.timeAxisHeightEl];
+ };
+ GroupRow.prototype.updateExpanderIcon = function (isExpanded) {
+ updateExpanderIcon(this.expanderIconEl, isExpanded);
+ };
+ return GroupRow;
+ }(Row));
+ GroupRow.addEqualityFuncs({
+ group: ResourceCommonPlugin.isGroupsEqual // HACK for ResourceTimelineView::renderRows
+ });
+
+ var SpreadsheetRow = /** @class */ (function (_super) {
+ __extends(SpreadsheetRow, _super);
+ function SpreadsheetRow(context, tr) {
+ var _this = _super.call(this, context) || this;
+ _this._renderRow = core.memoizeRendering(_this.renderRow, _this.unrenderRow);
+ _this._updateTrResourceId = core.memoizeRendering(updateTrResourceId, null, [_this._renderRow]);
+ _this._updateExpanderIcon = core.memoizeRendering(_this.updateExpanderIcon, null, [_this._renderRow]);
+ _this.onExpanderClick = function (ev) {
+ var props = _this.props;
+ _this.calendar.dispatch({
+ type: 'SET_RESOURCE_ENTITY_EXPANDED',
+ id: props.id,
+ isExpanded: !props.isExpanded
+ });
+ };
+ _this.tr = tr;
+ return _this;
+ }
+ SpreadsheetRow.prototype.render = function (props) {
+ this._renderRow(props.resource, props.rowSpans, props.depth, props.colSpecs);
+ this._updateTrResourceId(this.tr, props.resource.id); // TODO: only use public ID?
+ this._updateExpanderIcon(props.hasChildren, props.isExpanded);
+ };
+ SpreadsheetRow.prototype.destroy = function () {
+ _super.prototype.destroy.call(this);
+ this._renderRow.unrender(); // should unrender everything else
+ };
+ SpreadsheetRow.prototype.renderRow = function (resource, rowSpans, depth, colSpecs) {
+ var _a = this, tr = _a.tr, theme = _a.theme, calendar = _a.calendar, view = _a.view;
+ var resourceFields = ResourceCommonPlugin.buildResourceFields(resource); // slightly inefficient. already done up the call stack
+ var mainTd;
+ for (var i = 0; i < colSpecs.length; i++) {
+ var colSpec = colSpecs[i];
+ var rowSpan = rowSpans[i];
+ if (rowSpan === 0) { // not responsible for group-based rows. VRowGroup is
+ continue;
+ }
+ else if (rowSpan == null) {
+ rowSpan = 1;
+ }
+ var text = void 0;
+ if (colSpec.field) {
+ text = resourceFields[colSpec.field];
+ }
+ else {
+ text = ResourceCommonPlugin.buildResourceTextFunc(colSpec.text, calendar)(resource);
+ }
+ var contentEl = core.htmlToElement('<div class="fc-cell-content">' +
+ (colSpec.isMain ? renderIconHtml(depth) : '') +
+ '<span class="fc-cell-text">' +
+ (text ? core.htmlEscape(text) : ' ') +
+ '</span>' +
+ '</div>');
+ if (typeof colSpec.render === 'function') { // a filter function for the element
+ contentEl = colSpec.render(new ResourceCommonPlugin.ResourceApi(calendar, resource), contentEl) || contentEl;
+ }
+ if (rowSpan > 1) {
+ contentEl.classList.add('fc-sticky');
+ }
+ var td = core.createElement('td', {
+ className: theme.getClass('widgetContent'),
+ rowspan: rowSpan
+ }, contentEl);
+ // the first cell of the row needs to have an inner div for setTrInnerHeight
+ if (colSpec.isMain) {
+ td.appendChild(this.heightEl = core.createElement('div', null, td.childNodes) // inner wrap
+ );
+ mainTd = td;
+ }
+ tr.appendChild(td);
+ }
+ this.expanderIconEl = tr.querySelector('.fc-expander-space .fc-icon');
+ // wait until very end
+ view.publiclyTrigger('resourceRender', [
+ {
+ resource: new ResourceCommonPlugin.ResourceApi(calendar, resource),
+ el: mainTd,
+ view: view
+ }
+ ]);
+ };
+ SpreadsheetRow.prototype.unrenderRow = function () {
+ this.tr.innerHTML = '';
+ };
+ SpreadsheetRow.prototype.updateExpanderIcon = function (hasChildren, isExpanded) {
+ var expanderIconEl = this.expanderIconEl;
+ var expanderEl = expanderIconEl.parentElement;
+ if (expanderIconEl &&
+ expanderEl // why would this be null?? was the case in IE11
+ ) {
+ if (hasChildren) {
+ expanderEl.addEventListener('click', this.onExpanderClick);
+ expanderEl.classList.add('fc-expander');
+ updateExpanderIcon(expanderIconEl, isExpanded);
+ }
+ else {
+ expanderEl.removeEventListener('click', this.onExpanderClick);
+ expanderEl.classList.remove('fc-expander');
+ clearExpanderIcon(expanderIconEl);
+ }
+ }
+ };
+ return SpreadsheetRow;
+ }(core.Component));
+ /*
+ Renders the HTML responsible for the subrow expander area,
+ as well as the space before it (used to align expanders of similar depths)
+ */
+ function renderIconHtml(depth) {
+ var html = '';
+ for (var i = 0; i < depth; i++) {
+ html += '<span class="fc-icon"></span>';
+ }
+ html +=
+ '<span class="fc-expander-space">' +
+ '<span class="fc-icon"></span>' +
+ '</span>';
+ return html;
+ }
+
+ var ResourceRow = /** @class */ (function (_super) {
+ __extends(ResourceRow, _super);
+ function ResourceRow(context, a, b, c, d, timeAxis) {
+ var _this = _super.call(this, context, a, b, c, d) || this;
+ _this._updateTrResourceId = core.memoizeRendering(updateTrResourceId);
+ _this.spreadsheetRow = new SpreadsheetRow(context, _this.spreadsheetTr);
+ _this.timeAxisTr.appendChild(core.createElement('td', { className: _this.theme.getClass('widgetContent') }, _this.innerContainerEl = document.createElement('div')));
+ _this.lane = new TimelinePlugin.TimelineLane(context, _this.innerContainerEl, _this.innerContainerEl, timeAxis);
+ return _this;
+ }
+ ResourceRow.prototype.destroy = function () {
+ this.spreadsheetRow.destroy();
+ this.lane.destroy();
+ _super.prototype.destroy.call(this);
+ };
+ ResourceRow.prototype.render = function (props) {
+ // spreadsheetRow handles calling updateTrResourceId for spreadsheetTr
+ this.spreadsheetRow.receiveProps({
+ colSpecs: props.colSpecs,
+ id: props.id,
+ rowSpans: props.rowSpans,
+ depth: props.depth,
+ isExpanded: props.isExpanded,
+ hasChildren: props.hasChildren,
+ resource: props.resource
+ });
+ this._updateTrResourceId(this.timeAxisTr, props.resource.id);
+ this.lane.receiveProps({
+ dateProfile: props.dateProfile,
+ nextDayThreshold: props.nextDayThreshold,
+ businessHours: props.businessHours,
+ eventStore: props.eventStore,
+ eventUiBases: props.eventUiBases,
+ dateSelection: props.dateSelection,
+ eventSelection: props.eventSelection,
+ eventDrag: props.eventDrag,
+ eventResize: props.eventResize
+ });
+ this.isSizeDirty = true;
+ };
+ ResourceRow.prototype.updateSize = function (isResize) {
+ _super.prototype.updateSize.call(this, isResize);
+ this.lane.updateSize(isResize);
+ };
+ ResourceRow.prototype.getHeightEls = function () {
+ return [this.spreadsheetRow.heightEl, this.innerContainerEl];
+ };
+ return ResourceRow;
+ }(Row));
+ ResourceRow.addEqualityFuncs({
+ rowSpans: core.isArraysEqual // HACK for isSizeDirty, ResourceTimelineView::renderRows
+ });
+
+ var COL_MIN_WIDTH = 30;
+ var SpreadsheetHeader = /** @class */ (function (_super) {
+ __extends(SpreadsheetHeader, _super);
+ function SpreadsheetHeader(context, parentEl) {
+ var _this = _super.call(this, context) || this;
+ _this.resizables = [];
+ _this.colWidths = [];
+ _this.emitter = new core.EmitterMixin();
+ parentEl.appendChild(_this.tableEl = core.createElement('table', {
+ className: _this.theme.getClass('tableGrid')
+ }));
+ return _this;
+ }
+ SpreadsheetHeader.prototype.destroy = function () {
+ for (var _i = 0, _a = this.resizables; _i < _a.length; _i++) {
+ var resizable = _a[_i];
+ resizable.destroy();
+ }
+ core.removeElement(this.tableEl);
+ _super.prototype.destroy.call(this);
+ };
+ SpreadsheetHeader.prototype.render = function (props) {
+ var theme = this.theme;
+ var colSpecs = props.colSpecs;
+ var html = '<colgroup>' + props.colTags + '</colgroup>' +
+ '<tbody>';
+ if (props.superHeaderText) {
+ html +=
+ '<tr class="fc-super">' +
+ '<th class="' + theme.getClass('widgetHeader') + '" colspan="' + colSpecs.length + '">' +
+ '<div class="fc-cell-content">' +
+ '<span class="fc-cell-text">' +
+ core.htmlEscape(props.superHeaderText) +
+ '</span>' +
+ '</div>' +
+ '</th>' +
+ '</tr>';
+ }
+ html += '<tr>';
+ for (var i = 0; i < colSpecs.length; i++) {
+ var o = colSpecs[i];
+ var isLast = i === (colSpecs.length - 1);
+ html +=
+ "<th class=\"" + theme.getClass('widgetHeader') + "\">" +
+ '<div>' +
+ '<div class="fc-cell-content">' +
+ (o.isMain ?
+ '<span class="fc-expander-space">' +
+ '<span class="fc-icon"></span>' +
+ '</span>' :
+ '') +
+ '<span class="fc-cell-text">' +
+ core.htmlEscape(o.labelText || '') + // what about normalizing this value ahead of time?
+ '</span>' +
+ '</div>' +
+ (!isLast ? '<div class="fc-col-resizer"></div>' : '') +
+ '</div>' +
+ '</th>';
+ }
+ html += '</tr>';
+ html += '</tbody>';
+ this.tableEl.innerHTML = html;
+ this.thEls = Array.prototype.slice.call(this.tableEl.querySelectorAll('th'));
+ this.colEls = Array.prototype.slice.call(this.tableEl.querySelectorAll('col'));
+ this.resizerEls = Array.prototype.slice.call(this.tableEl.querySelectorAll('.fc-col-resizer'));
+ this.initColResizing();
+ };
+ SpreadsheetHeader.prototype.initColResizing = function () {
+ var _this = this;
+ var ElementDraggingImpl = this.calendar.pluginSystem.hooks.elementDraggingImpl;
+ if (ElementDraggingImpl) {
+ this.resizables = this.resizerEls.map(function (handleEl, colIndex) {
+ var dragging = new ElementDraggingImpl(handleEl);
+ var startWidth;
+ dragging.emitter.on('dragstart', function () {
+ startWidth = _this.colWidths[colIndex];
+ if (typeof startWidth !== 'number') {
+ startWidth = _this.thEls[colIndex].getBoundingClientRect().width;
+ }
+ });
+ dragging.emitter.on('dragmove', function (pev) {
+ _this.colWidths[colIndex] = Math.max(startWidth + pev.deltaX * (_this.isRtl ? -1 : 1), COL_MIN_WIDTH);
+ _this.emitter.trigger('colwidthchange', _this.colWidths);
+ });
+ dragging.setAutoScrollEnabled(false); // because gets weird with auto-scrolling time area
+ return dragging;
+ });
+ }
+ };
+ return SpreadsheetHeader;
+ }(core.Component));
+
+ var Spreadsheet = /** @class */ (function (_super) {
+ __extends(Spreadsheet, _super);
+ function Spreadsheet(context, headParentEl, bodyParentEl) {
+ var _this = _super.call(this, context) || this;
+ _this._renderCells = core.memoizeRendering(_this.renderCells, _this.unrenderCells);
+ _this.layout = new TimelinePlugin.HeaderBodyLayout(headParentEl, bodyParentEl, 'clipped-scroll');
+ var headerEnhancedScroller = _this.layout.headerScroller.enhancedScroll;
+ var bodyEnhancedScroller = _this.layout.bodyScroller.enhancedScroll;
+ _this.header = new SpreadsheetHeader(context, headerEnhancedScroller.canvas.contentEl);
+ _this.header.emitter.on('colwidthchange', function (colWidths) {
+ _this.applyColWidths(colWidths);
+ });
+ bodyEnhancedScroller.canvas.contentEl
+ .appendChild(_this.bodyContainerEl = core.createElement('div', { className: 'fc-rows' }, '<table>' +
+ '<colgroup />' +
+ '<tbody />' +
+ '</table>'));
+ _this.bodyColGroup = _this.bodyContainerEl.querySelector('colgroup');
+ _this.bodyTbody = _this.bodyContainerEl.querySelector('tbody');
+ return _this;
+ }
+ Spreadsheet.prototype.destroy = function () {
+ this.header.destroy();
+ this.layout.destroy();
+ this._renderCells.unrender();
+ _super.prototype.destroy.call(this);
+ };
+ Spreadsheet.prototype.render = function (props) {
+ this._renderCells(props.superHeaderText, props.colSpecs);
+ };
+ Spreadsheet.prototype.renderCells = function (superHeaderText, colSpecs) {
+ var colTags = this.renderColTags(colSpecs);
+ this.header.receiveProps({
+ superHeaderText: superHeaderText,
+ colSpecs: colSpecs,
+ colTags: colTags
+ });
+ this.bodyColGroup.innerHTML = colTags;
+ this.bodyColEls = Array.prototype.slice.call(this.bodyColGroup.querySelectorAll('col'));
+ this.applyColWidths(colSpecs.map(function (colSpec) { return colSpec.width; }));
+ };
+ Spreadsheet.prototype.unrenderCells = function () {
+ this.bodyColGroup.innerHTML = '';
+ };
+ Spreadsheet.prototype.renderColTags = function (colSpecs) {
+ var html = '';
+ for (var _i = 0, colSpecs_1 = colSpecs; _i < colSpecs_1.length; _i++) {
+ var o = colSpecs_1[_i];
+ if (o.isMain) {
+ html += '<col class="fc-main-col"/>';
+ }
+ else {
+ html += '<col/>';
+ }
+ }
+ return html;
+ };
+ Spreadsheet.prototype.updateSize = function (isResize, totalHeight, isAuto) {
+ this.layout.setHeight(totalHeight, isAuto);
+ };
+ Spreadsheet.prototype.applyColWidths = function (colWidths) {
+ var _this = this;
+ colWidths.forEach(function (colWidth, colIndex) {
+ var headEl = _this.header.colEls[colIndex]; // bad to access child
+ var bodyEl = _this.bodyColEls[colIndex];
+ var styleVal;
+ if (typeof colWidth === 'number') {
+ styleVal = colWidth + 'px';
+ }
+ else if (typeof colWidth == null) {
+ styleVal = '';
+ }
+ headEl.style.width = bodyEl.style.width = styleVal;
+ });
+ };
+ return Spreadsheet;
+ }(core.Component));
+
+ var MIN_RESOURCE_AREA_WIDTH = 30; // definitely bigger than scrollbars
+ var ResourceTimelineView = /** @class */ (function (_super) {
+ __extends(ResourceTimelineView, _super);
+ function ResourceTimelineView(context, viewSpec, dateProfileGenerator, parentEl) {
+ var _this = _super.call(this, context, viewSpec, dateProfileGenerator, parentEl) || this;
+ _this.isStickyScrollDirty = false;
+ _this.rowNodes = [];
+ _this.rowComponents = [];
+ _this.rowComponentsById = {};
+ _this.resourceAreaWidthDraggings = [];
+ _this.splitter = new ResourceCommonPlugin.ResourceSplitter(); // doesn't let it do businessHours tho
+ _this.hasResourceBusinessHours = core.memoize(hasResourceBusinessHours);
+ _this.buildRowNodes = core.memoize(ResourceCommonPlugin.buildRowNodes);
+ _this.hasNesting = core.memoize(hasNesting);
+ _this._updateHasNesting = core.memoizeRendering(_this.updateHasNesting);
+ var allColSpecs = _this.opt('resourceColumns') || [];
+ var labelText = _this.opt('resourceLabelText'); // TODO: view.override
+ var defaultLabelText = 'Resources'; // TODO: view.defaults
+ var superHeaderText = null;
+ if (!allColSpecs.length) {
+ allColSpecs.push({
+ labelText: labelText || defaultLabelText,
+ text: ResourceCommonPlugin.buildResourceTextFunc(_this.opt('resourceText'), _this.calendar)
+ });
+ }
+ else {
+ superHeaderText = labelText;
+ }
+ var plainColSpecs = [];
+ var groupColSpecs = [];
+ var groupSpecs = [];
+ var isVGrouping = false;
+ var isHGrouping = false;
+ for (var _i = 0, allColSpecs_1 = allColSpecs; _i < allColSpecs_1.length; _i++) {
+ var colSpec = allColSpecs_1[_i];
+ if (colSpec.group) {
+ groupColSpecs.push(colSpec);
+ }
+ else {
+ plainColSpecs.push(colSpec);
+ }
+ }
+ plainColSpecs[0].isMain = true;
+ if (groupColSpecs.length) {
+ groupSpecs = groupColSpecs;
+ isVGrouping = true;
+ }
+ else {
+ var hGroupField = _this.opt('resourceGroupField');
+ if (hGroupField) {
+ isHGrouping = true;
+ groupSpecs.push({
+ field: hGroupField,
+ text: _this.opt('resourceGroupText'),
+ render: _this.opt('resourceGroupRender')
+ });
+ }
+ }
+ var allOrderSpecs = core.parseFieldSpecs(_this.opt('resourceOrder'));
+ var plainOrderSpecs = [];
+ for (var _a = 0, allOrderSpecs_1 = allOrderSpecs; _a < allOrderSpecs_1.length; _a++) {
+ var orderSpec = allOrderSpecs_1[_a];
+ var isGroup = false;
+ for (var _b = 0, groupSpecs_1 = groupSpecs; _b < groupSpecs_1.length; _b++) {
+ var groupSpec = groupSpecs_1[_b];
+ if (groupSpec.field === orderSpec.field) {
+ groupSpec.order = orderSpec.order; // -1, 0, 1
+ isGroup = true;
+ break;
+ }
+ }
+ if (!isGroup) {
+ plainOrderSpecs.push(orderSpec);
+ }
+ }
+ _this.superHeaderText = superHeaderText;
+ _this.isVGrouping = isVGrouping;
+ _this.isHGrouping = isHGrouping;
+ _this.groupSpecs = groupSpecs;
+ _this.colSpecs = groupColSpecs.concat(plainColSpecs);
+ _this.orderSpecs = plainOrderSpecs;
+ // START RENDERING...
+ _this.el.classList.add('fc-timeline');
+ if (_this.opt('eventOverlap') === false) {
+ _this.el.classList.add('fc-no-overlap');
+ }
+ _this.el.innerHTML = _this.renderSkeletonHtml();
+ _this.resourceAreaHeadEl = _this.el.querySelector('thead .fc-resource-area');
+ _this.setResourceAreaWidth(_this.opt('resourceAreaWidth'));
+ _this.initResourceAreaWidthDragging();
+ _this.miscHeight = _this.el.offsetHeight;
+ _this.spreadsheet = new Spreadsheet(_this.context, _this.resourceAreaHeadEl, _this.el.querySelector('tbody .fc-resource-area'));
+ _this.timeAxis = new TimelinePlugin.TimeAxis(_this.context, _this.el.querySelector('thead .fc-time-area'), _this.el.querySelector('tbody .fc-time-area'));
+ var timeAxisRowContainer = core.createElement('div', { className: 'fc-rows' }, '<table><tbody /></table>');
+ _this.timeAxis.layout.bodyScroller.enhancedScroll.canvas.contentEl.appendChild(timeAxisRowContainer);
+ _this.timeAxisTbody = timeAxisRowContainer.querySelector('tbody');
+ _this.lane = new TimelinePlugin.TimelineLane(_this.context, null, _this.timeAxis.layout.bodyScroller.enhancedScroll.canvas.bgEl, _this.timeAxis);
+ _this.bodyScrollJoiner = new TimelinePlugin.ScrollJoiner('vertical', [
+ _this.spreadsheet.layout.bodyScroller,
+ _this.timeAxis.layout.bodyScroller
+ ]);
+ // after scrolljoiner
+ _this.spreadsheetBodyStickyScroller = new TimelinePlugin.StickyScroller(_this.spreadsheet.layout.bodyScroller.enhancedScroll, _this.isRtl, true // isVertical
+ );
+ _this.spreadsheet.receiveProps({
+ superHeaderText: _this.superHeaderText,
+ colSpecs: _this.colSpecs
+ });
+ // Component...
+ context.calendar.registerInteractiveComponent(_this, {
+ el: _this.timeAxis.slats.el
+ });
+ return _this;
+ }
+ ResourceTimelineView.prototype.renderSkeletonHtml = function () {
+ var theme = this.theme;
+ return "<table class=\"" + theme.getClass('tableGrid') + "\"> <thead class=\"fc-head\"> <tr> <td class=\"fc-resource-area " + theme.getClass('widgetHeader') + "\"></td> <td class=\"fc-divider fc-col-resizer " + theme.getClass('widgetHeader') + "\"></td> <td class=\"fc-time-area " + theme.getClass('widgetHeader') + "\"></td> </tr> </thead> <tbody class=\"fc-body\"> <tr> <td class=\"fc-resource-area " + theme.getClass('widgetContent') + "\"></td> <td class=\"fc-divider fc-col-resizer " + theme.getClass('widgetHeader') + "\"></td> <td class=\"fc-time-area " + theme.getClass('widgetContent') + "\"></td> </tr> </tbody> </table>";
+ };
+ ResourceTimelineView.prototype.render = function (props) {
+ _super.prototype.render.call(this, props);
+ var splitProps = this.splitter.splitProps(props);
+ var hasResourceBusinessHours = this.hasResourceBusinessHours(props.resourceStore);
+ this.timeAxis.receiveProps({
+ dateProfile: props.dateProfile
+ });
+ // for all-resource bg events / selections / business-hours
+ this.lane.receiveProps(__assign({}, splitProps[''], { dateProfile: props.dateProfile, nextDayThreshold: this.nextDayThreshold, businessHours: hasResourceBusinessHours ? null : props.businessHours }));
+ var newRowNodes = this.buildRowNodes(props.resourceStore, this.groupSpecs, this.orderSpecs, this.isVGrouping, props.resourceEntityExpansions, this.opt('resourcesInitiallyExpanded'));
+ this._updateHasNesting(this.hasNesting(newRowNodes));
+ this.diffRows(newRowNodes);
+ this.renderRows(props.dateProfile, hasResourceBusinessHours ? props.businessHours : null, // CONFUSING, comment
+ splitProps);
+ };
+ ResourceTimelineView.prototype.updateHasNesting = function (isNesting) {
+ var classList = this.el.classList;
+ if (isNesting) {
+ classList.remove('fc-flat');
+ }
+ else {
+ classList.add('fc-flat');
+ }
+ };
+ ResourceTimelineView.prototype.diffRows = function (newNodes) {
+ var oldNodes = this.rowNodes;
+ var oldLen = oldNodes.length;
+ var oldIndexHash = {}; // id -> index
+ var oldI = 0;
+ var newI = 0;
+ for (oldI = 0; oldI < oldLen; oldI++) {
+ oldIndexHash[oldNodes[oldI].id] = oldI;
+ }
+ // iterate new nodes
+ for (oldI = 0, newI = 0; newI < newNodes.length; newI++) {
+ var newNode = newNodes[newI];
+ var oldIFound = oldIndexHash[newNode.id];
+ if (oldIFound != null && oldIFound >= oldI) {
+ this.removeRows(newI, oldIFound - oldI, oldNodes); // won't do anything if same index
+ oldI = oldIFound + 1;
+ }
+ else {
+ this.addRow(newI, newNode);
+ }
+ }
+ // old rows that weren't found need to be removed
+ this.removeRows(newI, oldLen - oldI, oldNodes); // won't do anything if same index
+ this.rowNodes = newNodes;
+ };
+ /*
+ rowComponents is the in-progress result
+ */
+ ResourceTimelineView.prototype.addRow = function (index, rowNode) {
+ var _a = this, rowComponents = _a.rowComponents, rowComponentsById = _a.rowComponentsById;
+ var nextComponent = rowComponents[index];
+ var newComponent = this.buildChildComponent(rowNode, this.spreadsheet.bodyTbody, nextComponent ? nextComponent.spreadsheetTr : null, this.timeAxisTbody, nextComponent ? nextComponent.timeAxisTr : null);
+ rowComponents.splice(index, 0, newComponent);
+ rowComponentsById[rowNode.id] = newComponent;
+ };
+ ResourceTimelineView.prototype.removeRows = function (startIndex, len, oldRowNodes) {
+ if (len) {
+ var _a = this, rowComponents = _a.rowComponents, rowComponentsById = _a.rowComponentsById;
+ for (var i = 0; i < len; i++) {
+ var rowComponent = rowComponents[startIndex + i];
+ rowComponent.destroy();
+ delete rowComponentsById[oldRowNodes[i].id];
+ }
+ rowComponents.splice(startIndex, len);
+ }
+ };
+ ResourceTimelineView.prototype.buildChildComponent = function (node, spreadsheetTbody, spreadsheetNext, timeAxisTbody, timeAxisNext) {
+ if (node.group) {
+ return new GroupRow(this.context, spreadsheetTbody, spreadsheetNext, timeAxisTbody, timeAxisNext);
+ }
+ else if (node.resource) {
+ return new ResourceRow(this.context, spreadsheetTbody, spreadsheetNext, timeAxisTbody, timeAxisNext, this.timeAxis);
+ }
+ };
+ ResourceTimelineView.prototype.renderRows = function (dateProfile, fallbackBusinessHours, splitProps) {
+ var _a = this, rowNodes = _a.rowNodes, rowComponents = _a.rowComponents;
+ for (var i = 0; i < rowNodes.length; i++) {
+ var rowNode = rowNodes[i];
+ var rowComponent = rowComponents[i];
+ if (rowNode.group) {
+ rowComponent.receiveProps({
+ spreadsheetColCnt: this.colSpecs.length,
+ id: rowNode.id,
+ isExpanded: rowNode.isExpanded,
+ group: rowNode.group
+ });
+ }
+ else {
+ var resource = rowNode.resource;
+ rowComponent.receiveProps(__assign({}, splitProps[resource.id], { dateProfile: dateProfile, nextDayThreshold: this.nextDayThreshold, businessHours: resource.businessHours || fallbackBusinessHours, colSpecs: this.colSpecs, id: rowNode.id, rowSpans: rowNode.rowSpans, depth: rowNode.depth, isExpanded: rowNode.isExpanded, hasChildren: rowNode.hasChildren, resource: rowNode.resource }));
+ }
+ }
+ };
+ ResourceTimelineView.prototype.updateSize = function (isResize, viewHeight, isAuto) {
+ // FYI: this ordering is really important
+ var calendar = this.calendar;
+ var isBaseSizing = isResize || calendar.isViewUpdated || calendar.isDatesUpdated || calendar.isEventsUpdated;
+ if (isBaseSizing) {
+ this.syncHeadHeights();
+ this.timeAxis.updateSize(isResize, viewHeight - this.miscHeight, isAuto);
+ this.spreadsheet.updateSize(isResize, viewHeight - this.miscHeight, isAuto);
+ }
+ var rowSizingCnt = this.updateRowSizes(isResize);
+ this.lane.updateSize(isResize); // is efficient. uses flags
+ if (isBaseSizing || rowSizingCnt) {
+ this.bodyScrollJoiner.update();
+ this.timeAxis.layout.scrollJoiner.update(); // hack
+ this.rowPositions = new core.PositionCache(this.timeAxis.slats.el, this.rowComponents.map(function (rowComponent) {
+ return rowComponent.timeAxisTr;
+ }), false, // isHorizontal
+ true // isVertical
+ );
+ this.rowPositions.build();
+ this.isStickyScrollDirty = true;
+ }
+ };
+ ResourceTimelineView.prototype.syncHeadHeights = function () {
+ var spreadsheetHeadEl = this.spreadsheet.header.tableEl;
+ var timeAxisHeadEl = this.timeAxis.header.tableEl;
+ spreadsheetHeadEl.style.height = '';
+ timeAxisHeadEl.style.height = '';
+ var max = Math.max(spreadsheetHeadEl.offsetHeight, timeAxisHeadEl.offsetHeight);
+ spreadsheetHeadEl.style.height =
+ timeAxisHeadEl.style.height = max + 'px';
+ };
+ ResourceTimelineView.prototype.updateRowSizes = function (isResize) {
+ var dirtyRowComponents = this.rowComponents;
+ if (!isResize) {
+ dirtyRowComponents = dirtyRowComponents.filter(function (rowComponent) {
+ return rowComponent.isSizeDirty;
+ });
+ }
+ var elArrays = dirtyRowComponents.map(function (rowComponent) {
+ return rowComponent.getHeightEls();
+ });
+ // reset to natural heights
+ for (var _i = 0, elArrays_1 = elArrays; _i < elArrays_1.length; _i++) {
+ var elArray = elArrays_1[_i];
+ for (var _a = 0, elArray_1 = elArray; _a < elArray_1.length; _a++) {
+ var el = elArray_1[_a];
+ el.style.height = '';
+ }
+ }
+ // let rows update their contents' heights
+ for (var _b = 0, dirtyRowComponents_1 = dirtyRowComponents; _b < dirtyRowComponents_1.length; _b++) {
+ var rowComponent = dirtyRowComponents_1[_b];
+ rowComponent.updateSize(isResize); // will reset isSizeDirty
+ }
+ var maxHeights = elArrays.map(function (elArray) {
+ var maxHeight = null;
+ for (var _i = 0, elArray_2 = elArray; _i < elArray_2.length; _i++) {
+ var el = elArray_2[_i];
+ var height = el.getBoundingClientRect().height;
+ if (maxHeight === null || height > maxHeight) {
+ maxHeight = height;
+ }
+ }
+ return maxHeight;
+ });
+ for (var i = 0; i < elArrays.length; i++) {
+ for (var _c = 0, _d = elArrays[i]; _c < _d.length; _c++) {
+ var el = _d[_c];
+ el.style.height = maxHeights[i] + 'px';
+ }
+ }
+ return dirtyRowComponents.length;
+ };
+ ResourceTimelineView.prototype.destroy = function () {
+ for (var _i = 0, _a = this.rowComponents; _i < _a.length; _i++) {
+ var rowComponent = _a[_i];
+ rowComponent.destroy();
+ }
+ this.rowNodes = [];
+ this.rowComponents = [];
+ this.spreadsheet.destroy();
+ this.timeAxis.destroy();
+ for (var _b = 0, _c = this.resourceAreaWidthDraggings; _b < _c.length; _b++) {
+ var resourceAreaWidthDragging = _c[_b];
+ resourceAreaWidthDragging.destroy();
+ }
+ this.spreadsheetBodyStickyScroller.destroy();
+ _super.prototype.destroy.call(this);
+ this.calendar.unregisterInteractiveComponent(this);
+ };
+ // Now Indicator
+ // ------------------------------------------------------------------------------------------
+ ResourceTimelineView.prototype.getNowIndicatorUnit = function (dateProfile) {
+ return this.timeAxis.getNowIndicatorUnit(dateProfile);
+ };
+ ResourceTimelineView.prototype.renderNowIndicator = function (date) {
+ this.timeAxis.renderNowIndicator(date);
+ };
+ ResourceTimelineView.prototype.unrenderNowIndicator = function () {
+ this.timeAxis.unrenderNowIndicator();
+ };
+ // Scrolling
+ // ------------------------------------------------------------------------------------------------------------------
+ // this is useful for scrolling prev/next dates while resource is scrolled down
+ ResourceTimelineView.prototype.queryScroll = function () {
+ var scroll = _super.prototype.queryScroll.call(this);
+ if (this.props.resourceStore) {
+ __assign(scroll, this.queryResourceScroll());
+ }
+ return scroll;
+ };
+ ResourceTimelineView.prototype.applyScroll = function (scroll, isResize) {
+ _super.prototype.applyScroll.call(this, scroll, isResize);
+ if (this.props.resourceStore) {
+ this.applyResourceScroll(scroll);
+ }
+ // avoid updating stickyscroll too often
+ if (isResize || this.isStickyScrollDirty) {
+ this.isStickyScrollDirty = false;
+ this.spreadsheetBodyStickyScroller.updateSize();
+ this.timeAxis.updateStickyScrollers();
+ }
+ };
+ ResourceTimelineView.prototype.computeDateScroll = function (timeMs) {
+ return this.timeAxis.computeDateScroll(timeMs);
+ };
+ ResourceTimelineView.prototype.queryDateScroll = function () {
+ return this.timeAxis.queryDateScroll();
+ };
+ ResourceTimelineView.prototype.applyDateScroll = function (scroll) {
+ this.timeAxis.applyDateScroll(scroll);
+ };
+ ResourceTimelineView.prototype.queryResourceScroll = function () {
+ var _a = this, rowComponents = _a.rowComponents, rowNodes = _a.rowNodes;
+ var scroll = {};
+ var scrollerTop = this.timeAxis.layout.bodyScroller.el.getBoundingClientRect().top; // fixed position
+ for (var i = 0; i < rowComponents.length; i++) {
+ var rowComponent = rowComponents[i];
+ var rowNode = rowNodes[i];
+ var el = rowComponent.timeAxisTr;
+ var elBottom = el.getBoundingClientRect().bottom; // fixed position
+ if (elBottom > scrollerTop) {
+ scroll.rowId = rowNode.id;
+ scroll.bottom = elBottom - scrollerTop;
+ break;
+ }
+ }
+ // TODO: what about left scroll state for spreadsheet area?
+ return scroll;
+ };
+ ResourceTimelineView.prototype.applyResourceScroll = function (scroll) {
+ var rowId = scroll.forcedRowId || scroll.rowId;
+ if (rowId) {
+ var rowComponent = this.rowComponentsById[rowId];
+ if (rowComponent) {
+ var el = rowComponent.timeAxisTr;
+ if (el) {
+ var innerTop = this.timeAxis.layout.bodyScroller.enhancedScroll.canvas.el.getBoundingClientRect().top;
+ var rowRect = el.getBoundingClientRect();
+ var scrollTop = (scroll.forcedRowId ?
+ rowRect.top : // just use top edge
+ rowRect.bottom - scroll.bottom) - // pixels from bottom edge
+ innerTop;
+ this.timeAxis.layout.bodyScroller.enhancedScroll.setScrollTop(scrollTop);
+ this.spreadsheet.layout.bodyScroller.enhancedScroll.setScrollTop(scrollTop);
+ }
+ }
+ }
+ };
+ // TODO: scrollToResource
+ // Hit System
+ // ------------------------------------------------------------------------------------------
+ ResourceTimelineView.prototype.buildPositionCaches = function () {
+ this.timeAxis.slats.updateSize();
+ this.rowPositions.build();
+ };
+ ResourceTimelineView.prototype.queryHit = function (positionLeft, positionTop) {
+ var rowPositions = this.rowPositions;
+ var slats = this.timeAxis.slats;
+ var rowIndex = rowPositions.topToIndex(positionTop);
+ if (rowIndex != null) {
+ var resource = this.rowNodes[rowIndex].resource;
+ if (resource) { // not a group
+ var slatHit = slats.positionToHit(positionLeft);
+ if (slatHit) {
+ return {
+ component: this,
+ dateSpan: {
+ range: slatHit.dateSpan.range,
+ allDay: slatHit.dateSpan.allDay,
+ resourceId: resource.id
+ },
+ rect: {
+ left: slatHit.left,
+ right: slatHit.right,
+ top: rowPositions.tops[rowIndex],
+ bottom: rowPositions.bottoms[rowIndex]
+ },
+ dayEl: slatHit.dayEl,
+ layer: 0
+ };
+ }
+ }
+ }
+ };
+ // Resource Area
+ // ------------------------------------------------------------------------------------------------------------------
+ ResourceTimelineView.prototype.setResourceAreaWidth = function (widthVal) {
+ this.resourceAreaWidth = widthVal;
+ core.applyStyleProp(this.resourceAreaHeadEl, 'width', widthVal || '');
+ };
+ ResourceTimelineView.prototype.initResourceAreaWidthDragging = function () {
+ var _this = this;
+ var resourceAreaDividerEls = Array.prototype.slice.call(this.el.querySelectorAll('.fc-col-resizer'));
+ var ElementDraggingImpl = this.calendar.pluginSystem.hooks.elementDraggingImpl;
+ if (ElementDraggingImpl) {
+ this.resourceAreaWidthDraggings = resourceAreaDividerEls.map(function (el) {
+ var dragging = new ElementDraggingImpl(el);
+ var dragStartWidth;
+ var viewWidth;
+ dragging.emitter.on('dragstart', function () {
+ dragStartWidth = _this.resourceAreaWidth;
+ if (typeof dragStartWidth !== 'number') {
+ dragStartWidth = _this.resourceAreaHeadEl.getBoundingClientRect().width;
+ }
+ viewWidth = _this.el.getBoundingClientRect().width;
+ });
+ dragging.emitter.on('dragmove', function (pev) {
+ var newWidth = dragStartWidth + pev.deltaX * (_this.isRtl ? -1 : 1);
+ newWidth = Math.max(newWidth, MIN_RESOURCE_AREA_WIDTH);
+ newWidth = Math.min(newWidth, viewWidth - MIN_RESOURCE_AREA_WIDTH);
+ _this.setResourceAreaWidth(newWidth);
+ });
+ dragging.setAutoScrollEnabled(false); // because gets weird with auto-scrolling time area
+ return dragging;
+ });
+ }
+ };
+ ResourceTimelineView.needsResourceData = true; // for ResourceViewProps
+ return ResourceTimelineView;
+ }(core.View));
+ function hasResourceBusinessHours(resourceStore) {
+ for (var resourceId in resourceStore) {
+ var resource = resourceStore[resourceId];
+ if (resource.businessHours) {
+ return true;
+ }
+ }
+ return false;
+ }
+ function hasNesting(nodes) {
+ for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {
+ var node = nodes_1[_i];
+ if (node.group) {
+ return true;
+ }
+ else if (node.resource) {
+ if (node.hasChildren) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ var main = core.createPlugin({
+ deps: [ResourceCommonPlugin__default, TimelinePlugin__default],
+ defaultView: 'resourceTimelineDay',
+ views: {
+ resourceTimeline: {
+ class: ResourceTimelineView,
+ resourceAreaWidth: '30%',
+ resourcesInitiallyExpanded: true,
+ eventResizableFromStart: true // TODO: not DRY with this same setting in the main timeline config
+ },
+ resourceTimelineDay: {
+ type: 'resourceTimeline',
+ duration: { days: 1 }
+ },
+ resourceTimelineWeek: {
+ type: 'resourceTimeline',
+ duration: { weeks: 1 }
+ },
+ resourceTimelineMonth: {
+ type: 'resourceTimeline',
+ duration: { months: 1 }
+ },
+ resourceTimelineYear: {
+ type: 'resourceTimeline',
+ duration: { years: 1 }
+ }
+ }
+ });
+
+ exports.ResourceTimelineView = ResourceTimelineView;
+ exports.default = main;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+}));
--- /dev/null
+/*!
+FullCalendar Resource Timeline Plugin v4.1.0
+Docs & License: https://fullcalendar.io/scheduler
+(c) 2019 Adam Shaw
+*/.fc-timeline .fc-divider{width:3px;border-style:double}.fc-timeline .fc-head>tr>.fc-divider{border-bottom:0}.fc-timeline .fc-body>tr>.fc-divider{border-top:0}.fc-resource-area{width:30%}.fc-resource-area col{width:40%;min-width:70px}.fc-resource-area col.fc-main-col{width:60%}.fc-flat .fc-expander-space{display:none}.fc-ltr .fc-resource-area tr>*{text-align:left}.fc-rtl .fc-resource-area tr>*{text-align:right}.fc-resource-area .fc-cell-content{padding-left:4px;padding-right:4px}.fc-resource-area .fc-super th{text-align:center}.fc-resource-area th>div{position:relative}.fc-resource-area th .fc-cell-content{position:relative;z-index:1}.fc-resource-area th .fc-col-resizer{position:absolute;z-index:2;top:0;bottom:0;width:5px}.fc-timeline .fc-col-resizer{cursor:col-resize}.fc-ltr .fc-resource-area th .fc-col-resizer{right:-3px}.fc-rtl .fc-resource-area th .fc-col-resizer{left:-3px}.fc-body .fc-resource-area .fc-cell-content{padding-top:8px;padding-bottom:8px}.fc-no-overlap .fc-body .fc-resource-area .fc-cell-content{padding-top:6px;padding-bottom:6px}.fc-resource-area .fc-icon{display:inline-block;width:1em;text-align:center}.fc-resource-area .fc-expander{cursor:pointer;opacity:.65}.fc-time-area .fc-rows{position:relative;z-index:3}.fc-time-area .fc-rows td>div{position:relative}.fc-time-area .fc-rows .fc-bgevent-container,.fc-time-area .fc-rows .fc-highlight-container{z-index:1}
\ No newline at end of file
--- /dev/null
+/*!
+FullCalendar Resource Timeline Plugin v4.1.0
+Docs & License: https://fullcalendar.io/scheduler
+(c) 2019 Adam Shaw
+*/
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@fullcalendar/core"),require("@fullcalendar/timeline"),require("@fullcalendar/resource-common")):"function"==typeof define&&define.amd?define(["exports","@fullcalendar/core","@fullcalendar/timeline","@fullcalendar/resource-common"],t):(e=e||self,t(e.FullCalendarResourceTimeline={},e.FullCalendar,e.FullCalendarTimeline,e.FullCalendarResourceCommon))}(this,function(e,t,r,o){"use strict";function i(e,t){function r(){this.constructor=e}h(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}function s(e,t){var r=e.classList;t?(r.remove("fc-icon-plus-square"),r.add("fc-icon-minus-square")):(r.remove("fc-icon-minus-square"),r.add("fc-icon-plus-square"))}function n(e){var t=e.classList;t.remove("fc-icon-minus-square"),t.remove("fc-icon-plus-square")}function l(e,t){e.setAttribute("data-resource-id",t)}function a(e){for(var t="",r=0;r<e;r++)t+='<span class="fc-icon"></span>';return t+='<span class="fc-expander-space"><span class="fc-icon"></span></span>'}function c(e){for(var t in e){var r=e[t];if(r.businessHours)return!0}return!1}function d(e){for(var t=0,r=e;t<r.length;t++){var o=r[t];if(o.group)return!0;if(o.resource&&o.hasChildren)return!0}return!1}var p="default"in r?r["default"]:r,u="default"in o?o["default"]:o,h=function(e,t){return(h=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)},y=function(){return y=Object.assign||function(e){for(var t,r=1,o=arguments.length;r<o;r++){t=arguments[r];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])}return e},y.apply(this,arguments)},f=function(e){function r(t,r,o,i,s){var n=e.call(this,t)||this;return n.isSizeDirty=!1,r.insertBefore(n.spreadsheetTr=document.createElement("tr"),o),i.insertBefore(n.timeAxisTr=document.createElement("tr"),s),n}return i(r,e),r.prototype.destroy=function(){t.removeElement(this.spreadsheetTr),t.removeElement(this.timeAxisTr),e.prototype.destroy.call(this)},r.prototype.updateSize=function(e){this.isSizeDirty=!1},r}(t.Component),m=function(e){function r(){var r=null!==e&&e.apply(this,arguments)||this;return r._renderCells=t.memoizeRendering(r.renderCells,r.unrenderCells),r._updateExpanderIcon=t.memoizeRendering(r.updateExpanderIcon,null,[r._renderCells]),r.onExpanderClick=function(e){var t=r.props;r.calendar.dispatch({type:"SET_RESOURCE_ENTITY_EXPANDED",id:t.id,isExpanded:!t.isExpanded})},r}return i(r,e),r.prototype.render=function(e){this._renderCells(e.group,e.spreadsheetColCnt),this._updateExpanderIcon(e.isExpanded),this.isSizeDirty=!0},r.prototype.destroy=function(){e.prototype.destroy.call(this),this._renderCells.unrender()},r.prototype.renderCells=function(e,r){var o=this.renderSpreadsheetContent(e);this.spreadsheetTr.appendChild(t.createElement("td",{className:"fc-divider",colSpan:r},this.spreadsheetHeightEl=t.createElement("div",null,o))),this.expanderIconEl=o.querySelector(".fc-icon"),this.expanderIconEl.parentElement.addEventListener("click",this.onExpanderClick),this.timeAxisTr.appendChild(t.createElement("td",{className:"fc-divider"},this.timeAxisHeightEl=document.createElement("div")))},r.prototype.unrenderCells=function(){this.spreadsheetTr.innerHTML="",this.timeAxisTr.innerHTML=""},r.prototype.renderSpreadsheetContent=function(e){var r=this.renderCellText(e),o=t.htmlToElement('<div class="fc-cell-content"><span class="fc-expander"><span class="fc-icon"></span></span><span class="fc-cell-text">'+(r?t.htmlEscape(r):" ")+"</span></div>"),i=e.spec.render;return"function"==typeof i&&(o=i(o,e.value)||o),o},r.prototype.renderCellText=function(e){var t=e.value||"",r=e.spec.text;return"function"==typeof r&&(t=r(t)||t),t},r.prototype.getHeightEls=function(){return[this.spreadsheetHeightEl,this.timeAxisHeightEl]},r.prototype.updateExpanderIcon=function(e){s(this.expanderIconEl,e)},r}(f);m.addEqualityFuncs({group:o.isGroupsEqual});var g=function(e){function r(r,o){var i=e.call(this,r)||this;return i._renderRow=t.memoizeRendering(i.renderRow,i.unrenderRow),i._updateTrResourceId=t.memoizeRendering(l,null,[i._renderRow]),i._updateExpanderIcon=t.memoizeRendering(i.updateExpanderIcon,null,[i._renderRow]),i.onExpanderClick=function(e){var t=i.props;i.calendar.dispatch({type:"SET_RESOURCE_ENTITY_EXPANDED",id:t.id,isExpanded:!t.isExpanded})},i.tr=o,i}return i(r,e),r.prototype.render=function(e){this._renderRow(e.resource,e.rowSpans,e.depth,e.colSpecs),this._updateTrResourceId(this.tr,e.resource.id),this._updateExpanderIcon(e.hasChildren,e.isExpanded)},r.prototype.destroy=function(){e.prototype.destroy.call(this),this._renderRow.unrender()},r.prototype.renderRow=function(e,r,i,s){for(var n,l=this,c=l.tr,d=l.theme,p=l.calendar,u=l.view,h=o.buildResourceFields(e),y=0;y<s.length;y++){var f=s[y],m=r[y];if(0!==m){null==m&&(m=1);var g=void 0;g=f.field?h[f.field]:o.buildResourceTextFunc(f.text,p)(e);var v=t.htmlToElement('<div class="fc-cell-content">'+(f.isMain?a(i):"")+'<span class="fc-cell-text">'+(g?t.htmlEscape(g):" ")+"</span></div>");"function"==typeof f.render&&(v=f.render(new o.ResourceApi(p,e),v)||v),m>1&&v.classList.add("fc-sticky");var S=t.createElement("td",{className:d.getClass("widgetContent"),rowspan:m},v);f.isMain&&(S.appendChild(this.heightEl=t.createElement("div",null,S.childNodes)),n=S),c.appendChild(S)}}this.expanderIconEl=c.querySelector(".fc-expander-space .fc-icon"),u.publiclyTrigger("resourceRender",[{resource:new o.ResourceApi(p,e),el:n,view:u}])},r.prototype.unrenderRow=function(){this.tr.innerHTML=""},r.prototype.updateExpanderIcon=function(e,t){var r=this.expanderIconEl,o=r.parentElement;r&&o&&(e?(o.addEventListener("click",this.onExpanderClick),o.classList.add("fc-expander"),s(r,t)):(o.removeEventListener("click",this.onExpanderClick),o.classList.remove("fc-expander"),n(r)))},r}(t.Component),v=function(e){function o(o,i,s,n,a,c){var d=e.call(this,o,i,s,n,a)||this;return d._updateTrResourceId=t.memoizeRendering(l),d.spreadsheetRow=new g(o,d.spreadsheetTr),d.timeAxisTr.appendChild(t.createElement("td",{className:d.theme.getClass("widgetContent")},d.innerContainerEl=document.createElement("div"))),d.lane=new r.TimelineLane(o,d.innerContainerEl,d.innerContainerEl,c),d}return i(o,e),o.prototype.destroy=function(){this.spreadsheetRow.destroy(),this.lane.destroy(),e.prototype.destroy.call(this)},o.prototype.render=function(e){this.spreadsheetRow.receiveProps({colSpecs:e.colSpecs,id:e.id,rowSpans:e.rowSpans,depth:e.depth,isExpanded:e.isExpanded,hasChildren:e.hasChildren,resource:e.resource}),this._updateTrResourceId(this.timeAxisTr,e.resource.id),this.lane.receiveProps({dateProfile:e.dateProfile,nextDayThreshold:e.nextDayThreshold,businessHours:e.businessHours,eventStore:e.eventStore,eventUiBases:e.eventUiBases,dateSelection:e.dateSelection,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize}),this.isSizeDirty=!0},o.prototype.updateSize=function(t){e.prototype.updateSize.call(this,t),this.lane.updateSize(t)},o.prototype.getHeightEls=function(){return[this.spreadsheetRow.heightEl,this.innerContainerEl]},o}(f);v.addEqualityFuncs({rowSpans:t.isArraysEqual});var S=30,x=function(e){function r(r,o){var i=e.call(this,r)||this;return i.resizables=[],i.colWidths=[],i.emitter=new t.EmitterMixin,o.appendChild(i.tableEl=t.createElement("table",{className:i.theme.getClass("tableGrid")})),i}return i(r,e),r.prototype.destroy=function(){for(var r=0,o=this.resizables;r<o.length;r++){var i=o[r];i.destroy()}t.removeElement(this.tableEl),e.prototype.destroy.call(this)},r.prototype.render=function(e){var r=this.theme,o=e.colSpecs,i="<colgroup>"+e.colTags+"</colgroup><tbody>";e.superHeaderText&&(i+='<tr class="fc-super"><th class="'+r.getClass("widgetHeader")+'" colspan="'+o.length+'"><div class="fc-cell-content"><span class="fc-cell-text">'+t.htmlEscape(e.superHeaderText)+"</span></div></th></tr>"),i+="<tr>";for(var s=0;s<o.length;s++){var n=o[s],l=s===o.length-1;i+='<th class="'+r.getClass("widgetHeader")+'"><div><div class="fc-cell-content">'+(n.isMain?'<span class="fc-expander-space"><span class="fc-icon"></span></span>':"")+'<span class="fc-cell-text">'+t.htmlEscape(n.labelText||"")+"</span></div>"+(l?"":'<div class="fc-col-resizer"></div>')+"</div></th>"}i+="</tr>",i+="</tbody>",this.tableEl.innerHTML=i,this.thEls=Array.prototype.slice.call(this.tableEl.querySelectorAll("th")),this.colEls=Array.prototype.slice.call(this.tableEl.querySelectorAll("col")),this.resizerEls=Array.prototype.slice.call(this.tableEl.querySelectorAll(".fc-col-resizer")),this.initColResizing()},r.prototype.initColResizing=function(){var e=this,t=this.calendar.pluginSystem.hooks.elementDraggingImpl;t&&(this.resizables=this.resizerEls.map(function(r,o){var i,s=new t(r);return s.emitter.on("dragstart",function(){i=e.colWidths[o],"number"!=typeof i&&(i=e.thEls[o].getBoundingClientRect().width)}),s.emitter.on("dragmove",function(t){e.colWidths[o]=Math.max(i+t.deltaX*(e.isRtl?-1:1),S),e.emitter.trigger("colwidthchange",e.colWidths)}),s.setAutoScrollEnabled(!1),s}))},r}(t.Component),E=function(e){function o(o,i,s){var n=e.call(this,o)||this;n._renderCells=t.memoizeRendering(n.renderCells,n.unrenderCells),n.layout=new r.HeaderBodyLayout(i,s,"clipped-scroll");var l=n.layout.headerScroller.enhancedScroll,a=n.layout.bodyScroller.enhancedScroll;return n.header=new x(o,l.canvas.contentEl),n.header.emitter.on("colwidthchange",function(e){n.applyColWidths(e)}),a.canvas.contentEl.appendChild(n.bodyContainerEl=t.createElement("div",{className:"fc-rows"},"<table><colgroup /><tbody /></table>")),n.bodyColGroup=n.bodyContainerEl.querySelector("colgroup"),n.bodyTbody=n.bodyContainerEl.querySelector("tbody"),n}return i(o,e),o.prototype.destroy=function(){this.header.destroy(),this.layout.destroy(),this._renderCells.unrender(),e.prototype.destroy.call(this)},o.prototype.render=function(e){this._renderCells(e.superHeaderText,e.colSpecs)},o.prototype.renderCells=function(e,t){var r=this.renderColTags(t);this.header.receiveProps({superHeaderText:e,colSpecs:t,colTags:r}),this.bodyColGroup.innerHTML=r,this.bodyColEls=Array.prototype.slice.call(this.bodyColGroup.querySelectorAll("col")),this.applyColWidths(t.map(function(e){return e.width}))},o.prototype.unrenderCells=function(){this.bodyColGroup.innerHTML=""},o.prototype.renderColTags=function(e){for(var t="",r=0,o=e;r<o.length;r++){var i=o[r];t+=i.isMain?'<col class="fc-main-col"/>':"<col/>"}return t},o.prototype.updateSize=function(e,t,r){this.layout.setHeight(t,r)},o.prototype.applyColWidths=function(e){var t=this;e.forEach(function(e,r){var o,i=t.header.colEls[r],s=t.bodyColEls[r];"number"==typeof e?o=e+"px":null==typeof e&&(o=""),i.style.width=s.style.width=o})},o}(t.Component),C=30,w=function(e){function s(i,s,n,l){var a=e.call(this,i,s,n,l)||this;a.isStickyScrollDirty=!1,a.rowNodes=[],a.rowComponents=[],a.rowComponentsById={},a.resourceAreaWidthDraggings=[],a.splitter=new o.ResourceSplitter,a.hasResourceBusinessHours=t.memoize(c),a.buildRowNodes=t.memoize(o.buildRowNodes),a.hasNesting=t.memoize(d),a._updateHasNesting=t.memoizeRendering(a.updateHasNesting);var p=a.opt("resourceColumns")||[],u=a.opt("resourceLabelText"),h="Resources",y=null;p.length?y=u:p.push({labelText:u||h,text:o.buildResourceTextFunc(a.opt("resourceText"),a.calendar)});for(var f=[],m=[],g=[],v=!1,S=!1,x=0,C=p;x<C.length;x++){var w=C[x];w.group?m.push(w):f.push(w)}if(f[0].isMain=!0,m.length)g=m,v=!0;else{var b=a.opt("resourceGroupField");b&&(S=!0,g.push({field:b,text:a.opt("resourceGroupText"),render:a.opt("resourceGroupRender")}))}for(var T=t.parseFieldSpecs(a.opt("resourceOrder")),R=[],A=0,H=T;A<H.length;A++){for(var z=H[A],I=!1,D=0,_=g;D<_.length;D++){var q=_[D];if(q.field===z.field){q.order=z.order,I=!0;break}}I||R.push(z)}a.superHeaderText=y,a.isVGrouping=v,a.isHGrouping=S,a.groupSpecs=g,a.colSpecs=m.concat(f),a.orderSpecs=R,a.el.classList.add("fc-timeline"),a.opt("eventOverlap")===!1&&a.el.classList.add("fc-no-overlap"),a.el.innerHTML=a.renderSkeletonHtml(),a.resourceAreaHeadEl=a.el.querySelector("thead .fc-resource-area"),a.setResourceAreaWidth(a.opt("resourceAreaWidth")),a.initResourceAreaWidthDragging(),a.miscHeight=a.el.offsetHeight,a.spreadsheet=new E(a.context,a.resourceAreaHeadEl,a.el.querySelector("tbody .fc-resource-area")),a.timeAxis=new r.TimeAxis(a.context,a.el.querySelector("thead .fc-time-area"),a.el.querySelector("tbody .fc-time-area"));var N=t.createElement("div",{className:"fc-rows"},"<table><tbody /></table>");return a.timeAxis.layout.bodyScroller.enhancedScroll.canvas.contentEl.appendChild(N),a.timeAxisTbody=N.querySelector("tbody"),a.lane=new r.TimelineLane(a.context,null,a.timeAxis.layout.bodyScroller.enhancedScroll.canvas.bgEl,a.timeAxis),a.bodyScrollJoiner=new r.ScrollJoiner("vertical",[a.spreadsheet.layout.bodyScroller,a.timeAxis.layout.bodyScroller]),a.spreadsheetBodyStickyScroller=new r.StickyScroller(a.spreadsheet.layout.bodyScroller.enhancedScroll,a.isRtl,(!0)),a.spreadsheet.receiveProps({superHeaderText:a.superHeaderText,colSpecs:a.colSpecs}),i.calendar.registerInteractiveComponent(a,{el:a.timeAxis.slats.el}),a}return i(s,e),s.prototype.renderSkeletonHtml=function(){var e=this.theme;return'<table class="'+e.getClass("tableGrid")+'"> <thead class="fc-head"> <tr> <td class="fc-resource-area '+e.getClass("widgetHeader")+'"></td> <td class="fc-divider fc-col-resizer '+e.getClass("widgetHeader")+'"></td> <td class="fc-time-area '+e.getClass("widgetHeader")+'"></td> </tr> </thead> <tbody class="fc-body"> <tr> <td class="fc-resource-area '+e.getClass("widgetContent")+'"></td> <td class="fc-divider fc-col-resizer '+e.getClass("widgetHeader")+'"></td> <td class="fc-time-area '+e.getClass("widgetContent")+'"></td> </tr> </tbody> </table>'},s.prototype.render=function(t){e.prototype.render.call(this,t);var r=this.splitter.splitProps(t),o=this.hasResourceBusinessHours(t.resourceStore);this.timeAxis.receiveProps({dateProfile:t.dateProfile}),this.lane.receiveProps(y({},r[""],{dateProfile:t.dateProfile,nextDayThreshold:this.nextDayThreshold,businessHours:o?null:t.businessHours}));var i=this.buildRowNodes(t.resourceStore,this.groupSpecs,this.orderSpecs,this.isVGrouping,t.resourceEntityExpansions,this.opt("resourcesInitiallyExpanded"));this._updateHasNesting(this.hasNesting(i)),this.diffRows(i),this.renderRows(t.dateProfile,o?t.businessHours:null,r)},s.prototype.updateHasNesting=function(e){var t=this.el.classList;e?t.remove("fc-flat"):t.add("fc-flat")},s.prototype.diffRows=function(e){var t=this.rowNodes,r=t.length,o={},i=0,s=0;for(i=0;i<r;i++)o[t[i].id]=i;for(i=0,s=0;s<e.length;s++){var n=e[s],l=o[n.id];null!=l&&l>=i?(this.removeRows(s,l-i,t),i=l+1):this.addRow(s,n)}this.removeRows(s,r-i,t),this.rowNodes=e},s.prototype.addRow=function(e,t){var r=this,o=r.rowComponents,i=r.rowComponentsById,s=o[e],n=this.buildChildComponent(t,this.spreadsheet.bodyTbody,s?s.spreadsheetTr:null,this.timeAxisTbody,s?s.timeAxisTr:null);o.splice(e,0,n),i[t.id]=n},s.prototype.removeRows=function(e,t,r){if(t){for(var o=this,i=o.rowComponents,s=o.rowComponentsById,n=0;n<t;n++){var l=i[e+n];l.destroy(),delete s[r[n].id]}i.splice(e,t)}},s.prototype.buildChildComponent=function(e,t,r,o,i){return e.group?new m(this.context,t,r,o,i):e.resource?new v(this.context,t,r,o,i,this.timeAxis):void 0},s.prototype.renderRows=function(e,t,r){for(var o=this,i=o.rowNodes,s=o.rowComponents,n=0;n<i.length;n++){var l=i[n],a=s[n];if(l.group)a.receiveProps({spreadsheetColCnt:this.colSpecs.length,id:l.id,isExpanded:l.isExpanded,group:l.group});else{var c=l.resource;a.receiveProps(y({},r[c.id],{dateProfile:e,nextDayThreshold:this.nextDayThreshold,businessHours:c.businessHours||t,colSpecs:this.colSpecs,id:l.id,rowSpans:l.rowSpans,depth:l.depth,isExpanded:l.isExpanded,hasChildren:l.hasChildren,resource:l.resource}))}}},s.prototype.updateSize=function(e,r,o){var i=this.calendar,s=e||i.isViewUpdated||i.isDatesUpdated||i.isEventsUpdated;s&&(this.syncHeadHeights(),this.timeAxis.updateSize(e,r-this.miscHeight,o),this.spreadsheet.updateSize(e,r-this.miscHeight,o));var n=this.updateRowSizes(e);this.lane.updateSize(e),(s||n)&&(this.bodyScrollJoiner.update(),this.timeAxis.layout.scrollJoiner.update(),this.rowPositions=new t.PositionCache(this.timeAxis.slats.el,this.rowComponents.map(function(e){return e.timeAxisTr}),(!1),(!0)),this.rowPositions.build(),this.isStickyScrollDirty=!0)},s.prototype.syncHeadHeights=function(){var e=this.spreadsheet.header.tableEl,t=this.timeAxis.header.tableEl;e.style.height="",t.style.height="";var r=Math.max(e.offsetHeight,t.offsetHeight);e.style.height=t.style.height=r+"px"},s.prototype.updateRowSizes=function(e){var t=this.rowComponents;e||(t=t.filter(function(e){return e.isSizeDirty}));for(var r=t.map(function(e){return e.getHeightEls()}),o=0,i=r;o<i.length;o++)for(var s=i[o],n=0,l=s;n<l.length;n++){var a=l[n];a.style.height=""}for(var c=0,d=t;c<d.length;c++){var p=d[c];p.updateSize(e)}for(var u=r.map(function(e){for(var t=null,r=0,o=e;r<o.length;r++){var i=o[r],s=i.getBoundingClientRect().height;(null===t||s>t)&&(t=s)}return t}),h=0;h<r.length;h++)for(var y=0,f=r[h];y<f.length;y++){var a=f[y];a.style.height=u[h]+"px"}return t.length},s.prototype.destroy=function(){for(var t=0,r=this.rowComponents;t<r.length;t++){var o=r[t];o.destroy()}this.rowNodes=[],this.rowComponents=[],this.spreadsheet.destroy(),this.timeAxis.destroy();for(var i=0,s=this.resourceAreaWidthDraggings;i<s.length;i++){var n=s[i];n.destroy()}this.spreadsheetBodyStickyScroller.destroy(),e.prototype.destroy.call(this),this.calendar.unregisterInteractiveComponent(this)},s.prototype.getNowIndicatorUnit=function(e){return this.timeAxis.getNowIndicatorUnit(e)},s.prototype.renderNowIndicator=function(e){this.timeAxis.renderNowIndicator(e)},s.prototype.unrenderNowIndicator=function(){this.timeAxis.unrenderNowIndicator()},s.prototype.queryScroll=function(){var t=e.prototype.queryScroll.call(this);return this.props.resourceStore&&y(t,this.queryResourceScroll()),t},s.prototype.applyScroll=function(t,r){e.prototype.applyScroll.call(this,t,r),this.props.resourceStore&&this.applyResourceScroll(t),(r||this.isStickyScrollDirty)&&(this.isStickyScrollDirty=!1,this.spreadsheetBodyStickyScroller.updateSize(),this.timeAxis.updateStickyScrollers())},s.prototype.computeDateScroll=function(e){return this.timeAxis.computeDateScroll(e)},s.prototype.queryDateScroll=function(){return this.timeAxis.queryDateScroll()},s.prototype.applyDateScroll=function(e){this.timeAxis.applyDateScroll(e)},s.prototype.queryResourceScroll=function(){for(var e=this,t=e.rowComponents,r=e.rowNodes,o={},i=this.timeAxis.layout.bodyScroller.el.getBoundingClientRect().top,s=0;s<t.length;s++){var n=t[s],l=r[s],a=n.timeAxisTr,c=a.getBoundingClientRect().bottom;if(c>i){o.rowId=l.id,o.bottom=c-i;break}}return o},s.prototype.applyResourceScroll=function(e){var t=e.forcedRowId||e.rowId;if(t){var r=this.rowComponentsById[t];if(r){var o=r.timeAxisTr;if(o){var i=this.timeAxis.layout.bodyScroller.enhancedScroll.canvas.el.getBoundingClientRect().top,s=o.getBoundingClientRect(),n=(e.forcedRowId?s.top:s.bottom-e.bottom)-i;this.timeAxis.layout.bodyScroller.enhancedScroll.setScrollTop(n),this.spreadsheet.layout.bodyScroller.enhancedScroll.setScrollTop(n)}}}},s.prototype.buildPositionCaches=function(){this.timeAxis.slats.updateSize(),this.rowPositions.build()},s.prototype.queryHit=function(e,t){var r=this.rowPositions,o=this.timeAxis.slats,i=r.topToIndex(t);if(null!=i){var s=this.rowNodes[i].resource;if(s){var n=o.positionToHit(e);if(n)return{component:this,dateSpan:{range:n.dateSpan.range,allDay:n.dateSpan.allDay,resourceId:s.id},rect:{left:n.left,right:n.right,top:r.tops[i],bottom:r.bottoms[i]},dayEl:n.dayEl,layer:0}}}},s.prototype.setResourceAreaWidth=function(e){this.resourceAreaWidth=e,t.applyStyleProp(this.resourceAreaHeadEl,"width",e||"")},s.prototype.initResourceAreaWidthDragging=function(){var e=this,t=Array.prototype.slice.call(this.el.querySelectorAll(".fc-col-resizer")),r=this.calendar.pluginSystem.hooks.elementDraggingImpl;r&&(this.resourceAreaWidthDraggings=t.map(function(t){var o,i,s=new r(t);return s.emitter.on("dragstart",function(){o=e.resourceAreaWidth,"number"!=typeof o&&(o=e.resourceAreaHeadEl.getBoundingClientRect().width),i=e.el.getBoundingClientRect().width}),s.emitter.on("dragmove",function(t){var r=o+t.deltaX*(e.isRtl?-1:1);r=Math.max(r,C),r=Math.min(r,i-C),e.setResourceAreaWidth(r)}),s.setAutoScrollEnabled(!1),s}))},s.needsResourceData=!0,s}(t.View),b=t.createPlugin({deps:[u,p],defaultView:"resourceTimelineDay",views:{resourceTimeline:{"class":w,resourceAreaWidth:"30%",resourcesInitiallyExpanded:!0,eventResizableFromStart:!0},resourceTimelineDay:{type:"resourceTimeline",duration:{days:1}},resourceTimelineWeek:{type:"resourceTimeline",duration:{weeks:1}},resourceTimelineMonth:{type:"resourceTimeline",duration:{months:1}},resourceTimelineYear:{type:"resourceTimeline",duration:{years:1}}}});e.ResourceTimelineView=w,e["default"]=b,Object.defineProperty(e,"__esModule",{value:!0})});
\ No newline at end of file
--- /dev/null
+{
+ "_from": "@fullcalendar/resource-timeline",
+ "_id": "@fullcalendar/resource-timeline@4.1.0",
+ "_inBundle": false,
+ "_integrity": "sha512-/FZpwyjvZD3IhV+Y2yLnqiiXEbN0AeZDmb5ACGOqHrqDyEnA+gkbOq83K46lf9CGJOMlE9jqb5Hbx7VMRxGaEA==",
+ "_location": "/@fullcalendar/resource-timeline",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "tag",
+ "registry": true,
+ "raw": "@fullcalendar/resource-timeline",
+ "name": "@fullcalendar/resource-timeline",
+ "escapedName": "@fullcalendar%2fresource-timeline",
+ "scope": "@fullcalendar",
+ "rawSpec": "",
+ "saveSpec": null,
+ "fetchSpec": "latest"
+ },
+ "_requiredBy": [
+ "#USER",
+ "/"
+ ],
+ "_resolved": "https://registry.npmjs.org/@fullcalendar/resource-timeline/-/resource-timeline-4.1.0.tgz",
+ "_shasum": "d4e8ee18a98c55f138a4dfe73e1fe8fda6ac721a",
+ "_spec": "@fullcalendar/resource-timeline",
+ "_where": "C:\\Users\\ksaff\\Workspace\\Websites\\fullcalendar",
+ "author": {
+ "name": "Adam Shaw",
+ "email": "arshaw@arshaw.com",
+ "url": "http://arshaw.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/fullcalendar/fullcalendar-scheduler/issues"
+ },
+ "bundleDependencies": false,
+ "copyright": "2019 Adam Shaw",
+ "dependencies": {
+ "@fullcalendar/resource-common": "~4.1.0",
+ "@fullcalendar/timeline": "~4.1.0"
+ },
+ "deprecated": false,
+ "description": "Display events and resources on a horizontal time axis",
+ "docs": "https://fullcalendar.io/docs/timeline-view",
+ "homepage": "https://fullcalendar.io/scheduler",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "main": "main.js",
+ "name": "@fullcalendar/resource-timeline",
+ "peerDependencies": {
+ "@fullcalendar/core": "~4.1.0"
+ },
+ "releaseDate": "2019-04-24",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/fullcalendar/fullcalendar-scheduler.git",
+ "homepage": "https://github.com/fullcalendar/fullcalendar-scheduler"
+ },
+ "title": "FullCalendar Resource Timeline Plugin",
+ "types": "main.d.ts",
+ "unpkg": "main.min.js",
+ "version": "4.1.0"
+}
--- /dev/null
+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.
--- /dev/null
+
+# FullCalendar RRule Plugin
+
+A connector to the RRule library, for recurring events
+
+[View the docs »](https://fullcalendar.io/docs/rrule-plugin)
+
+This package was created from the [FullCalendar monorepo »](https://github.com/fullcalendar/fullcalendar)
--- /dev/null
+declare module "@fullcalendar/rrule" {
+ const _default_13: import("@fullcalendar/core/plugin-system").PluginDef;
+ export default _default_13;
+}
\ No newline at end of file
--- /dev/null
+/*!
+FullCalendar RRule Plugin v4.1.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/core')) :
+ typeof define === 'function' && define.amd ? define(['exports', 'rrule', '@fullcalendar/core'], factory) :
+ (global = global || self, factory(global.FullCalendarRrule = {}, global.rrule, global.FullCalendar));
+}(this, function (exports, rrule, 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);
+ };
+
+ var EVENT_DEF_PROPS = {
+ rrule: null,
+ duration: core.createDuration
+ };
+ var recurring = {
+ parse: function (rawEvent, leftoverProps, dateEnv) {
+ if (rawEvent.rrule != null) {
+ var props = core.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) {
+ // we WANT an inclusive start and in exclusive end, but the js rrule lib will only do either BOTH
+ // inclusive or BOTH exclusive, which is stupid: https://github.com/jakubroztocil/rrule/issues/84
+ // Workaround: make inclusive, which will generate extra occurences, and then trim.
+ return rrule.between(framingRange.start, framingRange.end, true)
+ .filter(function (date) {
+ return date.valueOf() < framingRange.end.valueOf();
+ });
+ }
+ };
+ var main = core.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) { // non-null object
+ var refined = __assign({}, input); // copy
+ 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; // convert Sunday-first to Monday-first
+ }
+ if (refined.byweekday != null) {
+ refined.byweekday = convertConstants(refined.byweekday); // the plural version
+ }
+ 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 });
+
+}));
--- /dev/null
+/*!
+FullCalendar RRule Plugin v4.1.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/core")):"function"==typeof define&&define.amd?define(["exports","rrule","@fullcalendar/core"],r):(e=e||self,r(e.FullCalendarRrule={},e.rrule,e.FullCalendar))}(this,function(e,r,t){"use strict";function n(e,t){var n,i=null;if("string"==typeof e)n=r.rrulestr(e);else if("object"==typeof e&&e){var f=a({},e);if("string"==typeof f.dtstart){var o=t.createMarkerMeta(f.dtstart);o?(f.dtstart=o.marker,i=o.isTimeUnspecified):delete f.dtstart}"string"==typeof f.until&&(f.until=t.createMarker(f.until)),null!=f.freq&&(f.freq=l(f.freq)),null!=f.wkst?f.wkst=l(f.wkst):f.wkst=(t.weekDow-1+7)%7,null!=f.byweekday&&(f.byweekday=u(f.byweekday)),n=new r.RRule(f)}return n?{rrule:n,allDayGuess:i}:null}function u(e){return Array.isArray(e)?e.map(l):l(e)}function l(e){return"string"==typeof e?r.RRule[e.toUpperCase()]:e}/*! *****************************************************************************
+ 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 a=function(){return a=Object.assign||function(e){for(var r,t=1,n=arguments.length;t<n;t++){r=arguments[t];for(var u in r)Object.prototype.hasOwnProperty.call(r,u)&&(e[u]=r[u])}return e},a.apply(this,arguments)},i={rrule:null,duration:t.createDuration},f={parse:function(e,r,u){if(null!=e.rrule){var l=t.refineProps(e,i,{},r),a=n(l.rrule,u);if(a)return{typeData:a.rrule,allDayGuess:a.allDayGuess,duration:l.duration}}return null},expand:function(e,r){return e.between(r.start,r.end,!0).filter(function(e){return e.valueOf()<r.end.valueOf()})}},o=t.createPlugin({recurringTypes:[f]});e.default=o,Object.defineProperty(e,"__esModule",{value:!0})});
\ No newline at end of file
--- /dev/null
+{
+ "_from": "@fullcalendar/rrule@^4.1.0",
+ "_id": "@fullcalendar/rrule@4.1.0",
+ "_inBundle": false,
+ "_integrity": "sha512-wkHgJS36GdX4o3evfF6CHlIgy+eq5Kr6UOvCarI8LFHt5FHNZxQdIqXpeasUrx3wCJnPC/CnVdecohmbBXaZjg==",
+ "_location": "/@fullcalendar/rrule",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "@fullcalendar/rrule@^4.1.0",
+ "name": "@fullcalendar/rrule",
+ "escapedName": "@fullcalendar%2frrule",
+ "scope": "@fullcalendar",
+ "rawSpec": "^4.1.0",
+ "saveSpec": null,
+ "fetchSpec": "^4.1.0"
+ },
+ "_requiredBy": [
+ "#USER",
+ "/"
+ ],
+ "_resolved": "https://registry.npmjs.org/@fullcalendar/rrule/-/rrule-4.1.0.tgz",
+ "_shasum": "f80fd4811a2d2bdc2a3598783964faee862adeef",
+ "_spec": "@fullcalendar/rrule@^4.1.0",
+ "_where": "C:\\Users\\ksaff\\Workspace\\Websites\\fullcalendar",
+ "author": {
+ "name": "Adam Shaw",
+ "email": "arshaw@arshaw.com",
+ "url": "http://arshaw.com/"
+ },
+ "bugs": {
+ "url": "https://fullcalendar.io/reporting-bugs"
+ },
+ "bundleDependencies": false,
+ "copyright": "2019 Adam Shaw",
+ "deprecated": false,
+ "description": "A connector to the RRule library, for recurring events",
+ "docs": "https://fullcalendar.io/docs/rrule-plugin",
+ "homepage": "https://fullcalendar.io/",
+ "keywords": [
+ "calendar",
+ "event",
+ "full-sized"
+ ],
+ "license": "MIT",
+ "main": "main.js",
+ "name": "@fullcalendar/rrule",
+ "peerDependencies": {
+ "rrule": "^2.6.0",
+ "@fullcalendar/core": "~4.1.0"
+ },
+ "releaseDate": "2019-04-24",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/fullcalendar/fullcalendar.git",
+ "homepage": "https://github.com/fullcalendar/fullcalendar"
+ },
+ "title": "FullCalendar RRule Plugin",
+ "types": "main.d.ts",
+ "unpkg": "main.min.js",
+ "version": "4.1.0"
+}
--- /dev/null
+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.
--- /dev/null
+
+# FullCalendar Time Grid Plugin
+
+Display your events on a grid of time slots
+
+[View the docs »](https://fullcalendar.io/docs/timegrid-view)
+
+This package was created from the [FullCalendar monorepo »](https://github.com/fullcalendar/fullcalendar)
--- /dev/null
+/*!
+FullCalendar Time Grid Plugin v4.1.0
+Docs & License: https://fullcalendar.io/
+(c) 2019 Adam Shaw
+*/
+/* TimeGridView all-day area
+--------------------------------------------------------------------------------------------------*/
+.fc-timeGrid-view .fc-day-grid {
+ position: relative;
+ z-index: 2;
+ /* so the "more.." popover will be over the time grid */ }
+
+.fc-timeGrid-view .fc-day-grid .fc-row {
+ min-height: 3em;
+ /* all-day section will never get shorter than this */ }
+
+.fc-timeGrid-view .fc-day-grid .fc-row .fc-content-skeleton {
+ padding-bottom: 1em;
+ /* give space underneath events for clicking/selecting days */ }
+
+/* TimeGrid axis running down the side (for both the all-day area and the slot area)
+--------------------------------------------------------------------------------------------------*/
+.fc .fc-axis {
+ /* .fc to overcome default cell styles */
+ vertical-align: middle;
+ padding: 0 4px;
+ white-space: nowrap; }
+
+.fc-ltr .fc-axis {
+ text-align: right; }
+
+.fc-rtl .fc-axis {
+ text-align: left; }
+
+/* TimeGrid Structure
+--------------------------------------------------------------------------------------------------*/
+.fc-time-grid-container,
+.fc-time-grid {
+ /* so slats/bg/content/etc positions get scoped within here */
+ position: relative;
+ z-index: 1; }
+
+.fc-time-grid {
+ min-height: 100%;
+ /* so if height setting is 'auto', .fc-bg stretches to fill height */ }
+
+.fc-time-grid table {
+ /* don't put outer borders on slats/bg/content/etc */
+ border: 0 hidden transparent; }
+
+.fc-time-grid > .fc-bg {
+ z-index: 1; }
+
+.fc-time-grid .fc-slats,
+.fc-time-grid > hr {
+ /* the <hr> TimeGridView injects when grid is shorter than scroller */
+ position: relative;
+ z-index: 2; }
+
+.fc-time-grid .fc-content-col {
+ position: relative;
+ /* because now-indicator lives directly inside */ }
+
+.fc-time-grid .fc-content-skeleton {
+ position: absolute;
+ z-index: 3;
+ top: 0;
+ left: 0;
+ right: 0; }
+
+/* divs within a cell within the fc-content-skeleton */
+.fc-time-grid .fc-business-container {
+ position: relative;
+ z-index: 1; }
+
+.fc-time-grid .fc-bgevent-container {
+ position: relative;
+ z-index: 2; }
+
+.fc-time-grid .fc-highlight-container {
+ position: relative;
+ z-index: 3; }
+
+.fc-time-grid .fc-event-container {
+ position: relative;
+ z-index: 4; }
+
+.fc-time-grid .fc-now-indicator-line {
+ z-index: 5; }
+
+.fc-time-grid .fc-mirror-container {
+ /* also is fc-event-container */
+ position: relative;
+ z-index: 6; }
+
+/* TimeGrid Slats (lines that run horizontally)
+--------------------------------------------------------------------------------------------------*/
+.fc-time-grid .fc-slats td {
+ height: 1.5em;
+ border-bottom: 0;
+ /* each cell is responsible for its top border */ }
+
+.fc-time-grid .fc-slats .fc-minor td {
+ border-top-style: dotted; }
+
+/* TimeGrid Highlighting Slots
+--------------------------------------------------------------------------------------------------*/
+.fc-time-grid .fc-highlight-container {
+ /* a div within a cell within the fc-highlight-skeleton */
+ position: relative;
+ /* scopes the left/right of the fc-highlight to be in the column */ }
+
+.fc-time-grid .fc-highlight {
+ position: absolute;
+ left: 0;
+ right: 0;
+ /* top and bottom will be in by JS */ }
+
+/* TimeGrid Event Containment
+--------------------------------------------------------------------------------------------------*/
+.fc-ltr .fc-time-grid .fc-event-container {
+ /* space on the sides of events for LTR (default) */
+ margin: 0 2.5% 0 2px; }
+
+.fc-rtl .fc-time-grid .fc-event-container {
+ /* space on the sides of events for RTL */
+ margin: 0 2px 0 2.5%; }
+
+.fc-time-grid .fc-event,
+.fc-time-grid .fc-bgevent {
+ position: absolute;
+ z-index: 1;
+ /* scope inner z-index's */ }
+
+.fc-time-grid .fc-bgevent {
+ /* background events always span full width */
+ left: 0;
+ right: 0; }
+
+/* TimeGrid Event Styling
+----------------------------------------------------------------------------------------------------
+We use the full "fc-time-grid-event" class instead of using descendants because the event won't
+be a descendant of the grid when it is being dragged.
+*/
+.fc-time-grid-event {
+ margin-bottom: 1px; }
+
+.fc-time-grid-event-inset {
+ -webkit-box-shadow: 0px 0px 0px 1px #fff;
+ box-shadow: 0px 0px 0px 1px #fff; }
+
+.fc-time-grid-event.fc-not-start {
+ /* events that are continuing from another day */
+ /* replace space made by the top border with padding */
+ border-top-width: 0;
+ padding-top: 1px;
+ /* remove top rounded corners */
+ border-top-left-radius: 0;
+ border-top-right-radius: 0; }
+
+.fc-time-grid-event.fc-not-end {
+ /* replace space made by the top border with padding */
+ border-bottom-width: 0;
+ padding-bottom: 1px;
+ /* remove bottom rounded corners */
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0; }
+
+.fc-time-grid-event .fc-content {
+ overflow: hidden;
+ max-height: 100%; }
+
+.fc-time-grid-event .fc-time,
+.fc-time-grid-event .fc-title {
+ padding: 0 1px; }
+
+.fc-time-grid-event .fc-time {
+ font-size: .85em;
+ white-space: nowrap; }
+
+/* short mode, where time and title are on the same line */
+.fc-time-grid-event.fc-short .fc-content {
+ /* don't wrap to second line (now that contents will be inline) */
+ white-space: nowrap; }
+
+.fc-time-grid-event.fc-short .fc-time,
+.fc-time-grid-event.fc-short .fc-title {
+ /* put the time and title on the same line */
+ display: inline-block;
+ vertical-align: top; }
+
+.fc-time-grid-event.fc-short .fc-time span {
+ display: none;
+ /* don't display the full time text... */ }
+
+.fc-time-grid-event.fc-short .fc-time:before {
+ content: attr(data-start);
+ /* ...instead, display only the start time */ }
+
+.fc-time-grid-event.fc-short .fc-time:after {
+ content: "\000A0-\000A0";
+ /* seperate with a dash, wrapped in nbsp's */ }
+
+.fc-time-grid-event.fc-short .fc-title {
+ font-size: .85em;
+ /* make the title text the same size as the time */
+ padding: 0;
+ /* undo padding from above */ }
+
+/* resizer (cursor device) */
+.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer {
+ left: 0;
+ right: 0;
+ bottom: 0;
+ height: 8px;
+ overflow: hidden;
+ line-height: 8px;
+ font-size: 11px;
+ font-family: monospace;
+ text-align: center;
+ cursor: s-resize; }
+
+.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after {
+ content: "="; }
+
+/* resizer (touch device) */
+.fc-time-grid-event.fc-selected .fc-resizer {
+ /* 10x10 dot */
+ border-radius: 5px;
+ border-width: 1px;
+ width: 8px;
+ height: 8px;
+ border-style: solid;
+ border-color: inherit;
+ background: #fff;
+ /* horizontally center */
+ left: 50%;
+ margin-left: -5px;
+ /* center on the bottom edge */
+ bottom: -5px; }
+
+/* Now Indicator
+--------------------------------------------------------------------------------------------------*/
+.fc-time-grid .fc-now-indicator-line {
+ border-top-width: 1px;
+ left: 0;
+ right: 0; }
+
+/* arrow on axis */
+.fc-time-grid .fc-now-indicator-arrow {
+ margin-top: -5px;
+ /* vertically center on top coordinate */ }
+
+.fc-ltr .fc-time-grid .fc-now-indicator-arrow {
+ left: 0;
+ /* triangle pointing right... */
+ border-width: 5px 0 5px 6px;
+ border-top-color: transparent;
+ border-bottom-color: transparent; }
+
+.fc-rtl .fc-time-grid .fc-now-indicator-arrow {
+ right: 0;
+ /* triangle pointing left... */
+ border-width: 5px 6px 5px 0;
+ border-top-color: transparent;
+ border-bottom-color: transparent; }
--- /dev/null
+declare module "@fullcalendar/timegrid/TimeGridEventRenderer" {
+ import { DateFormatter, FgEventRenderer, Seg } from "@fullcalendar/core";
+ import TimeGrid from "@fullcalendar/timegrid/TimeGrid";
+ export { TimeGridEventRenderer as default, TimeGridEventRenderer };
+ class TimeGridEventRenderer extends FgEventRenderer {
+ timeGrid: TimeGrid;
+ segsByCol: any;
+ fullTimeFormat: DateFormatter;
+ constructor(timeGrid: TimeGrid);
+ attachSegs(segs: Seg[], mirrorInfo: any): void;
+ detachSegs(segs: Seg[]): void;
+ computeSegSizes(allSegs: Seg[]): void;
+ assignSegSizes(allSegs: Seg[]): void;
+ computeEventTimeFormat(): {
+ hour: string;
+ minute: string;
+ meridiem: boolean;
+ };
+ computeDisplayEventEnd(): boolean;
+ renderSegHtml(seg: Seg, mirrorInfo: any): string;
+ computeSegHorizontals(segs: Seg[]): void;
+ computeSegForwardBack(seg: Seg, seriesBackwardPressure: any, seriesBackwardCoord: any): void;
+ sortForwardSegs(forwardSegs: Seg[]): any[];
+ assignSegCss(segs: Seg[]): void;
+ generateSegCss(seg: Seg): any;
+ }
+}
+
+declare module "@fullcalendar/timegrid/TimeGridMirrorRenderer" {
+ import { Seg } from "@fullcalendar/core";
+ import TimeGridEventRenderer from "@fullcalendar/timegrid/TimeGridEventRenderer";
+ export { TimeGridMirrorRenderer as default, TimeGridMirrorRenderer };
+ class TimeGridMirrorRenderer extends TimeGridEventRenderer {
+ sourceSeg: Seg;
+ attachSegs(segs: Seg[], mirrorInfo: any): void;
+ generateSegCss(seg: Seg): any;
+ }
+}
+
+declare module "@fullcalendar/timegrid/TimeGridFillRenderer" {
+ import { FillRenderer, Seg } from "@fullcalendar/core";
+ import TimeGrid from "@fullcalendar/timegrid/TimeGrid";
+ export { TimeGridFillRenderer as default, TimeGridFillRenderer };
+ class TimeGridFillRenderer extends FillRenderer {
+ timeGrid: TimeGrid;
+ constructor(timeGrid: TimeGrid);
+ attachSegs(type: any, segs: Seg[]): HTMLElement[];
+ computeSegSizes(segs: Seg[]): void;
+ assignSegSizes(segs: Seg[]): void;
+ }
+}
+
+declare module "@fullcalendar/timegrid/TimeGrid" {
+ import { PositionCache, Duration, DateMarker, DateFormatter, ComponentContext, DateComponent, Seg, EventSegUiInteractionState, DateProfile } from "@fullcalendar/core";
+ export interface RenderProps {
+ renderBgIntroHtml: () => string;
+ renderIntroHtml: () => string;
+ }
+ export interface TimeGridSeg extends Seg {
+ col: number;
+ start: DateMarker;
+ end: DateMarker;
+ }
+ export interface TimeGridCell {
+ date: DateMarker;
+ htmlAttrs?: string;
+ }
+ export interface TimeGridProps {
+ dateProfile: DateProfile;
+ cells: TimeGridCell[];
+ businessHourSegs: TimeGridSeg[];
+ bgEventSegs: TimeGridSeg[];
+ fgEventSegs: TimeGridSeg[];
+ dateSelectionSegs: TimeGridSeg[];
+ eventSelection: string;
+ eventDrag: EventSegUiInteractionState | null;
+ eventResize: EventSegUiInteractionState | null;
+ }
+ export { TimeGrid as default, TimeGrid };
+ class TimeGrid extends DateComponent<TimeGridProps> {
+ renderProps: RenderProps;
+ slotDuration: Duration;
+ snapDuration: Duration;
+ snapsPerSlot: any;
+ labelFormat: DateFormatter;
+ labelInterval: Duration;
+ colCnt: number;
+ colEls: HTMLElement[];
+ slatContainerEl: HTMLElement;
+ slatEls: HTMLElement[];
+ nowIndicatorEls: HTMLElement[];
+ colPositions: PositionCache;
+ slatPositions: PositionCache;
+ isSlatSizesDirty: boolean;
+ isColSizesDirty: boolean;
+ rootBgContainerEl: HTMLElement;
+ bottomRuleEl: HTMLElement;
+ contentSkeletonEl: HTMLElement;
+ colContainerEls: HTMLElement[];
+ fgContainerEls: HTMLElement[];
+ bgContainerEls: HTMLElement[];
+ mirrorContainerEls: HTMLElement[];
+ highlightContainerEls: HTMLElement[];
+ businessContainerEls: HTMLElement[];
+ private renderSlats;
+ private renderColumns;
+ private renderBusinessHours;
+ private renderDateSelection;
+ private renderBgEvents;
+ private renderFgEvents;
+ private renderEventSelection;
+ private renderEventDrag;
+ private renderEventResize;
+ constructor(context: ComponentContext, el: HTMLElement, renderProps: RenderProps);
+ processOptions(): void;
+ computeLabelInterval(slotDuration: any): any;
+ render(props: TimeGridProps): void;
+ destroy(): void;
+ updateSize(isResize: boolean): void;
+ _renderSlats(dateProfile: DateProfile): void;
+ renderSlatRowHtml(dateProfile: DateProfile): string;
+ _renderColumns(cells: TimeGridCell[], dateProfile: DateProfile): void;
+ _unrenderColumns(): void;
+ renderContentSkeleton(): void;
+ unrenderContentSkeleton(): void;
+ groupSegsByCol(segs: any): any[];
+ attachSegsByCol(segsByCol: any, containerEls: HTMLElement[]): void;
+ getNowIndicatorUnit(): string;
+ renderNowIndicator(segs: TimeGridSeg[], date: any): void;
+ unrenderNowIndicator(): void;
+ getTotalSlatHeight(): number;
+ computeDateTop(when: DateMarker, startOfDayDate?: DateMarker): any;
+ computeTimeTop(timeMs: number): any;
+ computeSegVerticals(segs: any): void;
+ assignSegVerticals(segs: any): void;
+ generateSegVerticalCss(seg: any): {
+ top: any;
+ bottom: number;
+ };
+ buildPositionCaches(): void;
+ buildColPositions(): void;
+ buildSlatPositions(): void;
+ positionToHit(positionLeft: any, positionTop: any): {
+ col: any;
+ dateSpan: {
+ range: {
+ start: Date;
+ end: Date;
+ };
+ allDay: boolean;
+ };
+ dayEl: HTMLElement;
+ relativeRect: {
+ left: any;
+ right: any;
+ top: any;
+ bottom: any;
+ };
+ };
+ _renderEventDrag(state: EventSegUiInteractionState): void;
+ _unrenderEventDrag(state: EventSegUiInteractionState): void;
+ _renderEventResize(state: EventSegUiInteractionState): void;
+ _unrenderEventResize(state: EventSegUiInteractionState): void;
+ _renderDateSelection(segs: Seg[]): void;
+ _unrenderDateSelection(segs: Seg[]): void;
+ }
+}
+
+declare module "@fullcalendar/timegrid/AllDaySplitter" {
+ import { Splitter, EventDef, DateSpan } from "@fullcalendar/core";
+ export { AllDaySplitter as default, AllDaySplitter };
+ class AllDaySplitter extends Splitter {
+ getKeyInfo(): {
+ allDay: {};
+ timed: {};
+ };
+ getKeysForDateSpan(dateSpan: DateSpan): string[];
+ getKeysForEventDef(eventDef: EventDef): string[];
+ }
+}
+
+declare module "@fullcalendar/timegrid/AbstractTimeGridView" {
+ import { ScrollComponent, View, ViewSpec, DateProfileGenerator, ComponentContext } from "@fullcalendar/core";
+ import { DayGrid } from "@fullcalendar/daygrid";
+ import TimeGrid from "@fullcalendar/timegrid/TimeGrid";
+ import AllDaySplitter from "@fullcalendar/timegrid/AllDaySplitter";
+ export { TimeGridView as default, TimeGridView };
+ abstract class TimeGridView extends View {
+ timeGrid: TimeGrid;
+ dayGrid: DayGrid;
+ scroller: ScrollComponent;
+ axisWidth: any;
+ protected splitter: AllDaySplitter;
+ constructor(context: ComponentContext, viewSpec: ViewSpec, dateProfileGenerator: DateProfileGenerator, parentEl: HTMLElement);
+ destroy(): void;
+ renderSkeletonHtml(): string;
+ getNowIndicatorUnit(): string;
+ unrenderNowIndicator(): void;
+ updateSize(isResize: boolean, viewHeight: number, isAuto: boolean): void;
+ updateBaseSize(isResize: any, viewHeight: any, isAuto: any): void;
+ computeScrollerHeight(viewHeight: any): number;
+ computeDateScroll(timeMs: number): {
+ top: any;
+ };
+ queryDateScroll(): {
+ top: number;
+ };
+ applyDateScroll(scroll: any): void;
+ renderHeadIntroHtml: () => string;
+ axisStyleAttr(): string;
+ renderTimeGridBgIntroHtml: () => string;
+ renderTimeGridIntroHtml: () => string;
+ renderDayGridBgIntroHtml: () => string;
+ renderDayGridIntroHtml: () => string;
+ }
+}
+
+declare module "@fullcalendar/timegrid/SimpleTimeGrid" {
+ import { DateComponent, DateProfile, EventStore, EventUiHash, EventInteractionState, DateSpan, DateRange, DayTable, DateEnv, DateMarker, Slicer, Hit, ComponentContext } from "@fullcalendar/core";
+ import TimeGrid, { TimeGridSeg } from "@fullcalendar/timegrid/TimeGrid";
+ export interface SimpleTimeGridProps {
+ dateProfile: DateProfile | null;
+ dayTable: DayTable;
+ businessHours: EventStore;
+ eventStore: EventStore;
+ eventUiBases: EventUiHash;
+ dateSelection: DateSpan | null;
+ eventSelection: string;
+ eventDrag: EventInteractionState | null;
+ eventResize: EventInteractionState | null;
+ }
+ export { SimpleTimeGrid as default, SimpleTimeGrid };
+ class SimpleTimeGrid extends DateComponent<SimpleTimeGridProps> {
+ timeGrid: TimeGrid;
+ private buildDayRanges;
+ private dayRanges;
+ private slicer;
+ constructor(context: ComponentContext, timeGrid: TimeGrid);
+ destroy(): void;
+ render(props: SimpleTimeGridProps): void;
+ renderNowIndicator(date: DateMarker): void;
+ buildPositionCaches(): void;
+ queryHit(positionLeft: number, positionTop: number): Hit;
+ }
+ export function buildDayRanges(dayTable: DayTable, dateProfile: DateProfile, dateEnv: DateEnv): DateRange[];
+ export class TimeGridSlicer extends Slicer<TimeGridSeg, [DateRange[]]> {
+ sliceRange(range: DateRange, dayRanges: DateRange[]): TimeGridSeg[];
+ }
+}
+
+declare module "@fullcalendar/timegrid/TimeGridView" {
+ import { DateProfileGenerator, DateProfile, ComponentContext, ViewSpec, DayHeader, DayTable, ViewProps } from "@fullcalendar/core";
+ import { SimpleDayGrid } from "@fullcalendar/daygrid";
+ import SimpleTimeGrid from "@fullcalendar/timegrid/SimpleTimeGrid";
+ import AbstractTimeGridView from "@fullcalendar/timegrid/AbstractTimeGridView";
+ export { TimeGridView as default, TimeGridView };
+ class TimeGridView extends AbstractTimeGridView {
+ header: DayHeader;
+ simpleDayGrid: SimpleDayGrid;
+ simpleTimeGrid: SimpleTimeGrid;
+ private buildDayTable;
+ constructor(_context: ComponentContext, viewSpec: ViewSpec, dateProfileGenerator: DateProfileGenerator, parentEl: HTMLElement);
+ destroy(): void;
+ render(props: ViewProps): void;
+ renderNowIndicator(date: any): void;
+ }
+ export function buildDayTable(dateProfile: DateProfile, dateProfileGenerator: DateProfileGenerator): DayTable;
+}
+
+declare module "@fullcalendar/timegrid" {
+ import AbstractTimeGridView from "@fullcalendar/timegrid/AbstractTimeGridView";
+ import TimeGridView, { buildDayTable } from "@fullcalendar/timegrid/TimeGridView";
+ import { TimeGridSeg } from "@fullcalendar/timegrid/TimeGrid";
+ import { TimeGridSlicer, buildDayRanges } from "@fullcalendar/timegrid/SimpleTimeGrid";
+ export { TimeGridView, AbstractTimeGridView, buildDayTable, buildDayRanges, TimeGridSlicer, TimeGridSeg };
+ export { default as TimeGrid } from "@fullcalendar/timegrid/TimeGrid";
+ const _default_14: import("@fullcalendar/core/plugin-system").PluginDef;
+ export default _default_14;
+}
\ No newline at end of file
--- /dev/null
+/*!
+FullCalendar Time Grid Plugin v4.1.0
+Docs & License: https://fullcalendar.io/
+(c) 2019 Adam Shaw
+*/
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fullcalendar/core'), require('@fullcalendar/daygrid')) :
+ typeof define === 'function' && define.amd ? define(['exports', '@fullcalendar/core', '@fullcalendar/daygrid'], factory) :
+ (global = global || self, factory(global.FullCalendarTimeGrid = {}, global.FullCalendar, global.FullCalendarDayGrid));
+}(this, function (exports, core, daygrid) { '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);
+ };
+
+ /*
+ Only handles foreground segs.
+ Does not own rendering. Use for low-level util methods by TimeGrid.
+ */
+ var TimeGridEventRenderer = /** @class */ (function (_super) {
+ __extends(TimeGridEventRenderer, _super);
+ function TimeGridEventRenderer(timeGrid) {
+ var _this = _super.call(this, timeGrid.context) || this;
+ _this.timeGrid = timeGrid;
+ _this.fullTimeFormat = core.createFormatter({
+ hour: 'numeric',
+ minute: '2-digit',
+ separator: _this.context.options.defaultRangeSeparator
+ });
+ return _this;
+ }
+ // Given an array of foreground segments, render a DOM element for each, computes position,
+ // and attaches to the column inner-container elements.
+ TimeGridEventRenderer.prototype.attachSegs = function (segs, mirrorInfo) {
+ var segsByCol = this.timeGrid.groupSegsByCol(segs);
+ // order the segs within each column
+ // TODO: have groupSegsByCol do this?
+ for (var col = 0; col < segsByCol.length; col++) {
+ segsByCol[col] = this.sortEventSegs(segsByCol[col]);
+ }
+ this.segsByCol = segsByCol;
+ this.timeGrid.attachSegsByCol(segsByCol, this.timeGrid.fgContainerEls);
+ };
+ TimeGridEventRenderer.prototype.detachSegs = function (segs) {
+ segs.forEach(function (seg) {
+ core.removeElement(seg.el);
+ });
+ this.segsByCol = null;
+ };
+ TimeGridEventRenderer.prototype.computeSegSizes = function (allSegs) {
+ var _a = this, timeGrid = _a.timeGrid, segsByCol = _a.segsByCol;
+ var colCnt = timeGrid.colCnt;
+ timeGrid.computeSegVerticals(allSegs); // horizontals relies on this
+ if (segsByCol) {
+ for (var col = 0; col < colCnt; col++) {
+ this.computeSegHorizontals(segsByCol[col]); // compute horizontal coordinates, z-index's, and reorder the array
+ }
+ }
+ };
+ TimeGridEventRenderer.prototype.assignSegSizes = function (allSegs) {
+ var _a = this, timeGrid = _a.timeGrid, segsByCol = _a.segsByCol;
+ var colCnt = timeGrid.colCnt;
+ timeGrid.assignSegVerticals(allSegs); // horizontals relies on this
+ if (segsByCol) {
+ for (var col = 0; col < colCnt; col++) {
+ this.assignSegCss(segsByCol[col]);
+ }
+ }
+ };
+ // Computes a default event time formatting string if `eventTimeFormat` is not explicitly defined
+ TimeGridEventRenderer.prototype.computeEventTimeFormat = function () {
+ return {
+ hour: 'numeric',
+ minute: '2-digit',
+ meridiem: false
+ };
+ };
+ // Computes a default `displayEventEnd` value if one is not expliclty defined
+ TimeGridEventRenderer.prototype.computeDisplayEventEnd = function () {
+ return true;
+ };
+ // Renders the HTML for a single event segment's default rendering
+ TimeGridEventRenderer.prototype.renderSegHtml = function (seg, mirrorInfo) {
+ var eventRange = seg.eventRange;
+ var eventDef = eventRange.def;
+ var eventUi = eventRange.ui;
+ var allDay = eventDef.allDay;
+ var isDraggable = eventUi.startEditable;
+ var isResizableFromStart = seg.isStart && eventUi.durationEditable && this.context.options.eventResizableFromStart;
+ var isResizableFromEnd = seg.isEnd && eventUi.durationEditable;
+ var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd, mirrorInfo);
+ var skinCss = core.cssToStr(this.getSkinCss(eventUi));
+ var timeText;
+ var fullTimeText; // more verbose time text. for the print stylesheet
+ var startTimeText; // just the start time text
+ classes.unshift('fc-time-grid-event');
+ // if the event appears to span more than one day...
+ if (core.isMultiDayRange(eventRange.range)) {
+ // Don't display time text on segments that run entirely through a day.
+ // That would appear as midnight-midnight and would look dumb.
+ // Otherwise, display the time text for the *segment's* times (like 6pm-midnight or midnight-10am)
+ if (seg.isStart || seg.isEnd) {
+ var unzonedStart = seg.start;
+ var unzonedEnd = seg.end;
+ timeText = this._getTimeText(unzonedStart, unzonedEnd, allDay); // TODO: give the timezones
+ fullTimeText = this._getTimeText(unzonedStart, unzonedEnd, allDay, this.fullTimeFormat);
+ startTimeText = this._getTimeText(unzonedStart, unzonedEnd, allDay, null, false); // displayEnd=false
+ }
+ }
+ else {
+ // Display the normal time text for the *event's* times
+ timeText = this.getTimeText(eventRange);
+ fullTimeText = this.getTimeText(eventRange, this.fullTimeFormat);
+ startTimeText = this.getTimeText(eventRange, null, false); // displayEnd=false
+ }
+ return '<a class="' + classes.join(' ') + '"' +
+ (eventDef.url ?
+ ' href="' + core.htmlEscape(eventDef.url) + '"' :
+ '') +
+ (skinCss ?
+ ' style="' + skinCss + '"' :
+ '') +
+ '>' +
+ '<div class="fc-content">' +
+ (timeText ?
+ '<div class="fc-time"' +
+ ' data-start="' + core.htmlEscape(startTimeText) + '"' +
+ ' data-full="' + core.htmlEscape(fullTimeText) + '"' +
+ '>' +
+ '<span>' + core.htmlEscape(timeText) + '</span>' +
+ '</div>' :
+ '') +
+ (eventDef.title ?
+ '<div class="fc-title">' +
+ core.htmlEscape(eventDef.title) +
+ '</div>' :
+ '') +
+ '</div>' +
+ /* TODO: write CSS for this
+ (isResizableFromStart ?
+ '<div class="fc-resizer fc-start-resizer"></div>' :
+ ''
+ ) +
+ */
+ (isResizableFromEnd ?
+ '<div class="fc-resizer fc-end-resizer"></div>' :
+ '') +
+ '</a>';
+ };
+ // Given an array of segments that are all in the same column, sets the backwardCoord and forwardCoord on each.
+ // Assumed the segs are already ordered.
+ // NOTE: Also reorders the given array by date!
+ TimeGridEventRenderer.prototype.computeSegHorizontals = function (segs) {
+ var levels;
+ var level0;
+ var i;
+ levels = buildSlotSegLevels(segs);
+ computeForwardSlotSegs(levels);
+ if ((level0 = levels[0])) {
+ for (i = 0; i < level0.length; i++) {
+ computeSlotSegPressures(level0[i]);
+ }
+ for (i = 0; i < level0.length; i++) {
+ this.computeSegForwardBack(level0[i], 0, 0);
+ }
+ }
+ };
+ // Calculate seg.forwardCoord and seg.backwardCoord for the segment, where both values range
+ // from 0 to 1. If the calendar is left-to-right, the seg.backwardCoord maps to "left" and
+ // seg.forwardCoord maps to "right" (via percentage). Vice-versa if the calendar is right-to-left.
+ //
+ // The segment might be part of a "series", which means consecutive segments with the same pressure
+ // who's width is unknown until an edge has been hit. `seriesBackwardPressure` is the number of
+ // segments behind this one in the current series, and `seriesBackwardCoord` is the starting
+ // coordinate of the first segment in the series.
+ TimeGridEventRenderer.prototype.computeSegForwardBack = function (seg, seriesBackwardPressure, seriesBackwardCoord) {
+ var forwardSegs = seg.forwardSegs;
+ var i;
+ if (seg.forwardCoord === undefined) { // not already computed
+ if (!forwardSegs.length) {
+ // if there are no forward segments, this segment should butt up against the edge
+ seg.forwardCoord = 1;
+ }
+ else {
+ // sort highest pressure first
+ this.sortForwardSegs(forwardSegs);
+ // this segment's forwardCoord will be calculated from the backwardCoord of the
+ // highest-pressure forward segment.
+ this.computeSegForwardBack(forwardSegs[0], seriesBackwardPressure + 1, seriesBackwardCoord);
+ seg.forwardCoord = forwardSegs[0].backwardCoord;
+ }
+ // calculate the backwardCoord from the forwardCoord. consider the series
+ seg.backwardCoord = seg.forwardCoord -
+ (seg.forwardCoord - seriesBackwardCoord) / // available width for series
+ (seriesBackwardPressure + 1); // # of segments in the series
+ // use this segment's coordinates to computed the coordinates of the less-pressurized
+ // forward segments
+ for (i = 0; i < forwardSegs.length; i++) {
+ this.computeSegForwardBack(forwardSegs[i], 0, seg.forwardCoord);
+ }
+ }
+ };
+ TimeGridEventRenderer.prototype.sortForwardSegs = function (forwardSegs) {
+ var objs = forwardSegs.map(buildTimeGridSegCompareObj);
+ var specs = [
+ // put higher-pressure first
+ { field: 'forwardPressure', order: -1 },
+ // put segments that are closer to initial edge first (and favor ones with no coords yet)
+ { field: 'backwardCoord', order: 1 }
+ ].concat(this.context.view.eventOrderSpecs);
+ objs.sort(function (obj0, obj1) {
+ return core.compareByFieldSpecs(obj0, obj1, specs);
+ });
+ return objs.map(function (c) {
+ return c._seg;
+ });
+ };
+ // Given foreground event segments that have already had their position coordinates computed,
+ // assigns position-related CSS values to their elements.
+ TimeGridEventRenderer.prototype.assignSegCss = function (segs) {
+ for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
+ var seg = segs_1[_i];
+ core.applyStyle(seg.el, this.generateSegCss(seg));
+ if (seg.level > 0) {
+ seg.el.classList.add('fc-time-grid-event-inset');
+ }
+ // if the event is short that the title will be cut off,
+ // attach a className that condenses the title into the time area.
+ if (seg.eventRange.def.title && seg.bottom - seg.top < 30) {
+ seg.el.classList.add('fc-short'); // TODO: "condensed" is a better name
+ }
+ }
+ };
+ // Generates an object with CSS properties/values that should be applied to an event segment element.
+ // Contains important positioning-related properties that should be applied to any event element, customized or not.
+ TimeGridEventRenderer.prototype.generateSegCss = function (seg) {
+ var shouldOverlap = this.context.options.slotEventOverlap;
+ var backwardCoord = seg.backwardCoord; // the left side if LTR. the right side if RTL. floating-point
+ var forwardCoord = seg.forwardCoord; // the right side if LTR. the left side if RTL. floating-point
+ var props = this.timeGrid.generateSegVerticalCss(seg); // get top/bottom first
+ var isRtl = this.timeGrid.isRtl;
+ var left; // amount of space from left edge, a fraction of the total width
+ var right; // amount of space from right edge, a fraction of the total width
+ if (shouldOverlap) {
+ // double the width, but don't go beyond the maximum forward coordinate (1.0)
+ forwardCoord = Math.min(1, backwardCoord + (forwardCoord - backwardCoord) * 2);
+ }
+ if (isRtl) {
+ left = 1 - forwardCoord;
+ right = backwardCoord;
+ }
+ else {
+ left = backwardCoord;
+ right = 1 - forwardCoord;
+ }
+ props.zIndex = seg.level + 1; // convert from 0-base to 1-based
+ props.left = left * 100 + '%';
+ props.right = right * 100 + '%';
+ if (shouldOverlap && seg.forwardPressure) {
+ // add padding to the edge so that forward stacked events don't cover the resizer's icon
+ props[isRtl ? 'marginLeft' : 'marginRight'] = 10 * 2; // 10 is a guesstimate of the icon's width
+ }
+ return props;
+ };
+ return TimeGridEventRenderer;
+ }(core.FgEventRenderer));
+ // Builds an array of segments "levels". The first level will be the leftmost tier of segments if the calendar is
+ // left-to-right, or the rightmost if the calendar is right-to-left. Assumes the segments are already ordered by date.
+ function buildSlotSegLevels(segs) {
+ var levels = [];
+ var i;
+ var seg;
+ var j;
+ for (i = 0; i < segs.length; i++) {
+ seg = segs[i];
+ // go through all the levels and stop on the first level where there are no collisions
+ for (j = 0; j < levels.length; j++) {
+ if (!computeSlotSegCollisions(seg, levels[j]).length) {
+ break;
+ }
+ }
+ seg.level = j;
+ (levels[j] || (levels[j] = [])).push(seg);
+ }
+ return levels;
+ }
+ // For every segment, figure out the other segments that are in subsequent
+ // levels that also occupy the same vertical space. Accumulate in seg.forwardSegs
+ function computeForwardSlotSegs(levels) {
+ var i;
+ var level;
+ var j;
+ var seg;
+ var k;
+ for (i = 0; i < levels.length; i++) {
+ level = levels[i];
+ for (j = 0; j < level.length; j++) {
+ seg = level[j];
+ seg.forwardSegs = [];
+ for (k = i + 1; k < levels.length; k++) {
+ computeSlotSegCollisions(seg, levels[k], seg.forwardSegs);
+ }
+ }
+ }
+ }
+ // Figure out which path forward (via seg.forwardSegs) results in the longest path until
+ // the furthest edge is reached. The number of segments in this path will be seg.forwardPressure
+ function computeSlotSegPressures(seg) {
+ var forwardSegs = seg.forwardSegs;
+ var forwardPressure = 0;
+ var i;
+ var forwardSeg;
+ if (seg.forwardPressure === undefined) { // not already computed
+ for (i = 0; i < forwardSegs.length; i++) {
+ forwardSeg = forwardSegs[i];
+ // figure out the child's maximum forward path
+ computeSlotSegPressures(forwardSeg);
+ // either use the existing maximum, or use the child's forward pressure
+ // plus one (for the forwardSeg itself)
+ forwardPressure = Math.max(forwardPressure, 1 + forwardSeg.forwardPressure);
+ }
+ seg.forwardPressure = forwardPressure;
+ }
+ }
+ // Find all the segments in `otherSegs` that vertically collide with `seg`.
+ // Append into an optionally-supplied `results` array and return.
+ function computeSlotSegCollisions(seg, otherSegs, results) {
+ if (results === void 0) { results = []; }
+ for (var i = 0; i < otherSegs.length; i++) {
+ if (isSlotSegCollision(seg, otherSegs[i])) {
+ results.push(otherSegs[i]);
+ }
+ }
+ return results;
+ }
+ // Do these segments occupy the same vertical space?
+ function isSlotSegCollision(seg1, seg2) {
+ return seg1.bottom > seg2.top && seg1.top < seg2.bottom;
+ }
+ function buildTimeGridSegCompareObj(seg) {
+ var obj = core.buildSegCompareObj(seg);
+ obj.forwardPressure = seg.forwardPressure;
+ obj.backwardCoord = seg.backwardCoord;
+ return obj;
+ }
+
+ var TimeGridMirrorRenderer = /** @class */ (function (_super) {
+ __extends(TimeGridMirrorRenderer, _super);
+ function TimeGridMirrorRenderer() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ TimeGridMirrorRenderer.prototype.attachSegs = function (segs, mirrorInfo) {
+ this.segsByCol = this.timeGrid.groupSegsByCol(segs);
+ this.timeGrid.attachSegsByCol(this.segsByCol, this.timeGrid.mirrorContainerEls);
+ this.sourceSeg = mirrorInfo.sourceSeg;
+ };
+ TimeGridMirrorRenderer.prototype.generateSegCss = function (seg) {
+ var props = _super.prototype.generateSegCss.call(this, seg);
+ var sourceSeg = this.sourceSeg;
+ if (sourceSeg && sourceSeg.col === seg.col) {
+ var sourceSegProps = _super.prototype.generateSegCss.call(this, sourceSeg);
+ props.left = sourceSegProps.left;
+ props.right = sourceSegProps.right;
+ props.marginLeft = sourceSegProps.marginLeft;
+ props.marginRight = sourceSegProps.marginRight;
+ }
+ return props;
+ };
+ return TimeGridMirrorRenderer;
+ }(TimeGridEventRenderer));
+
+ var TimeGridFillRenderer = /** @class */ (function (_super) {
+ __extends(TimeGridFillRenderer, _super);
+ function TimeGridFillRenderer(timeGrid) {
+ var _this = _super.call(this, timeGrid.context) || this;
+ _this.timeGrid = timeGrid;
+ return _this;
+ }
+ TimeGridFillRenderer.prototype.attachSegs = function (type, segs) {
+ var timeGrid = this.timeGrid;
+ var containerEls;
+ // TODO: more efficient lookup
+ if (type === 'bgEvent') {
+ containerEls = timeGrid.bgContainerEls;
+ }
+ else if (type === 'businessHours') {
+ containerEls = timeGrid.businessContainerEls;
+ }
+ else if (type === 'highlight') {
+ containerEls = timeGrid.highlightContainerEls;
+ }
+ timeGrid.attachSegsByCol(timeGrid.groupSegsByCol(segs), containerEls);
+ return segs.map(function (seg) {
+ return seg.el;
+ });
+ };
+ TimeGridFillRenderer.prototype.computeSegSizes = function (segs) {
+ this.timeGrid.computeSegVerticals(segs);
+ };
+ TimeGridFillRenderer.prototype.assignSegSizes = function (segs) {
+ this.timeGrid.assignSegVerticals(segs);
+ };
+ return TimeGridFillRenderer;
+ }(core.FillRenderer));
+
+ /* A component that renders one or more columns of vertical time slots
+ ----------------------------------------------------------------------------------------------------------------------*/
+ // potential nice values for the slot-duration and interval-duration
+ // from largest to smallest
+ var AGENDA_STOCK_SUB_DURATIONS = [
+ { hours: 1 },
+ { minutes: 30 },
+ { minutes: 15 },
+ { seconds: 30 },
+ { seconds: 15 }
+ ];
+ var TimeGrid = /** @class */ (function (_super) {
+ __extends(TimeGrid, _super);
+ function TimeGrid(context, el, renderProps) {
+ var _this = _super.call(this, context, el) || this;
+ _this.isSlatSizesDirty = false;
+ _this.isColSizesDirty = false;
+ _this.renderSlats = core.memoizeRendering(_this._renderSlats);
+ var eventRenderer = _this.eventRenderer = new TimeGridEventRenderer(_this);
+ var fillRenderer = _this.fillRenderer = new TimeGridFillRenderer(_this);
+ _this.mirrorRenderer = new TimeGridMirrorRenderer(_this);
+ var renderColumns = _this.renderColumns = core.memoizeRendering(_this._renderColumns, _this._unrenderColumns);
+ _this.renderBusinessHours = core.memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'businessHours'), fillRenderer.unrender.bind(fillRenderer, 'businessHours'), [renderColumns]);
+ _this.renderDateSelection = core.memoizeRendering(_this._renderDateSelection, _this._unrenderDateSelection, [renderColumns]);
+ _this.renderFgEvents = core.memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [renderColumns]);
+ _this.renderBgEvents = core.memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'bgEvent'), fillRenderer.unrender.bind(fillRenderer, 'bgEvent'), [renderColumns]);
+ _this.renderEventSelection = core.memoizeRendering(eventRenderer.selectByInstanceId.bind(eventRenderer), eventRenderer.unselectByInstanceId.bind(eventRenderer), [_this.renderFgEvents]);
+ _this.renderEventDrag = core.memoizeRendering(_this._renderEventDrag, _this._unrenderEventDrag, [renderColumns]);
+ _this.renderEventResize = core.memoizeRendering(_this._renderEventResize, _this._unrenderEventResize, [renderColumns]);
+ _this.processOptions();
+ el.innerHTML =
+ '<div class="fc-bg"></div>' +
+ '<div class="fc-slats"></div>' +
+ '<hr class="fc-divider ' + _this.theme.getClass('widgetHeader') + '" style="display:none" />';
+ _this.rootBgContainerEl = el.querySelector('.fc-bg');
+ _this.slatContainerEl = el.querySelector('.fc-slats');
+ _this.bottomRuleEl = el.querySelector('.fc-divider');
+ _this.renderProps = renderProps;
+ return _this;
+ }
+ /* Options
+ ------------------------------------------------------------------------------------------------------------------*/
+ // Parses various options into properties of this object
+ TimeGrid.prototype.processOptions = function () {
+ var slotDuration = this.opt('slotDuration');
+ var snapDuration = this.opt('snapDuration');
+ var snapsPerSlot;
+ var input;
+ slotDuration = core.createDuration(slotDuration);
+ snapDuration = snapDuration ? core.createDuration(snapDuration) : slotDuration;
+ snapsPerSlot = core.wholeDivideDurations(slotDuration, snapDuration);
+ if (snapsPerSlot === null) {
+ snapDuration = slotDuration;
+ snapsPerSlot = 1;
+ // TODO: say warning?
+ }
+ this.slotDuration = slotDuration;
+ this.snapDuration = snapDuration;
+ this.snapsPerSlot = snapsPerSlot;
+ // might be an array value (for TimelineView).
+ // if so, getting the most granular entry (the last one probably).
+ input = this.opt('slotLabelFormat');
+ if (Array.isArray(input)) {
+ input = input[input.length - 1];
+ }
+ this.labelFormat = core.createFormatter(input || {
+ hour: 'numeric',
+ minute: '2-digit',
+ omitZeroMinute: true,
+ meridiem: 'short'
+ });
+ input = this.opt('slotLabelInterval');
+ this.labelInterval = input ?
+ core.createDuration(input) :
+ this.computeLabelInterval(slotDuration);
+ };
+ // Computes an automatic value for slotLabelInterval
+ TimeGrid.prototype.computeLabelInterval = function (slotDuration) {
+ var i;
+ var labelInterval;
+ var slotsPerLabel;
+ // find the smallest stock label interval that results in more than one slots-per-label
+ for (i = AGENDA_STOCK_SUB_DURATIONS.length - 1; i >= 0; i--) {
+ labelInterval = core.createDuration(AGENDA_STOCK_SUB_DURATIONS[i]);
+ slotsPerLabel = core.wholeDivideDurations(labelInterval, slotDuration);
+ if (slotsPerLabel !== null && slotsPerLabel > 1) {
+ return labelInterval;
+ }
+ }
+ return slotDuration; // fall back
+ };
+ /* Rendering
+ ------------------------------------------------------------------------------------------------------------------*/
+ TimeGrid.prototype.render = function (props) {
+ var cells = props.cells;
+ this.colCnt = cells.length;
+ this.renderSlats(props.dateProfile);
+ this.renderColumns(props.cells, props.dateProfile);
+ this.renderBusinessHours(props.businessHourSegs);
+ this.renderDateSelection(props.dateSelectionSegs);
+ this.renderFgEvents(props.fgEventSegs);
+ this.renderBgEvents(props.bgEventSegs);
+ this.renderEventSelection(props.eventSelection);
+ this.renderEventDrag(props.eventDrag);
+ this.renderEventResize(props.eventResize);
+ };
+ TimeGrid.prototype.destroy = function () {
+ _super.prototype.destroy.call(this);
+ // should unrender everything else too
+ this.renderSlats.unrender();
+ this.renderColumns.unrender();
+ };
+ TimeGrid.prototype.updateSize = function (isResize) {
+ var _a = this, fillRenderer = _a.fillRenderer, eventRenderer = _a.eventRenderer, mirrorRenderer = _a.mirrorRenderer;
+ if (isResize || this.isSlatSizesDirty) {
+ this.buildSlatPositions();
+ this.isSlatSizesDirty = false;
+ }
+ if (isResize || this.isColSizesDirty) {
+ this.buildColPositions();
+ this.isColSizesDirty = false;
+ }
+ fillRenderer.computeSizes(isResize);
+ eventRenderer.computeSizes(isResize);
+ mirrorRenderer.computeSizes(isResize);
+ fillRenderer.assignSizes(isResize);
+ eventRenderer.assignSizes(isResize);
+ mirrorRenderer.assignSizes(isResize);
+ };
+ TimeGrid.prototype._renderSlats = function (dateProfile) {
+ var theme = this.theme;
+ this.slatContainerEl.innerHTML =
+ '<table class="' + theme.getClass('tableGrid') + '">' +
+ this.renderSlatRowHtml(dateProfile) +
+ '</table>';
+ this.slatEls = core.findElements(this.slatContainerEl, 'tr');
+ this.slatPositions = new core.PositionCache(this.el, this.slatEls, false, true // vertical
+ );
+ this.isSlatSizesDirty = true;
+ };
+ // Generates the HTML for the horizontal "slats" that run width-wise. Has a time axis on a side. Depends on RTL.
+ TimeGrid.prototype.renderSlatRowHtml = function (dateProfile) {
+ var _a = this, dateEnv = _a.dateEnv, theme = _a.theme, isRtl = _a.isRtl;
+ var html = '';
+ var dayStart = core.startOfDay(dateProfile.renderRange.start);
+ var slotTime = dateProfile.minTime;
+ var slotIterator = core.createDuration(0);
+ var slotDate; // will be on the view's first day, but we only care about its time
+ var isLabeled;
+ var axisHtml;
+ // Calculate the time for each slot
+ while (core.asRoughMs(slotTime) < core.asRoughMs(dateProfile.maxTime)) {
+ slotDate = dateEnv.add(dayStart, slotTime);
+ isLabeled = core.wholeDivideDurations(slotIterator, this.labelInterval) !== null;
+ axisHtml =
+ '<td class="fc-axis fc-time ' + theme.getClass('widgetContent') + '">' +
+ (isLabeled ?
+ '<span>' + // for matchCellWidths
+ core.htmlEscape(dateEnv.format(slotDate, this.labelFormat)) +
+ '</span>' :
+ '') +
+ '</td>';
+ html +=
+ '<tr data-time="' + core.formatIsoTimeString(slotDate) + '"' +
+ (isLabeled ? '' : ' class="fc-minor"') +
+ '>' +
+ (!isRtl ? axisHtml : '') +
+ '<td class="' + theme.getClass('widgetContent') + '"></td>' +
+ (isRtl ? axisHtml : '') +
+ '</tr>';
+ slotTime = core.addDurations(slotTime, this.slotDuration);
+ slotIterator = core.addDurations(slotIterator, this.slotDuration);
+ }
+ return html;
+ };
+ TimeGrid.prototype._renderColumns = function (cells, dateProfile) {
+ var _a = this, theme = _a.theme, dateEnv = _a.dateEnv, view = _a.view;
+ var bgRow = new daygrid.DayBgRow(this.context);
+ this.rootBgContainerEl.innerHTML =
+ '<table class="' + theme.getClass('tableGrid') + '">' +
+ bgRow.renderHtml({
+ cells: cells,
+ dateProfile: dateProfile,
+ renderIntroHtml: this.renderProps.renderBgIntroHtml
+ }) +
+ '</table>';
+ this.colEls = core.findElements(this.el, '.fc-day, .fc-disabled-day');
+ for (var col = 0; col < this.colCnt; col++) {
+ this.publiclyTrigger('dayRender', [
+ {
+ date: dateEnv.toDate(cells[col].date),
+ el: this.colEls[col],
+ view: view
+ }
+ ]);
+ }
+ if (this.isRtl) {
+ this.colEls.reverse();
+ }
+ this.colPositions = new core.PositionCache(this.el, this.colEls, true, // horizontal
+ false);
+ this.renderContentSkeleton();
+ this.isColSizesDirty = true;
+ };
+ TimeGrid.prototype._unrenderColumns = function () {
+ this.unrenderContentSkeleton();
+ };
+ /* Content Skeleton
+ ------------------------------------------------------------------------------------------------------------------*/
+ // Renders the DOM that the view's content will live in
+ TimeGrid.prototype.renderContentSkeleton = function () {
+ var parts = [];
+ var skeletonEl;
+ parts.push(this.renderProps.renderIntroHtml());
+ for (var i = 0; i < this.colCnt; i++) {
+ parts.push('<td>' +
+ '<div class="fc-content-col">' +
+ '<div class="fc-event-container fc-mirror-container"></div>' +
+ '<div class="fc-event-container"></div>' +
+ '<div class="fc-highlight-container"></div>' +
+ '<div class="fc-bgevent-container"></div>' +
+ '<div class="fc-business-container"></div>' +
+ '</div>' +
+ '</td>');
+ }
+ if (this.isRtl) {
+ parts.reverse();
+ }
+ skeletonEl = this.contentSkeletonEl = core.htmlToElement('<div class="fc-content-skeleton">' +
+ '<table>' +
+ '<tr>' + parts.join('') + '</tr>' +
+ '</table>' +
+ '</div>');
+ this.colContainerEls = core.findElements(skeletonEl, '.fc-content-col');
+ this.mirrorContainerEls = core.findElements(skeletonEl, '.fc-mirror-container');
+ this.fgContainerEls = core.findElements(skeletonEl, '.fc-event-container:not(.fc-mirror-container)');
+ this.bgContainerEls = core.findElements(skeletonEl, '.fc-bgevent-container');
+ this.highlightContainerEls = core.findElements(skeletonEl, '.fc-highlight-container');
+ this.businessContainerEls = core.findElements(skeletonEl, '.fc-business-container');
+ if (this.isRtl) {
+ this.colContainerEls.reverse();
+ this.mirrorContainerEls.reverse();
+ this.fgContainerEls.reverse();
+ this.bgContainerEls.reverse();
+ this.highlightContainerEls.reverse();
+ this.businessContainerEls.reverse();
+ }
+ this.el.appendChild(skeletonEl);
+ };
+ TimeGrid.prototype.unrenderContentSkeleton = function () {
+ core.removeElement(this.contentSkeletonEl);
+ };
+ // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's col
+ TimeGrid.prototype.groupSegsByCol = function (segs) {
+ var segsByCol = [];
+ var i;
+ for (i = 0; i < this.colCnt; i++) {
+ segsByCol.push([]);
+ }
+ for (i = 0; i < segs.length; i++) {
+ segsByCol[segs[i].col].push(segs[i]);
+ }
+ return segsByCol;
+ };
+ // Given segments grouped by column, insert the segments' elements into a parallel array of container
+ // elements, each living within a column.
+ TimeGrid.prototype.attachSegsByCol = function (segsByCol, containerEls) {
+ var col;
+ var segs;
+ var i;
+ for (col = 0; col < this.colCnt; col++) { // iterate each column grouping
+ segs = segsByCol[col];
+ for (i = 0; i < segs.length; i++) {
+ containerEls[col].appendChild(segs[i].el);
+ }
+ }
+ };
+ /* Now Indicator
+ ------------------------------------------------------------------------------------------------------------------*/
+ TimeGrid.prototype.getNowIndicatorUnit = function () {
+ return 'minute'; // will refresh on the minute
+ };
+ TimeGrid.prototype.renderNowIndicator = function (segs, date) {
+ // HACK: if date columns not ready for some reason (scheduler)
+ if (!this.colContainerEls) {
+ return;
+ }
+ var top = this.computeDateTop(date);
+ var nodes = [];
+ var i;
+ // render lines within the columns
+ for (i = 0; i < segs.length; i++) {
+ var lineEl = core.createElement('div', { className: 'fc-now-indicator fc-now-indicator-line' });
+ lineEl.style.top = top + 'px';
+ this.colContainerEls[segs[i].col].appendChild(lineEl);
+ nodes.push(lineEl);
+ }
+ // render an arrow over the axis
+ if (segs.length > 0) { // is the current time in view?
+ var arrowEl = core.createElement('div', { className: 'fc-now-indicator fc-now-indicator-arrow' });
+ arrowEl.style.top = top + 'px';
+ this.contentSkeletonEl.appendChild(arrowEl);
+ nodes.push(arrowEl);
+ }
+ this.nowIndicatorEls = nodes;
+ };
+ TimeGrid.prototype.unrenderNowIndicator = function () {
+ if (this.nowIndicatorEls) {
+ this.nowIndicatorEls.forEach(core.removeElement);
+ this.nowIndicatorEls = null;
+ }
+ };
+ /* Coordinates
+ ------------------------------------------------------------------------------------------------------------------*/
+ TimeGrid.prototype.getTotalSlatHeight = function () {
+ return this.slatContainerEl.offsetHeight;
+ };
+ // Computes the top coordinate, relative to the bounds of the grid, of the given date.
+ // A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.
+ TimeGrid.prototype.computeDateTop = function (when, startOfDayDate) {
+ if (!startOfDayDate) {
+ startOfDayDate = core.startOfDay(when);
+ }
+ return this.computeTimeTop(when.valueOf() - startOfDayDate.valueOf());
+ };
+ // Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration).
+ TimeGrid.prototype.computeTimeTop = function (timeMs) {
+ var len = this.slatEls.length;
+ var dateProfile = this.props.dateProfile;
+ var slatCoverage = (timeMs - core.asRoughMs(dateProfile.minTime)) / core.asRoughMs(this.slotDuration); // floating-point value of # of slots covered
+ var slatIndex;
+ var slatRemainder;
+ // compute a floating-point number for how many slats should be progressed through.
+ // from 0 to number of slats (inclusive)
+ // constrained because minTime/maxTime might be customized.
+ slatCoverage = Math.max(0, slatCoverage);
+ slatCoverage = Math.min(len, slatCoverage);
+ // an integer index of the furthest whole slat
+ // from 0 to number slats (*exclusive*, so len-1)
+ slatIndex = Math.floor(slatCoverage);
+ slatIndex = Math.min(slatIndex, len - 1);
+ // how much further through the slatIndex slat (from 0.0-1.0) must be covered in addition.
+ // could be 1.0 if slatCoverage is covering *all* the slots
+ slatRemainder = slatCoverage - slatIndex;
+ return this.slatPositions.tops[slatIndex] +
+ this.slatPositions.getHeight(slatIndex) * slatRemainder;
+ };
+ // For each segment in an array, computes and assigns its top and bottom properties
+ TimeGrid.prototype.computeSegVerticals = function (segs) {
+ var eventMinHeight = this.opt('timeGridEventMinHeight');
+ var i;
+ var seg;
+ var dayDate;
+ for (i = 0; i < segs.length; i++) {
+ seg = segs[i];
+ dayDate = this.props.cells[seg.col].date;
+ seg.top = this.computeDateTop(seg.start, dayDate);
+ seg.bottom = Math.max(seg.top + eventMinHeight, this.computeDateTop(seg.end, dayDate));
+ }
+ };
+ // Given segments that already have their top/bottom properties computed, applies those values to
+ // the segments' elements.
+ TimeGrid.prototype.assignSegVerticals = function (segs) {
+ var i;
+ var seg;
+ for (i = 0; i < segs.length; i++) {
+ seg = segs[i];
+ core.applyStyle(seg.el, this.generateSegVerticalCss(seg));
+ }
+ };
+ // Generates an object with CSS properties for the top/bottom coordinates of a segment element
+ TimeGrid.prototype.generateSegVerticalCss = function (seg) {
+ return {
+ top: seg.top,
+ bottom: -seg.bottom // flipped because needs to be space beyond bottom edge of event container
+ };
+ };
+ /* Sizing
+ ------------------------------------------------------------------------------------------------------------------*/
+ TimeGrid.prototype.buildPositionCaches = function () {
+ this.buildColPositions();
+ this.buildSlatPositions();
+ };
+ TimeGrid.prototype.buildColPositions = function () {
+ this.colPositions.build();
+ };
+ TimeGrid.prototype.buildSlatPositions = function () {
+ this.slatPositions.build();
+ };
+ /* Hit System
+ ------------------------------------------------------------------------------------------------------------------*/
+ TimeGrid.prototype.positionToHit = function (positionLeft, positionTop) {
+ var _a = this, dateEnv = _a.dateEnv, snapsPerSlot = _a.snapsPerSlot, slatPositions = _a.slatPositions, colPositions = _a.colPositions;
+ var colIndex = colPositions.leftToIndex(positionLeft);
+ var slatIndex = slatPositions.topToIndex(positionTop);
+ if (colIndex != null && slatIndex != null) {
+ var slatTop = slatPositions.tops[slatIndex];
+ var slatHeight = slatPositions.getHeight(slatIndex);
+ var partial = (positionTop - slatTop) / slatHeight; // floating point number between 0 and 1
+ var localSnapIndex = Math.floor(partial * snapsPerSlot); // the snap # relative to start of slat
+ var snapIndex = slatIndex * snapsPerSlot + localSnapIndex;
+ var dayDate = this.props.cells[colIndex].date;
+ var time = core.addDurations(this.props.dateProfile.minTime, core.multiplyDuration(this.snapDuration, snapIndex));
+ var start = dateEnv.add(dayDate, time);
+ var end = dateEnv.add(start, this.snapDuration);
+ return {
+ col: colIndex,
+ dateSpan: {
+ range: { start: start, end: end },
+ allDay: false
+ },
+ dayEl: this.colEls[colIndex],
+ relativeRect: {
+ left: colPositions.lefts[colIndex],
+ right: colPositions.rights[colIndex],
+ top: slatTop,
+ bottom: slatTop + slatHeight
+ }
+ };
+ }
+ };
+ /* Event Drag Visualization
+ ------------------------------------------------------------------------------------------------------------------*/
+ TimeGrid.prototype._renderEventDrag = function (state) {
+ if (state) {
+ this.eventRenderer.hideByHash(state.affectedInstances);
+ if (state.isEvent) {
+ this.mirrorRenderer.renderSegs(state.segs, { isDragging: true, sourceSeg: state.sourceSeg });
+ }
+ else {
+ this.fillRenderer.renderSegs('highlight', state.segs);
+ }
+ }
+ };
+ TimeGrid.prototype._unrenderEventDrag = function (state) {
+ if (state) {
+ this.eventRenderer.showByHash(state.affectedInstances);
+ this.mirrorRenderer.unrender(state.segs, { isDragging: true, sourceSeg: state.sourceSeg });
+ this.fillRenderer.unrender('highlight');
+ }
+ };
+ /* Event Resize Visualization
+ ------------------------------------------------------------------------------------------------------------------*/
+ TimeGrid.prototype._renderEventResize = function (state) {
+ if (state) {
+ this.eventRenderer.hideByHash(state.affectedInstances);
+ this.mirrorRenderer.renderSegs(state.segs, { isResizing: true, sourceSeg: state.sourceSeg });
+ }
+ };
+ TimeGrid.prototype._unrenderEventResize = function (state) {
+ if (state) {
+ this.eventRenderer.showByHash(state.affectedInstances);
+ this.mirrorRenderer.unrender(state.segs, { isResizing: true, sourceSeg: state.sourceSeg });
+ }
+ };
+ /* Selection
+ ------------------------------------------------------------------------------------------------------------------*/
+ // Renders a visual indication of a selection. Overrides the default, which was to simply render a highlight.
+ TimeGrid.prototype._renderDateSelection = function (segs) {
+ if (segs) {
+ if (this.opt('selectMirror')) {
+ this.mirrorRenderer.renderSegs(segs, { isSelecting: true });
+ }
+ else {
+ this.fillRenderer.renderSegs('highlight', segs);
+ }
+ }
+ };
+ TimeGrid.prototype._unrenderDateSelection = function (segs) {
+ this.mirrorRenderer.unrender(segs, { isSelecting: true });
+ this.fillRenderer.unrender('highlight');
+ };
+ return TimeGrid;
+ }(core.DateComponent));
+
+ var AllDaySplitter = /** @class */ (function (_super) {
+ __extends(AllDaySplitter, _super);
+ function AllDaySplitter() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ AllDaySplitter.prototype.getKeyInfo = function () {
+ return {
+ allDay: {},
+ timed: {}
+ };
+ };
+ AllDaySplitter.prototype.getKeysForDateSpan = function (dateSpan) {
+ if (dateSpan.allDay) {
+ return ['allDay'];
+ }
+ else {
+ return ['timed'];
+ }
+ };
+ AllDaySplitter.prototype.getKeysForEventDef = function (eventDef) {
+ if (!eventDef.allDay) {
+ return ['timed'];
+ }
+ else if (core.hasBgRendering(eventDef)) {
+ return ['timed', 'allDay'];
+ }
+ else {
+ return ['allDay'];
+ }
+ };
+ return AllDaySplitter;
+ }(core.Splitter));
+
+ var TIMEGRID_ALL_DAY_EVENT_LIMIT = 5;
+ var WEEK_HEADER_FORMAT = core.createFormatter({ week: 'short' });
+ /* An abstract class for all timegrid-related views. Displays one more columns with time slots running vertically.
+ ----------------------------------------------------------------------------------------------------------------------*/
+ // Is a manager for the TimeGrid subcomponent and possibly the DayGrid subcomponent (if allDaySlot is on).
+ // Responsible for managing width/height.
+ var TimeGridView = /** @class */ (function (_super) {
+ __extends(TimeGridView, _super);
+ function TimeGridView(context, viewSpec, dateProfileGenerator, parentEl) {
+ var _this = _super.call(this, context, viewSpec, dateProfileGenerator, parentEl) || this;
+ _this.splitter = new AllDaySplitter();
+ /* Header Render Methods
+ ------------------------------------------------------------------------------------------------------------------*/
+ // Generates the HTML that will go before the day-of week header cells
+ _this.renderHeadIntroHtml = function () {
+ var _a = _this, theme = _a.theme, dateEnv = _a.dateEnv;
+ var range = _this.props.dateProfile.renderRange;
+ var dayCnt = core.diffDays(range.start, range.end);
+ var weekText;
+ if (_this.opt('weekNumbers')) {
+ weekText = dateEnv.format(range.start, WEEK_HEADER_FORMAT);
+ return '' +
+ '<th class="fc-axis fc-week-number ' + theme.getClass('widgetHeader') + '" ' + _this.axisStyleAttr() + '>' +
+ core.buildGotoAnchorHtml(// aside from link, important for matchCellWidths
+ _this, { date: range.start, type: 'week', forceOff: dayCnt > 1 }, core.htmlEscape(weekText) // inner HTML
+ ) +
+ '</th>';
+ }
+ else {
+ return '<th class="fc-axis ' + theme.getClass('widgetHeader') + '" ' + _this.axisStyleAttr() + '></th>';
+ }
+ };
+ /* Time Grid Render Methods
+ ------------------------------------------------------------------------------------------------------------------*/
+ // Generates the HTML that goes before the bg of the TimeGrid slot area. Long vertical column.
+ _this.renderTimeGridBgIntroHtml = function () {
+ var theme = _this.theme;
+ return '<td class="fc-axis ' + theme.getClass('widgetContent') + '" ' + _this.axisStyleAttr() + '></td>';
+ };
+ // Generates the HTML that goes before all other types of cells.
+ // Affects content-skeleton, mirror-skeleton, highlight-skeleton for both the time-grid and day-grid.
+ _this.renderTimeGridIntroHtml = function () {
+ return '<td class="fc-axis" ' + _this.axisStyleAttr() + '></td>';
+ };
+ /* Day Grid Render Methods
+ ------------------------------------------------------------------------------------------------------------------*/
+ // Generates the HTML that goes before the all-day cells
+ _this.renderDayGridBgIntroHtml = function () {
+ var theme = _this.theme;
+ return '' +
+ '<td class="fc-axis ' + theme.getClass('widgetContent') + '" ' + _this.axisStyleAttr() + '>' +
+ '<span>' + // needed for matchCellWidths
+ core.getAllDayHtml(_this) +
+ '</span>' +
+ '</td>';
+ };
+ // Generates the HTML that goes before all other types of cells.
+ // Affects content-skeleton, mirror-skeleton, highlight-skeleton for both the time-grid and day-grid.
+ _this.renderDayGridIntroHtml = function () {
+ return '<td class="fc-axis" ' + _this.axisStyleAttr() + '></td>';
+ };
+ _this.el.classList.add('fc-timeGrid-view');
+ _this.el.innerHTML = _this.renderSkeletonHtml();
+ _this.scroller = new core.ScrollComponent('hidden', // overflow x
+ 'auto' // overflow y
+ );
+ var timeGridWrapEl = _this.scroller.el;
+ _this.el.querySelector('.fc-body > tr > td').appendChild(timeGridWrapEl);
+ timeGridWrapEl.classList.add('fc-time-grid-container');
+ var timeGridEl = core.createElement('div', { className: 'fc-time-grid' });
+ timeGridWrapEl.appendChild(timeGridEl);
+ _this.timeGrid = new TimeGrid(_this.context, timeGridEl, {
+ renderBgIntroHtml: _this.renderTimeGridBgIntroHtml,
+ renderIntroHtml: _this.renderTimeGridIntroHtml
+ });
+ if (_this.opt('allDaySlot')) { // should we display the "all-day" area?
+ _this.dayGrid = new daygrid.DayGrid(// the all-day subcomponent of this view
+ _this.context, _this.el.querySelector('.fc-day-grid'), {
+ renderNumberIntroHtml: _this.renderDayGridIntroHtml,
+ renderBgIntroHtml: _this.renderDayGridBgIntroHtml,
+ renderIntroHtml: _this.renderDayGridIntroHtml,
+ colWeekNumbersVisible: false,
+ cellWeekNumbersVisible: false
+ });
+ // have the day-grid extend it's coordinate area over the <hr> dividing the two grids
+ _this.dayGrid.bottomCoordPadding = _this.el.querySelector('.fc-divider').offsetHeight;
+ }
+ return _this;
+ }
+ TimeGridView.prototype.destroy = function () {
+ _super.prototype.destroy.call(this);
+ this.timeGrid.destroy();
+ if (this.dayGrid) {
+ this.dayGrid.destroy();
+ }
+ this.scroller.destroy();
+ };
+ /* Rendering
+ ------------------------------------------------------------------------------------------------------------------*/
+ // Builds the HTML skeleton for the view.
+ // The day-grid and time-grid components will render inside containers defined by this HTML.
+ TimeGridView.prototype.renderSkeletonHtml = function () {
+ var theme = this.theme;
+ return '' +
+ '<table class="' + theme.getClass('tableGrid') + '">' +
+ (this.opt('columnHeader') ?
+ '<thead class="fc-head">' +
+ '<tr>' +
+ '<td class="fc-head-container ' + theme.getClass('widgetHeader') + '"> </td>' +
+ '</tr>' +
+ '</thead>' :
+ '') +
+ '<tbody class="fc-body">' +
+ '<tr>' +
+ '<td class="' + theme.getClass('widgetContent') + '">' +
+ (this.opt('allDaySlot') ?
+ '<div class="fc-day-grid"></div>' +
+ '<hr class="fc-divider ' + theme.getClass('widgetHeader') + '" />' :
+ '') +
+ '</td>' +
+ '</tr>' +
+ '</tbody>' +
+ '</table>';
+ };
+ /* Now Indicator
+ ------------------------------------------------------------------------------------------------------------------*/
+ TimeGridView.prototype.getNowIndicatorUnit = function () {
+ return this.timeGrid.getNowIndicatorUnit();
+ };
+ // subclasses should implement
+ // renderNowIndicator(date: DateMarker) {
+ // }
+ TimeGridView.prototype.unrenderNowIndicator = function () {
+ this.timeGrid.unrenderNowIndicator();
+ };
+ /* Dimensions
+ ------------------------------------------------------------------------------------------------------------------*/
+ TimeGridView.prototype.updateSize = function (isResize, viewHeight, isAuto) {
+ _super.prototype.updateSize.call(this, isResize, viewHeight, isAuto); // will call updateBaseSize. important that executes first
+ this.timeGrid.updateSize(isResize);
+ if (this.dayGrid) {
+ this.dayGrid.updateSize(isResize);
+ }
+ };
+ // Adjusts the vertical dimensions of the view to the specified values
+ TimeGridView.prototype.updateBaseSize = function (isResize, viewHeight, isAuto) {
+ var _this = this;
+ var eventLimit;
+ var scrollerHeight;
+ var scrollbarWidths;
+ // make all axis cells line up
+ this.axisWidth = core.matchCellWidths(core.findElements(this.el, '.fc-axis'));
+ // hack to give the view some height prior to timeGrid's columns being rendered
+ // TODO: separate setting height from scroller VS timeGrid.
+ if (!this.timeGrid.colEls) {
+ if (!isAuto) {
+ scrollerHeight = this.computeScrollerHeight(viewHeight);
+ this.scroller.setHeight(scrollerHeight);
+ }
+ return;
+ }
+ // set of fake row elements that must compensate when scroller has scrollbars
+ var noScrollRowEls = core.findElements(this.el, '.fc-row').filter(function (node) {
+ return !_this.scroller.el.contains(node);
+ });
+ // reset all dimensions back to the original state
+ this.timeGrid.bottomRuleEl.style.display = 'none'; // will be shown later if this <hr> is necessary
+ this.scroller.clear(); // sets height to 'auto' and clears overflow
+ noScrollRowEls.forEach(core.uncompensateScroll);
+ // limit number of events in the all-day area
+ if (this.dayGrid) {
+ this.dayGrid.removeSegPopover(); // kill the "more" popover if displayed
+ eventLimit = this.opt('eventLimit');
+ if (eventLimit && typeof eventLimit !== 'number') {
+ eventLimit = TIMEGRID_ALL_DAY_EVENT_LIMIT; // make sure "auto" goes to a real number
+ }
+ if (eventLimit) {
+ this.dayGrid.limitRows(eventLimit);
+ }
+ }
+ if (!isAuto) { // should we force dimensions of the scroll container?
+ scrollerHeight = this.computeScrollerHeight(viewHeight);
+ this.scroller.setHeight(scrollerHeight);
+ scrollbarWidths = this.scroller.getScrollbarWidths();
+ if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?
+ // make the all-day and header rows lines up
+ noScrollRowEls.forEach(function (rowEl) {
+ core.compensateScroll(rowEl, scrollbarWidths);
+ });
+ // the scrollbar compensation might have changed text flow, which might affect height, so recalculate
+ // and reapply the desired height to the scroller.
+ scrollerHeight = this.computeScrollerHeight(viewHeight);
+ this.scroller.setHeight(scrollerHeight);
+ }
+ // guarantees the same scrollbar widths
+ this.scroller.lockOverflow(scrollbarWidths);
+ // if there's any space below the slats, show the horizontal rule.
+ // this won't cause any new overflow, because lockOverflow already called.
+ if (this.timeGrid.getTotalSlatHeight() < scrollerHeight) {
+ this.timeGrid.bottomRuleEl.style.display = '';
+ }
+ }
+ };
+ // given a desired total height of the view, returns what the height of the scroller should be
+ TimeGridView.prototype.computeScrollerHeight = function (viewHeight) {
+ return viewHeight -
+ core.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller
+ };
+ /* Scroll
+ ------------------------------------------------------------------------------------------------------------------*/
+ // Computes the initial pre-configured scroll state prior to allowing the user to change it
+ TimeGridView.prototype.computeDateScroll = function (timeMs) {
+ var top = this.timeGrid.computeTimeTop(timeMs);
+ // zoom can give weird floating-point values. rather scroll a little bit further
+ top = Math.ceil(top);
+ if (top) {
+ top++; // to overcome top border that slots beyond the first have. looks better
+ }
+ return { top: top };
+ };
+ TimeGridView.prototype.queryDateScroll = function () {
+ return { top: this.scroller.getScrollTop() };
+ };
+ TimeGridView.prototype.applyDateScroll = function (scroll) {
+ if (scroll.top !== undefined) {
+ this.scroller.setScrollTop(scroll.top);
+ }
+ };
+ // Generates an HTML attribute string for setting the width of the axis, if it is known
+ TimeGridView.prototype.axisStyleAttr = function () {
+ if (this.axisWidth != null) {
+ return 'style="width:' + this.axisWidth + 'px"';
+ }
+ return '';
+ };
+ return TimeGridView;
+ }(core.View));
+ TimeGridView.prototype.usesMinMaxTime = true; // indicates that minTime/maxTime affects rendering
+
+ var SimpleTimeGrid = /** @class */ (function (_super) {
+ __extends(SimpleTimeGrid, _super);
+ function SimpleTimeGrid(context, timeGrid) {
+ var _this = _super.call(this, context, timeGrid.el) || this;
+ _this.buildDayRanges = core.memoize(buildDayRanges);
+ _this.slicer = new TimeGridSlicer();
+ _this.timeGrid = timeGrid;
+ context.calendar.registerInteractiveComponent(_this, {
+ el: _this.timeGrid.el
+ });
+ return _this;
+ }
+ SimpleTimeGrid.prototype.destroy = function () {
+ _super.prototype.destroy.call(this);
+ this.calendar.unregisterInteractiveComponent(this);
+ };
+ SimpleTimeGrid.prototype.render = function (props) {
+ var dateProfile = props.dateProfile, dayTable = props.dayTable;
+ var dayRanges = this.dayRanges = this.buildDayRanges(dayTable, dateProfile, this.dateEnv);
+ this.timeGrid.receiveProps(__assign({}, this.slicer.sliceProps(props, dateProfile, null, this.timeGrid, dayRanges), { dateProfile: dateProfile, cells: dayTable.cells[0] }));
+ };
+ SimpleTimeGrid.prototype.renderNowIndicator = function (date) {
+ this.timeGrid.renderNowIndicator(this.slicer.sliceNowDate(date, this.timeGrid, this.dayRanges), date);
+ };
+ SimpleTimeGrid.prototype.buildPositionCaches = function () {
+ this.timeGrid.buildPositionCaches();
+ };
+ SimpleTimeGrid.prototype.queryHit = function (positionLeft, positionTop) {
+ var rawHit = this.timeGrid.positionToHit(positionLeft, positionTop);
+ if (rawHit) {
+ return {
+ component: this.timeGrid,
+ 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 SimpleTimeGrid;
+ }(core.DateComponent));
+ function buildDayRanges(dayTable, dateProfile, dateEnv) {
+ var ranges = [];
+ for (var _i = 0, _a = dayTable.headerDates; _i < _a.length; _i++) {
+ var date = _a[_i];
+ ranges.push({
+ start: dateEnv.add(date, dateProfile.minTime),
+ end: dateEnv.add(date, dateProfile.maxTime)
+ });
+ }
+ return ranges;
+ }
+ var TimeGridSlicer = /** @class */ (function (_super) {
+ __extends(TimeGridSlicer, _super);
+ function TimeGridSlicer() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ TimeGridSlicer.prototype.sliceRange = function (range, dayRanges) {
+ var segs = [];
+ for (var col = 0; col < dayRanges.length; col++) {
+ var segRange = core.intersectRanges(range, dayRanges[col]);
+ if (segRange) {
+ segs.push({
+ start: segRange.start,
+ end: segRange.end,
+ isStart: segRange.start.valueOf() === range.start.valueOf(),
+ isEnd: segRange.end.valueOf() === range.end.valueOf(),
+ col: col
+ });
+ }
+ }
+ return segs;
+ };
+ return TimeGridSlicer;
+ }(core.Slicer));
+
+ var TimeGridView$1 = /** @class */ (function (_super) {
+ __extends(TimeGridView, _super);
+ function TimeGridView(_context, viewSpec, dateProfileGenerator, parentEl) {
+ var _this = _super.call(this, _context, viewSpec, dateProfileGenerator, parentEl) || this;
+ _this.buildDayTable = core.memoize(buildDayTable);
+ if (_this.opt('columnHeader')) {
+ _this.header = new core.DayHeader(_this.context, _this.el.querySelector('.fc-head-container'));
+ }
+ _this.simpleTimeGrid = new SimpleTimeGrid(_this.context, _this.timeGrid);
+ if (_this.dayGrid) {
+ _this.simpleDayGrid = new daygrid.SimpleDayGrid(_this.context, _this.dayGrid);
+ }
+ return _this;
+ }
+ TimeGridView.prototype.destroy = function () {
+ _super.prototype.destroy.call(this);
+ if (this.header) {
+ this.header.destroy();
+ }
+ this.simpleTimeGrid.destroy();
+ if (this.simpleDayGrid) {
+ this.simpleDayGrid.destroy();
+ }
+ };
+ TimeGridView.prototype.render = function (props) {
+ _super.prototype.render.call(this, props); // for flags for updateSize
+ var dateProfile = this.props.dateProfile;
+ var dayTable = this.buildDayTable(dateProfile, this.dateProfileGenerator);
+ var splitProps = this.splitter.splitProps(props);
+ if (this.header) {
+ this.header.receiveProps({
+ dateProfile: dateProfile,
+ dates: dayTable.headerDates,
+ datesRepDistinctDays: true,
+ renderIntroHtml: this.renderHeadIntroHtml
+ });
+ }
+ this.simpleTimeGrid.receiveProps(__assign({}, splitProps['timed'], { dateProfile: dateProfile,
+ dayTable: dayTable }));
+ if (this.simpleDayGrid) {
+ this.simpleDayGrid.receiveProps(__assign({}, splitProps['allDay'], { dateProfile: dateProfile,
+ dayTable: dayTable, nextDayThreshold: this.nextDayThreshold, isRigid: false }));
+ }
+ };
+ TimeGridView.prototype.renderNowIndicator = function (date) {
+ this.simpleTimeGrid.renderNowIndicator(date);
+ };
+ return TimeGridView;
+ }(TimeGridView));
+ function buildDayTable(dateProfile, dateProfileGenerator) {
+ var daySeries = new core.DaySeries(dateProfile.renderRange, dateProfileGenerator);
+ return new core.DayTable(daySeries, false);
+ }
+
+ var main = core.createPlugin({
+ defaultView: 'timeGridWeek',
+ views: {
+ timeGrid: {
+ class: TimeGridView$1,
+ allDaySlot: true,
+ slotDuration: '00:30:00',
+ slotEventOverlap: true // a bad name. confused with overlap/constraint system
+ },
+ timeGridDay: {
+ type: 'timeGrid',
+ duration: { days: 1 }
+ },
+ timeGridWeek: {
+ type: 'timeGrid',
+ duration: { weeks: 1 }
+ }
+ }
+ });
+
+ exports.AbstractTimeGridView = TimeGridView;
+ exports.TimeGrid = TimeGrid;
+ exports.TimeGridSlicer = TimeGridSlicer;
+ exports.TimeGridView = TimeGridView$1;
+ exports.buildDayRanges = buildDayRanges;
+ exports.buildDayTable = buildDayTable;
+ exports.default = main;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+}));
--- /dev/null
+/*!
+FullCalendar Time Grid Plugin v4.1.0
+Docs & License: https://fullcalendar.io/
+(c) 2019 Adam Shaw
+*/.fc-timeGrid-view .fc-day-grid{position:relative;z-index:2}.fc-timeGrid-view .fc-day-grid .fc-row{min-height:3em}.fc-timeGrid-view .fc-day-grid .fc-row .fc-content-skeleton{padding-bottom:1em}.fc .fc-axis{vertical-align:middle;padding:0 4px;white-space:nowrap}.fc-ltr .fc-axis{text-align:right}.fc-rtl .fc-axis{text-align:left}.fc-time-grid,.fc-time-grid-container{position:relative;z-index:1}.fc-time-grid{min-height:100%}.fc-time-grid table{border:0 hidden transparent}.fc-time-grid>.fc-bg{z-index:1}.fc-time-grid .fc-slats,.fc-time-grid>hr{position:relative;z-index:2}.fc-time-grid .fc-content-col{position:relative}.fc-time-grid .fc-content-skeleton{position:absolute;z-index:3;top:0;left:0;right:0}.fc-time-grid .fc-business-container{position:relative;z-index:1}.fc-time-grid .fc-bgevent-container{position:relative;z-index:2}.fc-time-grid .fc-highlight-container{z-index:3;position:relative}.fc-time-grid .fc-event-container{position:relative;z-index:4}.fc-time-grid .fc-now-indicator-line{z-index:5}.fc-time-grid .fc-mirror-container{position:relative;z-index:6}.fc-time-grid .fc-slats td{height:1.5em;border-bottom:0}.fc-time-grid .fc-slats .fc-minor td{border-top-style:dotted}.fc-time-grid .fc-highlight{position:absolute;left:0;right:0}.fc-ltr .fc-time-grid .fc-event-container{margin:0 2.5% 0 2px}.fc-rtl .fc-time-grid .fc-event-container{margin:0 2px 0 2.5%}.fc-time-grid .fc-bgevent,.fc-time-grid .fc-event{position:absolute;z-index:1}.fc-time-grid .fc-bgevent{left:0;right:0}.fc-time-grid-event{margin-bottom:1px}.fc-time-grid-event-inset{-webkit-box-shadow:0 0 0 1px #fff;box-shadow:0 0 0 1px #fff}.fc-time-grid-event.fc-not-start{border-top-width:0;padding-top:1px;border-top-left-radius:0;border-top-right-radius:0}.fc-time-grid-event.fc-not-end{border-bottom-width:0;padding-bottom:1px;border-bottom-left-radius:0;border-bottom-right-radius:0}.fc-time-grid-event .fc-content{overflow:hidden;max-height:100%}.fc-time-grid-event .fc-time,.fc-time-grid-event .fc-title{padding:0 1px}.fc-time-grid-event .fc-time{font-size:.85em;white-space:nowrap}.fc-time-grid-event.fc-short .fc-content{white-space:nowrap}.fc-time-grid-event.fc-short .fc-time,.fc-time-grid-event.fc-short .fc-title{display:inline-block;vertical-align:top}.fc-time-grid-event.fc-short .fc-time span{display:none}.fc-time-grid-event.fc-short .fc-time:before{content:attr(data-start)}.fc-time-grid-event.fc-short .fc-time:after{content:"\000A0-\000A0"}.fc-time-grid-event.fc-short .fc-title{font-size:.85em;padding:0}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer{left:0;right:0;bottom:0;height:8px;overflow:hidden;line-height:8px;font-size:11px;font-family:monospace;text-align:center;cursor:s-resize}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after{content:"="}.fc-time-grid-event.fc-selected .fc-resizer{border-radius:5px;border-width:1px;width:8px;height:8px;border-style:solid;border-color:inherit;background:#fff;left:50%;margin-left:-5px;bottom:-5px}.fc-time-grid .fc-now-indicator-line{border-top-width:1px;left:0;right:0}.fc-time-grid .fc-now-indicator-arrow{margin-top:-5px}.fc-ltr .fc-time-grid .fc-now-indicator-arrow{left:0;border-width:5px 0 5px 6px;border-top-color:transparent;border-bottom-color:transparent}.fc-rtl .fc-time-grid .fc-now-indicator-arrow{right:0;border-width:5px 6px 5px 0;border-top-color:transparent;border-bottom-color:transparent}
\ No newline at end of file
--- /dev/null
+/*!
+FullCalendar Time Grid Plugin v4.1.0
+Docs & License: https://fullcalendar.io/
+(c) 2019 Adam Shaw
+*/
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@fullcalendar/core"),require("@fullcalendar/daygrid")):"function"==typeof define&&define.amd?define(["exports","@fullcalendar/core","@fullcalendar/daygrid"],t):(e=e||self,t(e.FullCalendarTimeGrid={},e.FullCalendar,e.FullCalendarDayGrid))}(this,function(e,t,r){"use strict";function i(e,t){function r(){this.constructor=e}u(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}function n(e){var t,r,i,n=[];for(t=0;t<e.length;t++){for(r=e[t],i=0;i<n.length&&a(r,n[i]).length;i++);r.level=i,(n[i]||(n[i]=[])).push(r)}return n}function o(e){var t,r,i,n,o;for(t=0;t<e.length;t++)for(r=e[t],i=0;i<r.length;i++)for(n=r[i],n.forwardSegs=[],o=t+1;o<e.length;o++)a(n,e[o],n.forwardSegs)}function s(e){var t,r,i=e.forwardSegs,n=0;if(void 0===e.forwardPressure){for(t=0;t<i.length;t++)r=i[t],s(r),n=Math.max(n,1+r.forwardPressure);e.forwardPressure=n}}function a(e,t,r){void 0===r&&(r=[]);for(var i=0;i<t.length;i++)l(e,t[i])&&r.push(t[i]);return r}function l(e,t){return e.bottom>t.top&&e.top<t.bottom}function d(e){var r=t.buildSegCompareObj(e);return r.forwardPressure=e.forwardPressure,r.backwardCoord=e.backwardCoord,r}function c(e,t,r){for(var i=[],n=0,o=e.headerDates;n<o.length;n++){var s=o[n];i.push({start:r.add(s,t.minTime),end:r.add(s,t.maxTime)})}return i}function h(e,r){var i=new t.DaySeries(e.renderRange,r);return new t.DayTable(i,!1)}/*! *****************************************************************************
+ 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 u=function(e,t){return(u=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)},p=function(){return p=Object.assign||function(e){for(var t,r=1,i=arguments.length;r<i;r++){t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},p.apply(this,arguments)},f=function(e){function r(r){var i=e.call(this,r.context)||this;return i.timeGrid=r,i.fullTimeFormat=t.createFormatter({hour:"numeric",minute:"2-digit",separator:i.context.options.defaultRangeSeparator}),i}return i(r,e),r.prototype.attachSegs=function(e,t){for(var r=this.timeGrid.groupSegsByCol(e),i=0;i<r.length;i++)r[i]=this.sortEventSegs(r[i]);this.segsByCol=r,this.timeGrid.attachSegsByCol(r,this.timeGrid.fgContainerEls)},r.prototype.detachSegs=function(e){e.forEach(function(e){t.removeElement(e.el)}),this.segsByCol=null},r.prototype.computeSegSizes=function(e){var t=this,r=t.timeGrid,i=t.segsByCol,n=r.colCnt;if(r.computeSegVerticals(e),i)for(var o=0;o<n;o++)this.computeSegHorizontals(i[o])},r.prototype.assignSegSizes=function(e){var t=this,r=t.timeGrid,i=t.segsByCol,n=r.colCnt;if(r.assignSegVerticals(e),i)for(var o=0;o<n;o++)this.assignSegCss(i[o])},r.prototype.computeEventTimeFormat=function(){return{hour:"numeric",minute:"2-digit",meridiem:!1}},r.prototype.computeDisplayEventEnd=function(){return!0},r.prototype.renderSegHtml=function(e,r){var i,n,o,s=e.eventRange,a=s.def,l=s.ui,d=a.allDay,c=l.startEditable,h=e.isStart&&l.durationEditable&&this.context.options.eventResizableFromStart,u=e.isEnd&&l.durationEditable,p=this.getSegClasses(e,c,h||u,r),f=t.cssToStr(this.getSkinCss(l));if(p.unshift("fc-time-grid-event"),t.isMultiDayRange(s.range)){if(e.isStart||e.isEnd){var g=e.start,m=e.end;i=this._getTimeText(g,m,d),n=this._getTimeText(g,m,d,this.fullTimeFormat),o=this._getTimeText(g,m,d,null,!1)}}else i=this.getTimeText(s),n=this.getTimeText(s,this.fullTimeFormat),o=this.getTimeText(s,null,!1);return'<a class="'+p.join(" ")+'"'+(a.url?' href="'+t.htmlEscape(a.url)+'"':"")+(f?' style="'+f+'"':"")+'><div class="fc-content">'+(i?'<div class="fc-time" data-start="'+t.htmlEscape(o)+'" data-full="'+t.htmlEscape(n)+'"><span>'+t.htmlEscape(i)+"</span></div>":"")+(a.title?'<div class="fc-title">'+t.htmlEscape(a.title)+"</div>":"")+"</div>"+(u?'<div class="fc-resizer fc-end-resizer"></div>':"")+"</a>"},r.prototype.computeSegHorizontals=function(e){var t,r,i;if(t=n(e),o(t),r=t[0]){for(i=0;i<r.length;i++)s(r[i]);for(i=0;i<r.length;i++)this.computeSegForwardBack(r[i],0,0)}},r.prototype.computeSegForwardBack=function(e,t,r){var i,n=e.forwardSegs;if(void 0===e.forwardCoord)for(n.length?(this.sortForwardSegs(n),this.computeSegForwardBack(n[0],t+1,r),e.forwardCoord=n[0].backwardCoord):e.forwardCoord=1,e.backwardCoord=e.forwardCoord-(e.forwardCoord-r)/(t+1),i=0;i<n.length;i++)this.computeSegForwardBack(n[i],0,e.forwardCoord)},r.prototype.sortForwardSegs=function(e){var r=e.map(d),i=[{field:"forwardPressure",order:-1},{field:"backwardCoord",order:1}].concat(this.context.view.eventOrderSpecs);return r.sort(function(e,r){return t.compareByFieldSpecs(e,r,i)}),r.map(function(e){return e._seg})},r.prototype.assignSegCss=function(e){for(var r=0,i=e;r<i.length;r++){var n=i[r];t.applyStyle(n.el,this.generateSegCss(n)),n.level>0&&n.el.classList.add("fc-time-grid-event-inset"),n.eventRange.def.title&&n.bottom-n.top<30&&n.el.classList.add("fc-short")}},r.prototype.generateSegCss=function(e){var t,r,i=this.context.options.slotEventOverlap,n=e.backwardCoord,o=e.forwardCoord,s=this.timeGrid.generateSegVerticalCss(e),a=this.timeGrid.isRtl;return i&&(o=Math.min(1,n+2*(o-n))),a?(t=1-o,r=n):(t=n,r=1-o),s.zIndex=e.level+1,s.left=100*t+"%",s.right=100*r+"%",i&&e.forwardPressure&&(s[a?"marginLeft":"marginRight"]=20),s},r}(t.FgEventRenderer),g=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.attachSegs=function(e,t){this.segsByCol=this.timeGrid.groupSegsByCol(e),this.timeGrid.attachSegsByCol(this.segsByCol,this.timeGrid.mirrorContainerEls),this.sourceSeg=t.sourceSeg},t.prototype.generateSegCss=function(t){var r=e.prototype.generateSegCss.call(this,t),i=this.sourceSeg;if(i&&i.col===t.col){var n=e.prototype.generateSegCss.call(this,i);r.left=n.left,r.right=n.right,r.marginLeft=n.marginLeft,r.marginRight=n.marginRight}return r},t}(f),m=function(e){function t(t){var r=e.call(this,t.context)||this;return r.timeGrid=t,r}return i(t,e),t.prototype.attachSegs=function(e,t){var r,i=this.timeGrid;return"bgEvent"===e?r=i.bgContainerEls:"businessHours"===e?r=i.businessContainerEls:"highlight"===e&&(r=i.highlightContainerEls),i.attachSegsByCol(i.groupSegsByCol(t),r),t.map(function(e){return e.el})},t.prototype.computeSegSizes=function(e){this.timeGrid.computeSegVerticals(e)},t.prototype.assignSegSizes=function(e){this.timeGrid.assignSegVerticals(e)},t}(t.FillRenderer),y=[{hours:1},{minutes:30},{minutes:15},{seconds:30},{seconds:15}],v=function(e){function n(r,i,n){var o=e.call(this,r,i)||this;o.isSlatSizesDirty=!1,o.isColSizesDirty=!1,o.renderSlats=t.memoizeRendering(o._renderSlats);var s=o.eventRenderer=new f(o),a=o.fillRenderer=new m(o);o.mirrorRenderer=new g(o);var l=o.renderColumns=t.memoizeRendering(o._renderColumns,o._unrenderColumns);return o.renderBusinessHours=t.memoizeRendering(a.renderSegs.bind(a,"businessHours"),a.unrender.bind(a,"businessHours"),[l]),o.renderDateSelection=t.memoizeRendering(o._renderDateSelection,o._unrenderDateSelection,[l]),o.renderFgEvents=t.memoizeRendering(s.renderSegs.bind(s),s.unrender.bind(s),[l]),o.renderBgEvents=t.memoizeRendering(a.renderSegs.bind(a,"bgEvent"),a.unrender.bind(a,"bgEvent"),[l]),o.renderEventSelection=t.memoizeRendering(s.selectByInstanceId.bind(s),s.unselectByInstanceId.bind(s),[o.renderFgEvents]),o.renderEventDrag=t.memoizeRendering(o._renderEventDrag,o._unrenderEventDrag,[l]),o.renderEventResize=t.memoizeRendering(o._renderEventResize,o._unrenderEventResize,[l]),o.processOptions(),i.innerHTML='<div class="fc-bg"></div><div class="fc-slats"></div><hr class="fc-divider '+o.theme.getClass("widgetHeader")+'" style="display:none" />',o.rootBgContainerEl=i.querySelector(".fc-bg"),o.slatContainerEl=i.querySelector(".fc-slats"),o.bottomRuleEl=i.querySelector(".fc-divider"),o.renderProps=n,o}return i(n,e),n.prototype.processOptions=function(){var e,r,i=this.opt("slotDuration"),n=this.opt("snapDuration");i=t.createDuration(i),n=n?t.createDuration(n):i,e=t.wholeDivideDurations(i,n),null===e&&(n=i,e=1),this.slotDuration=i,this.snapDuration=n,this.snapsPerSlot=e,r=this.opt("slotLabelFormat"),Array.isArray(r)&&(r=r[r.length-1]),this.labelFormat=t.createFormatter(r||{hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"short"}),r=this.opt("slotLabelInterval"),this.labelInterval=r?t.createDuration(r):this.computeLabelInterval(i)},n.prototype.computeLabelInterval=function(e){var r,i,n;for(r=y.length-1;r>=0;r--)if(i=t.createDuration(y[r]),null!==(n=t.wholeDivideDurations(i,e))&&n>1)return i;return e},n.prototype.render=function(e){var t=e.cells;this.colCnt=t.length,this.renderSlats(e.dateProfile),this.renderColumns(e.cells,e.dateProfile),this.renderBusinessHours(e.businessHourSegs),this.renderDateSelection(e.dateSelectionSegs),this.renderFgEvents(e.fgEventSegs),this.renderBgEvents(e.bgEventSegs),this.renderEventSelection(e.eventSelection),this.renderEventDrag(e.eventDrag),this.renderEventResize(e.eventResize)},n.prototype.destroy=function(){e.prototype.destroy.call(this),this.renderSlats.unrender(),this.renderColumns.unrender()},n.prototype.updateSize=function(e){var t=this,r=t.fillRenderer,i=t.eventRenderer,n=t.mirrorRenderer;(e||this.isSlatSizesDirty)&&(this.buildSlatPositions(),this.isSlatSizesDirty=!1),(e||this.isColSizesDirty)&&(this.buildColPositions(),this.isColSizesDirty=!1),r.computeSizes(e),i.computeSizes(e),n.computeSizes(e),r.assignSizes(e),i.assignSizes(e),n.assignSizes(e)},n.prototype._renderSlats=function(e){var r=this.theme;this.slatContainerEl.innerHTML='<table class="'+r.getClass("tableGrid")+'">'+this.renderSlatRowHtml(e)+"</table>",this.slatEls=t.findElements(this.slatContainerEl,"tr"),this.slatPositions=new t.PositionCache(this.el,this.slatEls,!1,!0),this.isSlatSizesDirty=!0},n.prototype.renderSlatRowHtml=function(e){for(var r,i,n,o=this,s=o.dateEnv,a=o.theme,l=o.isRtl,d="",c=t.startOfDay(e.renderRange.start),h=e.minTime,u=t.createDuration(0);t.asRoughMs(h)<t.asRoughMs(e.maxTime);)r=s.add(c,h),i=null!==t.wholeDivideDurations(u,this.labelInterval),n='<td class="fc-axis fc-time '+a.getClass("widgetContent")+'">'+(i?"<span>"+t.htmlEscape(s.format(r,this.labelFormat))+"</span>":"")+"</td>",d+='<tr data-time="'+t.formatIsoTimeString(r)+'"'+(i?"":' class="fc-minor"')+">"+(l?"":n)+'<td class="'+a.getClass("widgetContent")+'"></td>'+(l?n:"")+"</tr>",h=t.addDurations(h,this.slotDuration),u=t.addDurations(u,this.slotDuration);return d},n.prototype._renderColumns=function(e,i){var n=this,o=n.theme,s=n.dateEnv,a=n.view,l=new r.DayBgRow(this.context);this.rootBgContainerEl.innerHTML='<table class="'+o.getClass("tableGrid")+'">'+l.renderHtml({cells:e,dateProfile:i,renderIntroHtml:this.renderProps.renderBgIntroHtml})+"</table>",this.colEls=t.findElements(this.el,".fc-day, .fc-disabled-day");for(var d=0;d<this.colCnt;d++)this.publiclyTrigger("dayRender",[{date:s.toDate(e[d].date),el:this.colEls[d],view:a}]);this.isRtl&&this.colEls.reverse(),this.colPositions=new t.PositionCache(this.el,this.colEls,!0,!1),this.renderContentSkeleton(),this.isColSizesDirty=!0},n.prototype._unrenderColumns=function(){this.unrenderContentSkeleton()},n.prototype.renderContentSkeleton=function(){var e,r=[];r.push(this.renderProps.renderIntroHtml());for(var i=0;i<this.colCnt;i++)r.push('<td><div class="fc-content-col"><div class="fc-event-container fc-mirror-container"></div><div class="fc-event-container"></div><div class="fc-highlight-container"></div><div class="fc-bgevent-container"></div><div class="fc-business-container"></div></div></td>');this.isRtl&&r.reverse(),e=this.contentSkeletonEl=t.htmlToElement('<div class="fc-content-skeleton"><table><tr>'+r.join("")+"</tr></table></div>"),this.colContainerEls=t.findElements(e,".fc-content-col"),this.mirrorContainerEls=t.findElements(e,".fc-mirror-container"),this.fgContainerEls=t.findElements(e,".fc-event-container:not(.fc-mirror-container)"),this.bgContainerEls=t.findElements(e,".fc-bgevent-container"),this.highlightContainerEls=t.findElements(e,".fc-highlight-container"),this.businessContainerEls=t.findElements(e,".fc-business-container"),this.isRtl&&(this.colContainerEls.reverse(),this.mirrorContainerEls.reverse(),this.fgContainerEls.reverse(),this.bgContainerEls.reverse(),this.highlightContainerEls.reverse(),this.businessContainerEls.reverse()),this.el.appendChild(e)},n.prototype.unrenderContentSkeleton=function(){t.removeElement(this.contentSkeletonEl)},n.prototype.groupSegsByCol=function(e){var t,r=[];for(t=0;t<this.colCnt;t++)r.push([]);for(t=0;t<e.length;t++)r[e[t].col].push(e[t]);return r},n.prototype.attachSegsByCol=function(e,t){var r,i,n;for(r=0;r<this.colCnt;r++)for(i=e[r],n=0;n<i.length;n++)t[r].appendChild(i[n].el)},n.prototype.getNowIndicatorUnit=function(){return"minute"},n.prototype.renderNowIndicator=function(e,r){if(this.colContainerEls){var i,n=this.computeDateTop(r),o=[];for(i=0;i<e.length;i++){var s=t.createElement("div",{className:"fc-now-indicator fc-now-indicator-line"});s.style.top=n+"px",this.colContainerEls[e[i].col].appendChild(s),o.push(s)}if(e.length>0){var a=t.createElement("div",{className:"fc-now-indicator fc-now-indicator-arrow"});a.style.top=n+"px",this.contentSkeletonEl.appendChild(a),o.push(a)}this.nowIndicatorEls=o}},n.prototype.unrenderNowIndicator=function(){this.nowIndicatorEls&&(this.nowIndicatorEls.forEach(t.removeElement),this.nowIndicatorEls=null)},n.prototype.getTotalSlatHeight=function(){return this.slatContainerEl.offsetHeight},n.prototype.computeDateTop=function(e,r){return r||(r=t.startOfDay(e)),this.computeTimeTop(e.valueOf()-r.valueOf())},n.prototype.computeTimeTop=function(e){var r,i,n=this.slatEls.length,o=this.props.dateProfile,s=(e-t.asRoughMs(o.minTime))/t.asRoughMs(this.slotDuration);return s=Math.max(0,s),s=Math.min(n,s),r=Math.floor(s),r=Math.min(r,n-1),i=s-r,this.slatPositions.tops[r]+this.slatPositions.getHeight(r)*i},n.prototype.computeSegVerticals=function(e){var t,r,i,n=this.opt("timeGridEventMinHeight");for(t=0;t<e.length;t++)r=e[t],i=this.props.cells[r.col].date,r.top=this.computeDateTop(r.start,i),r.bottom=Math.max(r.top+n,this.computeDateTop(r.end,i))},n.prototype.assignSegVerticals=function(e){var r,i;for(r=0;r<e.length;r++)i=e[r],t.applyStyle(i.el,this.generateSegVerticalCss(i))},n.prototype.generateSegVerticalCss=function(e){return{top:e.top,bottom:-e.bottom}},n.prototype.buildPositionCaches=function(){this.buildColPositions(),this.buildSlatPositions()},n.prototype.buildColPositions=function(){this.colPositions.build()},n.prototype.buildSlatPositions=function(){this.slatPositions.build()},n.prototype.positionToHit=function(e,r){var i=this,n=i.dateEnv,o=i.snapsPerSlot,s=i.slatPositions,a=i.colPositions,l=a.leftToIndex(e),d=s.topToIndex(r);if(null!=l&&null!=d){var c=s.tops[d],h=s.getHeight(d),u=(r-c)/h,p=Math.floor(u*o),f=d*o+p,g=this.props.cells[l].date,m=t.addDurations(this.props.dateProfile.minTime,t.multiplyDuration(this.snapDuration,f)),y=n.add(g,m);return{col:l,dateSpan:{range:{start:y,end:n.add(y,this.snapDuration)},allDay:!1},dayEl:this.colEls[l],relativeRect:{left:a.lefts[l],right:a.rights[l],top:c,bottom:c+h}}}},n.prototype._renderEventDrag=function(e){e&&(this.eventRenderer.hideByHash(e.affectedInstances),e.isEvent?this.mirrorRenderer.renderSegs(e.segs,{isDragging:!0,sourceSeg:e.sourceSeg}):this.fillRenderer.renderSegs("highlight",e.segs))},n.prototype._unrenderEventDrag=function(e){e&&(this.eventRenderer.showByHash(e.affectedInstances),this.mirrorRenderer.unrender(e.segs,{isDragging:!0,sourceSeg:e.sourceSeg}),this.fillRenderer.unrender("highlight"))},n.prototype._renderEventResize=function(e){e&&(this.eventRenderer.hideByHash(e.affectedInstances),this.mirrorRenderer.renderSegs(e.segs,{isResizing:!0,sourceSeg:e.sourceSeg}))},n.prototype._unrenderEventResize=function(e){e&&(this.eventRenderer.showByHash(e.affectedInstances),this.mirrorRenderer.unrender(e.segs,{isResizing:!0,sourceSeg:e.sourceSeg}))},n.prototype._renderDateSelection=function(e){e&&(this.opt("selectMirror")?this.mirrorRenderer.renderSegs(e,{isSelecting:!0}):this.fillRenderer.renderSegs("highlight",e))},n.prototype._unrenderDateSelection=function(e){this.mirrorRenderer.unrender(e,{isSelecting:!0}),this.fillRenderer.unrender("highlight")},n}(t.DateComponent),S=function(e){function r(){return null!==e&&e.apply(this,arguments)||this}return i(r,e),r.prototype.getKeyInfo=function(){return{allDay:{},timed:{}}},r.prototype.getKeysForDateSpan=function(e){return e.allDay?["allDay"]:["timed"]},r.prototype.getKeysForEventDef=function(e){return e.allDay?t.hasBgRendering(e)?["timed","allDay"]:["allDay"]:["timed"]},r}(t.Splitter),C=t.createFormatter({week:"short"}),b=function(e){function n(i,n,o,s){var a=e.call(this,i,n,o,s)||this;a.splitter=new S,a.renderHeadIntroHtml=function(){var e,r=a,i=r.theme,n=r.dateEnv,o=a.props.dateProfile.renderRange,s=t.diffDays(o.start,o.end);return a.opt("weekNumbers")?(e=n.format(o.start,C),'<th class="fc-axis fc-week-number '+i.getClass("widgetHeader")+'" '+a.axisStyleAttr()+">"+t.buildGotoAnchorHtml(a,{date:o.start,type:"week",forceOff:s>1},t.htmlEscape(e))+"</th>"):'<th class="fc-axis '+i.getClass("widgetHeader")+'" '+a.axisStyleAttr()+"></th>"},a.renderTimeGridBgIntroHtml=function(){return'<td class="fc-axis '+a.theme.getClass("widgetContent")+'" '+a.axisStyleAttr()+"></td>"},a.renderTimeGridIntroHtml=function(){return'<td class="fc-axis" '+a.axisStyleAttr()+"></td>"},a.renderDayGridBgIntroHtml=function(){return'<td class="fc-axis '+a.theme.getClass("widgetContent")+'" '+a.axisStyleAttr()+"><span>"+t.getAllDayHtml(a)+"</span></td>"},a.renderDayGridIntroHtml=function(){return'<td class="fc-axis" '+a.axisStyleAttr()+"></td>"},a.el.classList.add("fc-timeGrid-view"),a.el.innerHTML=a.renderSkeletonHtml(),a.scroller=new t.ScrollComponent("hidden","auto");var l=a.scroller.el;a.el.querySelector(".fc-body > tr > td").appendChild(l),l.classList.add("fc-time-grid-container");var d=t.createElement("div",{className:"fc-time-grid"});return l.appendChild(d),a.timeGrid=new v(a.context,d,{renderBgIntroHtml:a.renderTimeGridBgIntroHtml,renderIntroHtml:a.renderTimeGridIntroHtml}),a.opt("allDaySlot")&&(a.dayGrid=new r.DayGrid(a.context,a.el.querySelector(".fc-day-grid"),{renderNumberIntroHtml:a.renderDayGridIntroHtml,renderBgIntroHtml:a.renderDayGridBgIntroHtml,renderIntroHtml:a.renderDayGridIntroHtml,colWeekNumbersVisible:!1,cellWeekNumbersVisible:!1}),a.dayGrid.bottomCoordPadding=a.el.querySelector(".fc-divider").offsetHeight),a}return i(n,e),n.prototype.destroy=function(){e.prototype.destroy.call(this),this.timeGrid.destroy(),this.dayGrid&&this.dayGrid.destroy(),this.scroller.destroy()},n.prototype.renderSkeletonHtml=function(){var e=this.theme;return'<table class="'+e.getClass("tableGrid")+'">'+(this.opt("columnHeader")?'<thead class="fc-head"><tr><td class="fc-head-container '+e.getClass("widgetHeader")+'"> </td></tr></thead>':"")+'<tbody class="fc-body"><tr><td class="'+e.getClass("widgetContent")+'">'+(this.opt("allDaySlot")?'<div class="fc-day-grid"></div><hr class="fc-divider '+e.getClass("widgetHeader")+'" />':"")+"</td></tr></tbody></table>"},n.prototype.getNowIndicatorUnit=function(){return this.timeGrid.getNowIndicatorUnit()},n.prototype.unrenderNowIndicator=function(){this.timeGrid.unrenderNowIndicator()},n.prototype.updateSize=function(t,r,i){e.prototype.updateSize.call(this,t,r,i),this.timeGrid.updateSize(t),this.dayGrid&&this.dayGrid.updateSize(t)},n.prototype.updateBaseSize=function(e,r,i){var n,o,s,a=this;if(this.axisWidth=t.matchCellWidths(t.findElements(this.el,".fc-axis")),!this.timeGrid.colEls)return void(i||(o=this.computeScrollerHeight(r),this.scroller.setHeight(o)));var l=t.findElements(this.el,".fc-row").filter(function(e){return!a.scroller.el.contains(e)});this.timeGrid.bottomRuleEl.style.display="none",this.scroller.clear(),l.forEach(t.uncompensateScroll),this.dayGrid&&(this.dayGrid.removeSegPopover(),n=this.opt("eventLimit"),n&&"number"!=typeof n&&(n=5),n&&this.dayGrid.limitRows(n)),i||(o=this.computeScrollerHeight(r),this.scroller.setHeight(o),s=this.scroller.getScrollbarWidths(),(s.left||s.right)&&(l.forEach(function(e){t.compensateScroll(e,s)}),o=this.computeScrollerHeight(r),this.scroller.setHeight(o)),this.scroller.lockOverflow(s),this.timeGrid.getTotalSlatHeight()<o&&(this.timeGrid.bottomRuleEl.style.display=""))},n.prototype.computeScrollerHeight=function(e){return e-t.subtractInnerElHeight(this.el,this.scroller.el)},n.prototype.computeDateScroll=function(e){var t=this.timeGrid.computeTimeTop(e);return t=Math.ceil(t),t&&t++,{top:t}},n.prototype.queryDateScroll=function(){return{top:this.scroller.getScrollTop()}},n.prototype.applyDateScroll=function(e){void 0!==e.top&&this.scroller.setScrollTop(e.top)},n.prototype.axisStyleAttr=function(){return null!=this.axisWidth?'style="width:'+this.axisWidth+'px"':""},n}(t.View);b.prototype.usesMinMaxTime=!0;var E=function(e){function r(r,i){var n=e.call(this,r,i.el)||this;return n.buildDayRanges=t.memoize(c),n.slicer=new D,n.timeGrid=i,r.calendar.registerInteractiveComponent(n,{el:n.timeGrid.el}),n}return i(r,e),r.prototype.destroy=function(){e.prototype.destroy.call(this),this.calendar.unregisterInteractiveComponent(this)},r.prototype.render=function(e){var t=e.dateProfile,r=e.dayTable,i=this.dayRanges=this.buildDayRanges(r,t,this.dateEnv);this.timeGrid.receiveProps(p({},this.slicer.sliceProps(e,t,null,this.timeGrid,i),{dateProfile:t,cells:r.cells[0]}))},r.prototype.renderNowIndicator=function(e){this.timeGrid.renderNowIndicator(this.slicer.sliceNowDate(e,this.timeGrid,this.dayRanges),e)},r.prototype.buildPositionCaches=function(){this.timeGrid.buildPositionCaches()},r.prototype.queryHit=function(e,t){var r=this.timeGrid.positionToHit(e,t);if(r)return{component:this.timeGrid,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}},r}(t.DateComponent),D=function(e){function r(){return null!==e&&e.apply(this,arguments)||this}return i(r,e),r.prototype.sliceRange=function(e,r){for(var i=[],n=0;n<r.length;n++){var o=t.intersectRanges(e,r[n]);o&&i.push({start:o.start,end:o.end,isStart:o.start.valueOf()===e.start.valueOf(),isEnd:o.end.valueOf()===e.end.valueOf(),col:n})}return i},r}(t.Slicer),w=function(e){function n(i,n,o,s){var a=e.call(this,i,n,o,s)||this;return a.buildDayTable=t.memoize(h),a.opt("columnHeader")&&(a.header=new t.DayHeader(a.context,a.el.querySelector(".fc-head-container"))),a.simpleTimeGrid=new E(a.context,a.timeGrid),a.dayGrid&&(a.simpleDayGrid=new r.SimpleDayGrid(a.context,a.dayGrid)),a}return i(n,e),n.prototype.destroy=function(){e.prototype.destroy.call(this),this.header&&this.header.destroy(),this.simpleTimeGrid.destroy(),this.simpleDayGrid&&this.simpleDayGrid.destroy()},n.prototype.render=function(t){e.prototype.render.call(this,t);var r=this.props.dateProfile,i=this.buildDayTable(r,this.dateProfileGenerator),n=this.splitter.splitProps(t);this.header&&this.header.receiveProps({dateProfile:r,dates:i.headerDates,datesRepDistinctDays:!0,renderIntroHtml:this.renderHeadIntroHtml}),this.simpleTimeGrid.receiveProps(p({},n.timed,{dateProfile:r,dayTable:i})),this.simpleDayGrid&&this.simpleDayGrid.receiveProps(p({},n.allDay,{dateProfile:r,dayTable:i,nextDayThreshold:this.nextDayThreshold,isRigid:!1}))},n.prototype.renderNowIndicator=function(e){this.simpleTimeGrid.renderNowIndicator(e)},n}(b),G=t.createPlugin({defaultView:"timeGridWeek",views:{timeGrid:{class:w,allDaySlot:!0,slotDuration:"00:30:00",slotEventOverlap:!0},timeGridDay:{type:"timeGrid",duration:{days:1}},timeGridWeek:{type:"timeGrid",duration:{weeks:1}}}});e.AbstractTimeGridView=b,e.TimeGrid=v,e.TimeGridSlicer=D,e.TimeGridView=w,e.buildDayRanges=c,e.buildDayTable=h,e.default=G,Object.defineProperty(e,"__esModule",{value:!0})});
\ No newline at end of file
--- /dev/null
+{
+ "_from": "@fullcalendar/timegrid",
+ "_id": "@fullcalendar/timegrid@4.1.0",
+ "_inBundle": false,
+ "_integrity": "sha512-UGAXN5qHnL8mDMr/+Zfrn7jh4GMO2WpOCLTUB8GmiSTbewVD+iHjhJuJKhkdrL8CEinEjHidsux3qXKSrFreYQ==",
+ "_location": "/@fullcalendar/timegrid",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "tag",
+ "registry": true,
+ "raw": "@fullcalendar/timegrid",
+ "name": "@fullcalendar/timegrid",
+ "escapedName": "@fullcalendar%2ftimegrid",
+ "scope": "@fullcalendar",
+ "rawSpec": "",
+ "saveSpec": null,
+ "fetchSpec": "latest"
+ },
+ "_requiredBy": [
+ "#USER",
+ "/"
+ ],
+ "_resolved": "https://registry.npmjs.org/@fullcalendar/timegrid/-/timegrid-4.1.0.tgz",
+ "_shasum": "6e825f0cab79d81875a73fbb563cc69844ff0ecf",
+ "_spec": "@fullcalendar/timegrid",
+ "_where": "C:\\Users\\ksaff\\Workspace\\Websites\\fullcalendar",
+ "author": {
+ "name": "Adam Shaw",
+ "email": "arshaw@arshaw.com",
+ "url": "http://arshaw.com/"
+ },
+ "bugs": {
+ "url": "https://fullcalendar.io/reporting-bugs"
+ },
+ "bundleDependencies": false,
+ "copyright": "2019 Adam Shaw",
+ "dependencies": {
+ "@fullcalendar/daygrid": "~4.1.0"
+ },
+ "deprecated": false,
+ "description": "Display your events on a grid of time slots",
+ "docs": "https://fullcalendar.io/docs/timegrid-view",
+ "homepage": "https://fullcalendar.io/",
+ "keywords": [
+ "calendar",
+ "event",
+ "full-sized"
+ ],
+ "license": "MIT",
+ "main": "main.js",
+ "name": "@fullcalendar/timegrid",
+ "peerDependencies": {
+ "@fullcalendar/core": "~4.1.0"
+ },
+ "releaseDate": "2019-04-24",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/fullcalendar/fullcalendar.git",
+ "homepage": "https://github.com/fullcalendar/fullcalendar"
+ },
+ "title": "FullCalendar Time Grid Plugin",
+ "types": "main.d.ts",
+ "unpkg": "main.min.js",
+ "version": "4.1.0"
+}
--- /dev/null
+
+For complete licensing information, visit:
+http://fullcalendar.io/scheduler/license
+
+FullCalendar Scheduler is tri-licensed, meaning you must choose
+one of three licenses to use. Here is a summary of those licenses:
+
+- Commercial License
+ (a paid license, meant for commercial use)
+ http://fullcalendar.io/scheduler/license-details
+
+- Creative Commons Non-Commercial No-Derivatives
+ (meant for trial and non-commercial use)
+ https://creativecommons.org/licenses/by-nc-nd/4.0/
+
+- GPLv3 License
+ (meant for open-source projects)
+ http://www.gnu.org/licenses/gpl-3.0.en.html
--- /dev/null
+
+# FullCalendar Timeline Plugin
+
+Display events on a horizontal time axis (without resources)
+
+[View the docs »](https://fullcalendar.io/docs/timeline-view-no-resources)
+
+This package was created from the [FullCalendar monorepo »](https://github.com/fullcalendar/fullcalendar-scheduler)
--- /dev/null
+/*!
+FullCalendar Timeline Plugin v4.1.0
+Docs & License: https://fullcalendar.io/scheduler
+(c) 2019 Adam Shaw
+*/
+/* Scroller
+--------------------------------------------------------------------------------------------------*/
+.fc-scroller-clip {
+ overflow: hidden;
+ /* for clipping scrollbars */
+ position: relative;
+ /* so things like scrollfollowers can attach to this */ }
+
+/* supresses rendering of native scrollbars */
+/* on .fc-scroller */
+.fc-no-scrollbars {
+ background: rgba(255, 255, 255, 0);
+ /* hack for dynamic DOM nodes (in Chrome OSX at least) */ }
+
+.fc-no-scrollbars::-webkit-scrollbar {
+ width: 0;
+ height: 0; }
+
+.fc-scroller-canvas {
+ position: relative;
+ /* origin for bg */
+ box-sizing: border-box;
+ /* so that padding (for gutter) will be part of height */
+ min-height: 100%; }
+
+.fc-scroller-canvas > .fc-bg {
+ z-index: 1;
+ /* make default? */ }
+
+.fc-scroller-canvas > .fc-content {
+ z-index: 2;
+ /* make default? */
+ position: relative;
+ /* origin for inner content */
+ border-style: solid;
+ border-width: 0; }
+
+.fc-scroller-canvas.fc-gutter-left > .fc-content {
+ border-left-width: 1px;
+ margin-left: -1px; }
+
+.fc-scroller-canvas.fc-gutter-right > .fc-content {
+ border-right-width: 1px;
+ margin-right: -1px; }
+
+.fc-scroller-canvas.fc-gutter-top > .fc-content {
+ border-top-width: 1px;
+ margin-top: -1px; }
+
+/* content is responsible for bottom border */
+/* View Structure
+--------------------------------------------------------------------------------------------------*/
+.fc-rtl .fc-timeline {
+ direction: rtl; }
+
+.fc-scrolled .fc-head .fc-scroller {
+ z-index: 2;
+ /* so drop shadow will go above body panes */ }
+
+.fc-timeline.fc-scrolled .fc-head .fc-scroller {
+ box-shadow: 0 3px 4px rgba(0, 0, 0, 0.075); }
+
+.fc-timeline .fc-body .fc-scroller {
+ z-index: 1; }
+
+/*
+on most tables that expand to the edges, kill the outer border,
+because the container elements take care of it.
+example tables:
+.fc-scroller-canvas .fc-content table
+.fc-scroller-canvas .fc-bg .fc-slats table
+*/
+.fc-timeline .fc-scroller-canvas > div > table,
+.fc-timeline .fc-scroller-canvas > div > div > table {
+ border-style: hidden; }
+
+/*
+for resource rows (in both the spreadsheet and timeline areas),
+undo previous rule in order to always show last border.
+*/
+.fc-timeline .fc-scroller-canvas > .fc-content > .fc-rows > table {
+ border-bottom-style: none; }
+
+/* Table Cell Common
+--------------------------------------------------------------------------------------------------*/
+.fc-timeline th,
+.fc-timeline td {
+ white-space: nowrap; }
+
+.fc-timeline .fc-cell-content {
+ overflow: hidden; }
+
+.fc-timeline .fc-cell-text {
+ display: inline-block;
+ padding-left: 4px;
+ padding-right: 4px; }
+
+/*
+Cells at the start of a week
+TODO: figure out better styling
+
+.fc-ltr .fc-timeline .fc-em-cell div {
+ border-left: 3px solid #eee;
+ height: 100%;
+}
+.fc-rtl .fc-timeline .fc-em-cell {
+ border-right-width: 3px;
+}
+*/
+/* head */
+.fc-timeline th {
+ vertical-align: middle; }
+
+.fc-timeline .fc-head .fc-cell-content {
+ padding-top: 3px;
+ padding-bottom: 3px; }
+
+.fc-timeline .fc-head .fc-time-area .fc-cell-content {
+ overflow: visible; }
+
+/* Time Area
+--------------------------------------------------------------------------------------------------*/
+.fc-time-area col {
+ min-width: 2.2em;
+ /* detected by JS */ }
+
+/* head */
+.fc-ltr .fc-time-area .fc-chrono th {
+ text-align: left; }
+
+.fc-rtl .fc-time-area .fc-chrono th {
+ text-align: right; }
+
+/* body slats (vertical lines) */
+.fc-time-area .fc-slats {
+ /* fc-bg is responsible for a lot of this now! */
+ position: absolute;
+ z-index: 1;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0; }
+
+.fc-time-area .fc-slats table {
+ height: 100%; }
+
+.fc-time-area .fc-slats .fc-minor {
+ border-style: dotted; }
+
+.fc-time-area .fc-slats td {
+ border-width: 0 1px;
+ /* need to do this. sometimes -1 margin wouldn't hide the dotted */ }
+
+.fc-ltr .fc-time-area .fc-slats td {
+ border-right-width: 0; }
+
+.fc-rtl .fc-time-area .fc-slats td {
+ border-left-width: 0; }
+
+/* body content containers
+ can be within rows or directly within the pane's content
+*/
+.fc-time-area .fc-bgevent-container,
+.fc-time-area .fc-highlight-container {
+ position: absolute;
+ z-index: 2;
+ /* only for directly within pane. not for row. overridden later */
+ top: 0;
+ bottom: 0;
+ width: 0; }
+
+.fc-ltr .fc-time-area .fc-mirror-container,
+.fc-ltr .fc-time-area .fc-bgevent-container,
+.fc-ltr .fc-time-area .fc-highlight-container {
+ left: 0; }
+
+.fc-rtl .fc-time-area .fc-mirror-container,
+.fc-rtl .fc-time-area .fc-bgevent-container,
+.fc-rtl .fc-time-area .fc-highlight-container {
+ right: 0; }
+
+.fc-time-area .fc-bgevent,
+.fc-time-area .fc-highlight {
+ position: absolute;
+ top: 0;
+ bottom: 0; }
+
+/* Now Indicator
+--------------------------------------------------------------------------------------------------*/
+.fc-timeline .fc-now-indicator {
+ /* both the arrow and the line */
+ z-index: 3;
+ /* one above scroller's fc-content */
+ top: 0; }
+
+.fc-time-area .fc-now-indicator-arrow {
+ margin: 0 -6px;
+ /* 5, then one more to counteract scroller's negative margins */
+ /* triangle pointing down... */
+ border-width: 6px 5px 0 5px;
+ border-left-color: transparent;
+ border-right-color: transparent; }
+
+.fc-time-area .fc-now-indicator-line {
+ margin: 0 -1px;
+ /* counteract scroller's negative margins */
+ bottom: 0;
+ border-left-width: 1px; }
+
+/* Event Container
+--------------------------------------------------------------------------------------------------*/
+.fc-time-area .fc-event-container {
+ position: relative;
+ z-index: 2;
+ /* above bgevent and highlight */
+ width: 0;
+ /* for event positioning. will end up on correct side based on dir */ }
+
+.fc-time-area .fc-mirror-container {
+ /* also an fc-event-container */
+ position: absolute;
+ z-index: 3;
+ top: 0; }
+
+.fc-time-area .fc-event-container {
+ padding-bottom: 8px;
+ top: -1px; }
+
+.fc-time-area tr:first-child .fc-event-container {
+ top: 0; }
+
+.fc-no-overlap .fc-time-area .fc-event-container {
+ padding-bottom: 0;
+ top: 0; }
+
+/* Time Grid Events
+--------------------------------------------------------------------------------------------------*/
+.fc-timeline-event {
+ position: absolute;
+ border-radius: 0;
+ padding: 2px 0;
+ margin-bottom: 1px; }
+
+.fc-no-overlap .fc-timeline-event {
+ padding: 5px 0;
+ margin-bottom: 0; }
+
+/* don't overlap grid lines at the event's end */
+.fc-ltr .fc-timeline-event {
+ margin-right: 1px; }
+
+.fc-rtl .fc-timeline-event {
+ margin-left: 1px; }
+
+.fc-timeline-event .fc-time {
+ font-weight: bold;
+ padding: 0 1px; }
+
+.fc-rtl .fc-timeline-event .fc-time {
+ display: inline-block;
+ /* will force it on the other side */ }
+
+.fc-timeline-event .fc-title {
+ padding: 0 3px;
+ display: inline-block;
+ vertical-align: top;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ max-width: 100%;
+ white-space: nowrap;
+ overflow: hidden; }
+
+.fc-ltr .fc-timeline-event.fc-not-start .fc-content,
+.fc-rtl .fc-timeline-event.fc-not-end .fc-content {
+ margin-left: 8px; }
+
+.fc-rtl .fc-timeline-event.fc-not-start .fc-content,
+.fc-ltr .fc-timeline-event.fc-not-end .fc-content {
+ margin-right: 8px; }
+
+.fc-timeline-event.fc-not-start .fc-content:before,
+.fc-timeline-event.fc-not-end .fc-content:after {
+ content: "";
+ position: absolute;
+ top: 50%;
+ margin-top: -5px;
+ border: 5px solid #000;
+ border-top-color: transparent;
+ border-bottom-color: transparent;
+ opacity: .5; }
+
+.fc-ltr .fc-timeline-event.fc-not-start .fc-content:before,
+.fc-rtl .fc-timeline-event.fc-not-end .fc-content:after {
+ border-left: 0;
+ left: -6px; }
+
+.fc-rtl .fc-timeline-event.fc-not-start .fc-content:before,
+.fc-ltr .fc-timeline-event.fc-not-end .fc-content:after {
+ border-right: 0;
+ right: -6px; }
--- /dev/null
+declare module "@fullcalendar/timeline/util/ScrollerCanvas" {
+ export { ScrollerCanvas as default, ScrollerCanvas };
+
+ class ScrollerCanvas {
+ el: HTMLElement;
+ contentEl: HTMLElement;
+ bgEl: HTMLElement;
+ gutters: any;
+ width: any;
+ minWidth: any;
+ constructor();
+ setGutters(gutters: any): void;
+ setWidth(width: any): void;
+ setMinWidth(minWidth: any): void;
+ clearWidth(): void;
+ updateSize(): void;
+ }
+}
+
+declare module "@fullcalendar/timeline/util/EnhancedScroller" {
+ import { ScrollComponent, EmitterInterface } from "@fullcalendar/core";
+ import ScrollerCanvas from "@fullcalendar/timeline/util/ScrollerCanvas";
+ export { EnhancedScroller as default, EnhancedScroller };
+ class EnhancedScroller extends ScrollComponent {
+ on: EmitterInterface['on'];
+ one: EmitterInterface['one'];
+ off: EmitterInterface['off'];
+ trigger: EmitterInterface['trigger'];
+ triggerWith: EmitterInterface['triggerWith'];
+ hasHandlers: EmitterInterface['hasHandlers'];
+ canvas: ScrollerCanvas;
+ isScrolling: boolean;
+ isTouching: boolean;
+ isMoving: boolean;
+ isTouchScrollEnabled: boolean;
+ preventTouchScrollHandler: any;
+ requestMovingEnd: any;
+ constructor(overflowX: string, overflowY: string);
+ destroy(): void;
+ disableTouchScroll(): void;
+ enableTouchScroll(): void;
+ bindPreventTouchScroll(): void;
+ unbindPreventTouchScroll(): void;
+ bindHandlers(): void;
+ unbindHandlers(): void;
+ reportScroll: () => void;
+ reportScrollStart: () => void;
+ reportMovingEnd(): void;
+ reportScrollEnd(): void;
+ reportTouchStart: () => void;
+ reportTouchEnd: () => void;
+ getScrollLeft(): number;
+ setScrollLeft(val: any): void;
+ getScrollFromLeft(): number;
+ }
+}
+
+declare module "@fullcalendar/timeline/util/ClippedScroller" {
+ import { ScrollbarWidths } from "@fullcalendar/core";
+ import EnhancedScroller from "@fullcalendar/timeline/util/EnhancedScroller";
+ export { ClippedScroller as default, ClippedScroller };
+ class ClippedScroller {
+ el: HTMLElement;
+ enhancedScroll: EnhancedScroller;
+ isHScrollbarsClipped: boolean;
+ isVScrollbarsClipped: boolean;
+ constructor(overflowX: string, overflowY: string, parentEl: HTMLElement);
+ destroy(): void;
+ updateSize(): void;
+ setHeight(height: number | string): void;
+ getScrollbarWidths(): ScrollbarWidths;
+ }
+}
+
+declare module "@fullcalendar/timeline/util/ScrollJoiner" {
+ import ClippedScroller from "@fullcalendar/timeline/util/ClippedScroller";
+ export { ScrollJoiner as default, ScrollJoiner };
+ class ScrollJoiner {
+ axis: any;
+ scrollers: ClippedScroller[];
+ masterScroller: ClippedScroller;
+ constructor(axis: any, scrollers: ClippedScroller[]);
+ initScroller(scroller: ClippedScroller): void;
+ assignMasterScroller(scroller: any): void;
+ unassignMasterScroller(): void;
+ update(): void;
+ }
+}
+
+declare module "@fullcalendar/timeline/HeaderBodyLayout" {
+ import ClippedScroller from "@fullcalendar/timeline/util/ClippedScroller";
+ import ScrollJoiner from "@fullcalendar/timeline/util/ScrollJoiner";
+ export { HeaderBodyLayout as default, HeaderBodyLayout };
+ class HeaderBodyLayout {
+ headerScroller: ClippedScroller;
+ bodyScroller: ClippedScroller;
+ scrollJoiner: ScrollJoiner;
+ constructor(headerContainerEl: any, bodyContainerEl: any, verticalScroll: any);
+ destroy(): void;
+ setHeight(totalHeight: any, isAuto: any): void;
+ queryHeadHeight(): number;
+ }
+}
+
+declare module "@fullcalendar/timeline/timeline-date-profile" {
+ import { Duration, View, DateProfile, DateMarker, DateEnv, DateRange } from "@fullcalendar/core";
+ export interface TimelineDateProfile {
+ labelInterval: Duration;
+ slotDuration: Duration;
+ headerFormats: any;
+ isTimeScale: boolean;
+ largeUnit: string;
+ emphasizeWeeks: boolean;
+ snapDuration: Duration;
+ snapsPerSlot: number;
+ normalizedRange: DateRange;
+ timeWindowMs: number;
+ slotDates: DateMarker[];
+ isWeekStarts: boolean[];
+ snapDiffToIndex: number[];
+ snapIndexToDiff: number[];
+ snapCnt: number;
+ slotCnt: number;
+ cellRows: TimelineHeaderCell[][];
+ }
+ export interface TimelineHeaderCell {
+ text: string;
+ spanHtml: string;
+ date: DateMarker;
+ colspan: number;
+ isWeekStart: boolean;
+ }
+ export function buildTimelineDateProfile(dateProfile: DateProfile, view: View): TimelineDateProfile;
+ export function normalizeDate(date: DateMarker, tDateProfile: TimelineDateProfile, dateEnv: DateEnv): DateMarker;
+ export function normalizeRange(range: DateRange, tDateProfile: TimelineDateProfile, dateEnv: DateEnv): DateRange;
+ export function isValidDate(date: DateMarker, tDateProfile: TimelineDateProfile, dateProfile: DateProfile, view: View): boolean;
+}
+
+declare module "@fullcalendar/timeline/TimelineHeader" {
+ import { Component, ComponentContext, DateProfile } from "@fullcalendar/core";
+ import { TimelineDateProfile } from "@fullcalendar/timeline/timeline-date-profile";
+ export interface TimelineHeaderProps {
+ dateProfile: DateProfile;
+ tDateProfile: TimelineDateProfile;
+ }
+ export { TimelineHeader as default, TimelineHeader };
+ class TimelineHeader extends Component<TimelineHeaderProps> {
+ tableEl: HTMLElement;
+ slatColEls: HTMLElement[];
+ innerEls: HTMLElement[];
+ constructor(context: ComponentContext, parentEl: HTMLElement);
+ destroy(): void;
+ render(props: TimelineHeaderProps): void;
+ renderDates(tDateProfile: TimelineDateProfile): void;
+ }
+}
+
+declare module "@fullcalendar/timeline/TimelineSlats" {
+ import { PositionCache, Component, ComponentContext, DateProfile } from "@fullcalendar/core";
+ import { TimelineDateProfile } from "@fullcalendar/timeline/timeline-date-profile";
+ export interface TimelineSlatsProps {
+ dateProfile: DateProfile;
+ tDateProfile: TimelineDateProfile;
+ }
+ export { TimelineSlats as default, TimelineSlats };
+ class TimelineSlats extends Component<TimelineSlatsProps> {
+ el: HTMLElement;
+ slatColEls: HTMLElement[];
+ slatEls: HTMLElement[];
+ outerCoordCache: PositionCache;
+ innerCoordCache: PositionCache;
+ constructor(context: ComponentContext, parentEl: HTMLElement);
+ destroy(): void;
+ render(props: TimelineSlatsProps): void;
+ renderDates(tDateProfile: TimelineDateProfile): void;
+ slatCellHtml(date: any, isEm: any, tDateProfile: TimelineDateProfile): string;
+ updateSize(): void;
+ positionToHit(leftPosition: any): {
+ dateSpan: {
+ range: {
+ start: Date;
+ end: Date;
+ };
+ allDay: boolean;
+ };
+ dayEl: HTMLElement;
+ left: any;
+ right: any;
+ };
+ }
+}
+
+declare module "@fullcalendar/timeline/TimelineNowIndicator" {
+ export { TimelineNowIndicator as default, TimelineNowIndicator };
+
+ class TimelineNowIndicator {
+ headParent: HTMLElement;
+ bodyParent: HTMLElement;
+ arrowEl: HTMLElement;
+ lineEl: HTMLElement;
+ constructor(headParent: HTMLElement, bodyParent: HTMLElement);
+ render(coord: number, isRtl: boolean): void;
+ unrender(): void;
+ }
+}
+
+declare module "@fullcalendar/timeline/util/StickyScroller" {
+ import { Rect, Point } from "@fullcalendar/core";
+ import EnhancedScroller from "@fullcalendar/timeline/util/EnhancedScroller";
+ interface ElementGeom {
+ parentBound: Rect;
+ naturalBound: Rect | null;
+ elWidth: number;
+ elHeight: number;
+ computedTextAlign: string;
+ intendedTextAlign: string;
+ }
+ export { StickyScroller as default, StickyScroller };
+ class StickyScroller {
+ scroller: EnhancedScroller;
+ usingRelative: boolean | null;
+ constructor(scroller: EnhancedScroller, isRtl: boolean, isVertical: boolean);
+ destroy(): void;
+ updateSize: () => void;
+ queryElGeoms(els: HTMLElement[]): ElementGeom[];
+ computeElDestinations(elGeoms: ElementGeom[], viewportWidth: number): Point[];
+ }
+}
+
+declare module "@fullcalendar/timeline/TimeAxis" {
+ import { DateProfile, DateMarker, Component, ComponentContext } from "@fullcalendar/core";
+ import HeaderBodyLayout from "@fullcalendar/timeline/HeaderBodyLayout";
+ import TimelineHeader from "@fullcalendar/timeline/TimelineHeader";
+ import TimelineSlats from "@fullcalendar/timeline/TimelineSlats";
+ import { TimelineDateProfile } from "@fullcalendar/timeline/timeline-date-profile";
+ import TimelineNowIndicator from "@fullcalendar/timeline/TimelineNowIndicator";
+ import StickyScroller from "@fullcalendar/timeline/util/StickyScroller";
+ export interface TimeAxisProps {
+ dateProfile: DateProfile;
+ }
+ export { TimeAxis as default, TimeAxis };
+ class TimeAxis extends Component<TimeAxisProps> {
+ layout: HeaderBodyLayout;
+ header: TimelineHeader;
+ slats: TimelineSlats;
+ nowIndicator: TimelineNowIndicator;
+ headStickyScroller: StickyScroller;
+ bodyStickyScroller: StickyScroller;
+ tDateProfile: TimelineDateProfile;
+ constructor(context: ComponentContext, headerContainerEl: any, bodyContainerEl: any);
+ destroy(): void;
+ render(props: TimeAxisProps): void;
+ getNowIndicatorUnit(dateProfile: DateProfile): string;
+ renderNowIndicator(date: any): void;
+ unrenderNowIndicator(): void;
+ updateSize(isResize: any, totalHeight: any, isAuto: any): void;
+ updateStickyScrollers(): void;
+ computeSlotWidth(): any;
+ computeDefaultSlotWidth(tDateProfile: any): number;
+ applySlotWidth(slotWidth: number | string): void;
+ computeDateSnapCoverage(date: DateMarker): number;
+ dateToCoord(date: any): any;
+ rangeToCoords(range: any): {
+ right: any;
+ left: any;
+ };
+ computeDateScroll(timeMs: any): {
+ left: number;
+ };
+ queryDateScroll(): {
+ left: number;
+ };
+ applyDateScroll(scroll: any): void;
+ }
+}
+
+declare module "@fullcalendar/timeline/TimelineLaneEventRenderer" {
+ import { FgEventRenderer, Seg, ComponentContext } from "@fullcalendar/core";
+ import TimeAxis from "@fullcalendar/timeline/TimeAxis";
+ export { TimelineLaneEventRenderer as default, TimelineLaneEventRenderer };
+ class TimelineLaneEventRenderer extends FgEventRenderer {
+ timeAxis: TimeAxis;
+ masterContainerEl: HTMLElement;
+ el: HTMLElement;
+ constructor(context: ComponentContext, masterContainerEl: HTMLElement, timeAxis: TimeAxis);
+ renderSegHtml(seg: any, mirrorInfo: any): string;
+ computeDisplayEventTime(): boolean;
+ computeDisplayEventEnd(): boolean;
+ computeEventTimeFormat(): {
+ hour: string;
+ minute: string;
+ omitZeroMinute: boolean;
+ meridiem: string;
+ };
+ attachSegs(segs: Seg[], mirrorInfo: any): void;
+ detachSegs(segs: Seg[]): void;
+ computeSegSizes(segs: Seg[]): void;
+ assignSegSizes(segs: Seg[]): void;
+ buildSegLevels(segs: any): any[];
+ }
+}
+
+declare module "@fullcalendar/timeline/TimelineLaneFillRenderer" {
+ import { FillRenderer, ComponentContext, Seg } from "@fullcalendar/core";
+ import TimeAxis from "@fullcalendar/timeline/TimeAxis";
+ export { TimelineLaneFillRenderer as default, TimelineLaneFillRenderer };
+ class TimelineLaneFillRenderer extends FillRenderer {
+ timeAxis: TimeAxis;
+ masterContainerEl: HTMLElement;
+ constructor(context: ComponentContext, masterContainerEl: HTMLElement, timeAxis: TimeAxis);
+ attachSegs(type: any, segs: any): HTMLElement[];
+ computeSegSizes(segs: Seg[]): void;
+ assignSegSizes(segs: Seg[]): void;
+ }
+}
+
+declare module "@fullcalendar/timeline/TimelineLane" {
+ import { Duration, EventStore, EventUiHash, DateMarker, DateSpan, EventInteractionState, EventSegUiInteractionState, DateComponent, ComponentContext, Seg, DateProfile } from "@fullcalendar/core";
+ import TimeAxis from "@fullcalendar/timeline/TimeAxis";
+ export interface TimelineLaneSeg extends Seg {
+ start: DateMarker;
+ end: DateMarker;
+ }
+ export interface TimelineLaneProps {
+ dateProfile: DateProfile;
+ nextDayThreshold: Duration;
+ businessHours: EventStore | null;
+ eventStore: EventStore | null;
+ eventUiBases: EventUiHash;
+ dateSelection: DateSpan | null;
+ eventSelection: string;
+ eventDrag: EventInteractionState | null;
+ eventResize: EventInteractionState | null;
+ }
+ export { TimelineLane as default, TimelineLane };
+ class TimelineLane extends DateComponent<TimelineLaneProps> {
+ timeAxis: TimeAxis;
+ private slicer;
+ private renderBusinessHours;
+ private renderDateSelection;
+ private renderBgEvents;
+ private renderFgEvents;
+ private renderEventSelection;
+ private renderEventDrag;
+ private renderEventResize;
+ constructor(context: ComponentContext, fgContainerEl: HTMLElement, bgContainerEl: HTMLElement, timeAxis: TimeAxis);
+ render(props: TimelineLaneProps): void;
+ destroy(): void;
+ _renderEventDrag(state: EventSegUiInteractionState): void;
+ _unrenderEventDrag(state: EventSegUiInteractionState): void;
+ _renderEventResize(state: EventSegUiInteractionState): void;
+ _unrenderEventResize(state: EventSegUiInteractionState): void;
+ updateSize(isResize: boolean): void;
+ }
+}
+
+declare module "@fullcalendar/timeline/TimelineView" {
+ import { Hit, View, ViewProps, ComponentContext, ViewSpec, DateProfileGenerator, DateProfile } from "@fullcalendar/core";
+ import TimeAxis from "@fullcalendar/timeline/TimeAxis";
+ import TimelineLane from "@fullcalendar/timeline/TimelineLane";
+ export { TimelineView as default, TimelineView };
+ class TimelineView extends View {
+ timeAxis: TimeAxis;
+ lane: TimelineLane;
+ constructor(context: ComponentContext, viewSpec: ViewSpec, dateProfileGenerator: DateProfileGenerator, parentEl: HTMLElement);
+ destroy(): void;
+ renderSkeletonHtml(): string;
+ render(props: ViewProps): void;
+ updateSize(isResize: any, totalHeight: any, isAuto: any): void;
+ getNowIndicatorUnit(dateProfile: DateProfile): string;
+ renderNowIndicator(date: any): void;
+ unrenderNowIndicator(): void;
+ computeDateScroll(timeMs: number): {
+ left: number;
+ };
+ applyScroll(scroll: any, isResize: any): void;
+ applyDateScroll(scroll: any): void;
+ queryScroll(): {
+ top: number;
+ left: number;
+ };
+ buildPositionCaches(): void;
+ queryHit(positionLeft: number, positionTop: number, elWidth: number, elHeight: number): Hit;
+ }
+}
+
+declare module "@fullcalendar/timeline" {
+ import TimelineView from "@fullcalendar/timeline/TimelineView";
+ export { TimelineView };
+ export { default as TimelineLane } from "@fullcalendar/timeline/TimelineLane";
+ export { default as ScrollJoiner } from "@fullcalendar/timeline/util/ScrollJoiner";
+ export { default as StickyScroller } from "@fullcalendar/timeline/util/StickyScroller";
+ export { default as TimeAxis } from "@fullcalendar/timeline/TimeAxis";
+ export { default as HeaderBodyLayout } from "@fullcalendar/timeline/HeaderBodyLayout";
+ const _default_4: import("@fullcalendar/core").PluginDef;
+ export default _default_4;
+}
\ No newline at end of file
--- /dev/null
+/*!
+FullCalendar Timeline Plugin v4.1.0
+Docs & License: https://fullcalendar.io/scheduler
+(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.FullCalendarTimeline = {}, 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);
+ };
+
+ /*
+ A rectangular area of content that lives within a Scroller.
+ Can have "gutters", areas of dead spacing around the perimeter.
+ Also very useful for forcing a width, which a Scroller cannot do alone.
+ Has a content area that lives above a background area.
+ */
+ var ScrollerCanvas = /** @class */ (function () {
+ function ScrollerCanvas() {
+ this.gutters = {};
+ this.el = core.htmlToElement("<div class=\"fc-scroller-canvas\"> <div class=\"fc-content\"></div> <div class=\"fc-bg\"></div> </div>");
+ this.contentEl = this.el.querySelector('.fc-content');
+ this.bgEl = this.el.querySelector('.fc-bg');
+ }
+ /*
+ If falsy, resets all the gutters to 0
+ */
+ ScrollerCanvas.prototype.setGutters = function (gutters) {
+ if (!gutters) {
+ this.gutters = {};
+ }
+ else {
+ __assign(this.gutters, gutters);
+ }
+ this.updateSize();
+ };
+ ScrollerCanvas.prototype.setWidth = function (width) {
+ this.width = width;
+ this.updateSize();
+ };
+ ScrollerCanvas.prototype.setMinWidth = function (minWidth) {
+ this.minWidth = minWidth;
+ this.updateSize();
+ };
+ ScrollerCanvas.prototype.clearWidth = function () {
+ this.width = null;
+ this.minWidth = null;
+ this.updateSize();
+ };
+ ScrollerCanvas.prototype.updateSize = function () {
+ var _a = this, gutters = _a.gutters, el = _a.el;
+ // is border-box (width includes padding)
+ core.forceClassName(el, 'fc-gutter-left', gutters.left);
+ core.forceClassName(el, 'fc-gutter-right', gutters.right);
+ core.forceClassName(el, 'fc-gutter-top', gutters.top);
+ core.forceClassName(el, 'fc-gutter-bottom', gutters.bottom);
+ core.applyStyle(el, {
+ paddingLeft: gutters.left || '',
+ paddingRight: gutters.right || '',
+ paddingTop: gutters.top || '',
+ paddingBottom: gutters.bottom || '',
+ width: (this.width != null) ?
+ this.width + (gutters.left || 0) + (gutters.right || 0) :
+ '',
+ minWidth: (this.minWidth != null) ?
+ this.minWidth + (gutters.left || 0) + (gutters.right || 0) :
+ ''
+ });
+ core.applyStyle(this.bgEl, {
+ left: gutters.left || '',
+ right: gutters.right || '',
+ top: gutters.top || '',
+ bottom: gutters.bottom || ''
+ });
+ };
+ return ScrollerCanvas;
+ }());
+
+ var EnhancedScroller = /** @class */ (function (_super) {
+ __extends(EnhancedScroller, _super);
+ function EnhancedScroller(overflowX, overflowY) {
+ var _this = _super.call(this, overflowX, overflowY) || this;
+ // Scroll Events
+ // ----------------------------------------------------------------------------------------------
+ _this.reportScroll = function () {
+ if (!_this.isScrolling) {
+ _this.reportScrollStart();
+ }
+ _this.trigger('scroll');
+ _this.isMoving = true;
+ _this.requestMovingEnd();
+ };
+ _this.reportScrollStart = function () {
+ if (!_this.isScrolling) {
+ _this.isScrolling = true;
+ _this.trigger('scrollStart', _this.isTouching); // created in constructor
+ }
+ };
+ // Touch Events
+ // ----------------------------------------------------------------------------------------------
+ // will fire *before* the scroll event is fired
+ _this.reportTouchStart = function () {
+ _this.isTouching = true;
+ };
+ _this.reportTouchEnd = function () {
+ if (_this.isTouching) {
+ _this.isTouching = false;
+ // if touch scrolling was re-enabled during a recent touch scroll
+ // then unbind the handlers that are preventing it from happening.
+ if (_this.isTouchScrollEnabled) {
+ _this.unbindPreventTouchScroll(); // won't do anything if not bound
+ }
+ // if the user ended their touch, and the scroll area wasn't moving,
+ // we consider this to be the end of the scroll.
+ if (!_this.isMoving) {
+ _this.reportScrollEnd(); // won't fire if already ended
+ }
+ }
+ };
+ _this.isScrolling = false;
+ _this.isTouching = false;
+ _this.isMoving = false;
+ _this.isTouchScrollEnabled = true;
+ _this.requestMovingEnd = core.debounce(_this.reportMovingEnd, 500);
+ _this.canvas = new ScrollerCanvas();
+ _this.el.appendChild(_this.canvas.el);
+ _this.applyOverflow();
+ _this.bindHandlers();
+ return _this;
+ }
+ EnhancedScroller.prototype.destroy = function () {
+ _super.prototype.destroy.call(this);
+ this.unbindHandlers();
+ };
+ // Touch scroll prevention
+ // ----------------------------------------------------------------------------------------------
+ EnhancedScroller.prototype.disableTouchScroll = function () {
+ this.isTouchScrollEnabled = false;
+ this.bindPreventTouchScroll(); // will be unbound in enableTouchScroll or reportTouchEnd
+ };
+ EnhancedScroller.prototype.enableTouchScroll = function () {
+ this.isTouchScrollEnabled = true;
+ // only immediately unbind if a touch event is NOT in progress.
+ // otherwise, it will be handled by reportTouchEnd.
+ if (!this.isTouching) {
+ this.unbindPreventTouchScroll();
+ }
+ };
+ EnhancedScroller.prototype.bindPreventTouchScroll = function () {
+ if (!this.preventTouchScrollHandler) {
+ this.el.addEventListener('touchmove', (this.preventTouchScrollHandler = core.preventDefault));
+ }
+ };
+ EnhancedScroller.prototype.unbindPreventTouchScroll = function () {
+ if (this.preventTouchScrollHandler) {
+ this.el.removeEventListener('touchmove', this.preventTouchScrollHandler);
+ this.preventTouchScrollHandler = null;
+ }
+ };
+ // Handlers
+ // ----------------------------------------------------------------------------------------------
+ EnhancedScroller.prototype.bindHandlers = function () {
+ this.el.addEventListener('scroll', this.reportScroll);
+ this.el.addEventListener('touchstart', this.reportTouchStart, { passive: true });
+ this.el.addEventListener('touchend', this.reportTouchEnd);
+ };
+ EnhancedScroller.prototype.unbindHandlers = function () {
+ this.el.removeEventListener('scroll', this.reportScroll);
+ this.el.removeEventListener('touchstart', this.reportTouchStart, { passive: true });
+ this.el.removeEventListener('touchend', this.reportTouchEnd);
+ };
+ EnhancedScroller.prototype.reportMovingEnd = function () {
+ this.isMoving = false;
+ // only end the scroll if not currently touching.
+ // if touching, the scrolling will end later, on touchend.
+ if (!this.isTouching) {
+ this.reportScrollEnd();
+ }
+ };
+ EnhancedScroller.prototype.reportScrollEnd = function () {
+ if (this.isScrolling) {
+ this.trigger('scrollEnd');
+ this.isScrolling = false;
+ }
+ };
+ // Horizontal Scroll Normalization
+ // ----------------------------------------------------------------------------------------------
+ // http://stackoverflow.com/questions/24276619/better-way-to-get-the-viewport-of-a-scrollable-div-in-rtl-mode/24394376#24394376
+ // TODO: move all this to util functions
+ /*
+ If RTL, and scrolled to the left, returns NEGATIVE value (like Firefox)
+ */
+ EnhancedScroller.prototype.getScrollLeft = function () {
+ var el = this.el;
+ var direction = window.getComputedStyle(el).direction;
+ var val = el.scrollLeft;
+ if (direction === 'rtl') {
+ switch (getRtlScrollSystem()) {
+ case 'positive':
+ val = (val + el.clientWidth) - el.scrollWidth;
+ break;
+ case 'reverse':
+ val = -val;
+ break;
+ }
+ }
+ return val;
+ };
+ /*
+ Accepts a NEGATIVE value for when scrolled in RTL
+ */
+ EnhancedScroller.prototype.setScrollLeft = function (val) {
+ var el = this.el;
+ var direction = window.getComputedStyle(el).direction;
+ if (direction === 'rtl') {
+ switch (getRtlScrollSystem()) {
+ case 'positive':
+ val = (val - el.clientWidth) + el.scrollWidth;
+ break;
+ case 'reverse':
+ val = -val;
+ break;
+ }
+ }
+ el.scrollLeft = val;
+ };
+ /*
+ Always returns the number of pixels scrolled from the leftmost position (even if RTL).
+ Always positive.
+ */
+ EnhancedScroller.prototype.getScrollFromLeft = function () {
+ var el = this.el;
+ var direction = window.getComputedStyle(el).direction;
+ var val = el.scrollLeft;
+ if (direction === 'rtl') {
+ switch (getRtlScrollSystem()) {
+ case 'negative':
+ val = (val - el.clientWidth) + el.scrollWidth;
+ break;
+ case 'reverse':
+ val = (-val - el.clientWidth) + el.scrollWidth;
+ break;
+ }
+ }
+ return val;
+ };
+ return EnhancedScroller;
+ }(core.ScrollComponent));
+ core.EmitterMixin.mixInto(EnhancedScroller);
+ // Horizontal Scroll System Detection
+ // ----------------------------------------------------------------------------------------------
+ var _rtlScrollSystem;
+ function getRtlScrollSystem() {
+ return _rtlScrollSystem || (_rtlScrollSystem = detectRtlScrollSystem());
+ }
+ function detectRtlScrollSystem() {
+ var el = core.htmlToElement("<div style=\" position: absolute; top: -1000px; width: 1px; height: 1px; overflow: scroll; direction: rtl; font-size: 100px; \">A</div>");
+ document.body.appendChild(el);
+ var system;
+ if (el.scrollLeft > 0) {
+ system = 'positive';
+ }
+ else {
+ el.scrollLeft = 1;
+ if (el.scrollLeft > 0) {
+ system = 'reverse';
+ }
+ else {
+ system = 'negative';
+ }
+ }
+ core.removeElement(el);
+ return system;
+ }
+
+ /*
+ A Scroller, but with a wrapping div that allows "clipping" away of native scrollbars,
+ giving the appearance that there are no scrollbars.
+ */
+ var ClippedScroller = /** @class */ (function () {
+ /*
+ Received overflows can be set to 'clipped', meaning scrollbars shouldn't be visible
+ to the user, but the area should still scroll.
+ */
+ function ClippedScroller(overflowX, overflowY, parentEl) {
+ this.isHScrollbarsClipped = false;
+ this.isVScrollbarsClipped = false;
+ if (overflowX === 'clipped-scroll') {
+ overflowX = 'scroll';
+ this.isHScrollbarsClipped = true;
+ }
+ if (overflowY === 'clipped-scroll') {
+ overflowY = 'scroll';
+ this.isVScrollbarsClipped = true;
+ }
+ this.enhancedScroll = new EnhancedScroller(overflowX, overflowY);
+ parentEl.appendChild(this.el = core.createElement('div', {
+ className: 'fc-scroller-clip'
+ }));
+ this.el.appendChild(this.enhancedScroll.el);
+ }
+ ClippedScroller.prototype.destroy = function () {
+ core.removeElement(this.el);
+ };
+ ClippedScroller.prototype.updateSize = function () {
+ var enhancedScroll = this.enhancedScroll;
+ var scrollEl = enhancedScroll.el;
+ var edges = core.computeEdges(scrollEl);
+ var cssProps = { marginLeft: 0, marginRight: 0, marginTop: 0, marginBottom: 0 };
+ // give the inner scrolling div negative margins so that its scrollbars
+ // are nudged outside of the bounding box of the wrapper, which is overflow:hidden
+ if (this.isVScrollbarsClipped) {
+ cssProps.marginLeft = -edges.scrollbarLeft;
+ cssProps.marginRight = -edges.scrollbarRight;
+ }
+ if (this.isHScrollbarsClipped) {
+ cssProps.marginBottom = -edges.scrollbarBottom;
+ }
+ core.applyStyle(scrollEl, cssProps);
+ // if we are attempting to hide the scrollbars offscreen, OSX/iOS will still
+ // display the floating scrollbars. attach a className to force-hide them.
+ if ((this.isHScrollbarsClipped || (enhancedScroll.overflowX === 'hidden')) && // should never show?
+ (this.isVScrollbarsClipped || (enhancedScroll.overflowY === 'hidden')) && // should never show?
+ !( // doesn't have any scrollbar mass
+ edges.scrollbarLeft ||
+ edges.scrollbarRight ||
+ edges.scrollbarBottom)) {
+ scrollEl.classList.add('fc-no-scrollbars');
+ }
+ else {
+ scrollEl.classList.remove('fc-no-scrollbars');
+ }
+ };
+ ClippedScroller.prototype.setHeight = function (height) {
+ this.enhancedScroll.setHeight(height);
+ };
+ /*
+ Accounts for 'clipped' scrollbars
+ */
+ ClippedScroller.prototype.getScrollbarWidths = function () {
+ var widths = this.enhancedScroll.getScrollbarWidths();
+ if (this.isVScrollbarsClipped) {
+ widths.left = 0;
+ widths.right = 0;
+ }
+ if (this.isHScrollbarsClipped) {
+ widths.bottom = 0;
+ }
+ return widths;
+ };
+ return ClippedScroller;
+ }());
+
+ var ScrollJoiner = /** @class */ (function () {
+ function ScrollJoiner(axis, scrollers) {
+ this.axis = axis;
+ this.scrollers = scrollers;
+ for (var _i = 0, _a = this.scrollers; _i < _a.length; _i++) {
+ var scroller = _a[_i];
+ this.initScroller(scroller);
+ }
+ }
+ ScrollJoiner.prototype.initScroller = function (scroller) {
+ var _this = this;
+ var enhancedScroll = scroller.enhancedScroll;
+ // when the user scrolls via mousewheel, we know for sure the target
+ // scroller should be the master. capture the various x-browser events that fire.
+ var onScroll = function () {
+ _this.assignMasterScroller(scroller);
+ };
+ 'wheel mousewheel DomMouseScroll MozMousePixelScroll'.split(' ').forEach(function (evName) {
+ enhancedScroll.el.addEventListener(evName, onScroll);
+ });
+ enhancedScroll
+ .on('scrollStart', function () {
+ if (!_this.masterScroller) {
+ _this.assignMasterScroller(scroller);
+ }
+ })
+ .on('scroll', function () {
+ if (scroller === _this.masterScroller) {
+ for (var _i = 0, _a = _this.scrollers; _i < _a.length; _i++) {
+ var otherScroller = _a[_i];
+ if (otherScroller !== scroller) {
+ switch (_this.axis) {
+ case 'horizontal':
+ otherScroller.enhancedScroll.el.scrollLeft = enhancedScroll.el.scrollLeft;
+ break;
+ case 'vertical':
+ otherScroller.enhancedScroll.setScrollTop(enhancedScroll.getScrollTop());
+ break;
+ }
+ }
+ }
+ }
+ })
+ .on('scrollEnd', function () {
+ if (scroller === _this.masterScroller) {
+ _this.unassignMasterScroller();
+ }
+ });
+ };
+ ScrollJoiner.prototype.assignMasterScroller = function (scroller) {
+ this.unassignMasterScroller();
+ this.masterScroller = scroller;
+ for (var _i = 0, _a = this.scrollers; _i < _a.length; _i++) {
+ var otherScroller = _a[_i];
+ if (otherScroller !== scroller) {
+ otherScroller.enhancedScroll.disableTouchScroll();
+ }
+ }
+ };
+ ScrollJoiner.prototype.unassignMasterScroller = function () {
+ if (this.masterScroller) {
+ for (var _i = 0, _a = this.scrollers; _i < _a.length; _i++) {
+ var otherScroller = _a[_i];
+ otherScroller.enhancedScroll.enableTouchScroll();
+ }
+ this.masterScroller = null;
+ }
+ };
+ ScrollJoiner.prototype.update = function () {
+ var allWidths = this.scrollers.map(function (scroller) { return scroller.getScrollbarWidths(); });
+ var maxLeft = 0;
+ var maxRight = 0;
+ var maxTop = 0;
+ var maxBottom = 0;
+ var widths;
+ var i;
+ for (var _i = 0, allWidths_1 = allWidths; _i < allWidths_1.length; _i++) {
+ widths = allWidths_1[_i];
+ maxLeft = Math.max(maxLeft, widths.left);
+ maxRight = Math.max(maxRight, widths.right);
+ maxTop = Math.max(maxTop, widths.top);
+ maxBottom = Math.max(maxBottom, widths.bottom);
+ }
+ for (i = 0; i < this.scrollers.length; i++) {
+ var scroller = this.scrollers[i];
+ widths = allWidths[i];
+ scroller.enhancedScroll.canvas.setGutters(this.axis === 'horizontal' ?
+ {
+ left: maxLeft - widths.left,
+ right: maxRight - widths.right
+ } :
+ {
+ top: maxTop - widths.top,
+ bottom: maxBottom - widths.bottom
+ });
+ }
+ };
+ return ScrollJoiner;
+ }());
+
+ var HeaderBodyLayout = /** @class */ (function () {
+ /*
+ verticalScroll = 'auto' | 'clipped-scroll'
+ */
+ function HeaderBodyLayout(headerContainerEl, bodyContainerEl, verticalScroll) {
+ this.headerScroller = new ClippedScroller('clipped-scroll', 'hidden', headerContainerEl);
+ this.bodyScroller = new ClippedScroller('auto', verticalScroll, bodyContainerEl);
+ this.scrollJoiner = new ScrollJoiner('horizontal', [
+ this.headerScroller,
+ this.bodyScroller
+ ]);
+ }
+ HeaderBodyLayout.prototype.destroy = function () {
+ this.headerScroller.destroy();
+ this.bodyScroller.destroy();
+ };
+ HeaderBodyLayout.prototype.setHeight = function (totalHeight, isAuto) {
+ var bodyHeight;
+ if (isAuto) {
+ bodyHeight = 'auto';
+ }
+ else {
+ bodyHeight = totalHeight - this.queryHeadHeight();
+ }
+ this.bodyScroller.setHeight(bodyHeight);
+ this.headerScroller.updateSize(); // adjusts gutters and classNames
+ this.bodyScroller.updateSize(); // adjusts gutters and classNames
+ this.scrollJoiner.update();
+ };
+ HeaderBodyLayout.prototype.queryHeadHeight = function () {
+ return this.headerScroller.enhancedScroll.canvas.contentEl.offsetHeight; // flawed?
+ };
+ return HeaderBodyLayout;
+ }());
+
+ var TimelineHeader = /** @class */ (function (_super) {
+ __extends(TimelineHeader, _super);
+ function TimelineHeader(context, parentEl) {
+ var _this = _super.call(this, context) || this;
+ parentEl.appendChild(_this.tableEl = core.createElement('table', {
+ className: _this.theme.getClass('tableGrid')
+ }));
+ return _this;
+ }
+ TimelineHeader.prototype.destroy = function () {
+ core.removeElement(this.tableEl);
+ _super.prototype.destroy.call(this);
+ };
+ TimelineHeader.prototype.render = function (props) {
+ this.renderDates(props.tDateProfile);
+ };
+ TimelineHeader.prototype.renderDates = function (tDateProfile) {
+ var _a = this, dateEnv = _a.dateEnv, theme = _a.theme;
+ var cellRows = tDateProfile.cellRows;
+ var lastRow = cellRows[cellRows.length - 1];
+ var isChrono = core.asRoughMs(tDateProfile.labelInterval) > core.asRoughMs(tDateProfile.slotDuration);
+ var oneDay = core.isSingleDay(tDateProfile.slotDuration);
+ var html = '<colgroup>';
+ // needs to be a col for each body slat. header cells will have colspans
+ for (var i = tDateProfile.slotCnt - 1; i >= 0; i--) {
+ html += '<col/>';
+ }
+ html += '</colgroup>';
+ html += '<tbody>';
+ for (var _i = 0, cellRows_1 = cellRows; _i < cellRows_1.length; _i++) {
+ var rowCells = cellRows_1[_i];
+ var isLast = rowCells === lastRow;
+ html += '<tr' + (isChrono && isLast ? ' class="fc-chrono"' : '') + '>';
+ for (var _b = 0, rowCells_1 = rowCells; _b < rowCells_1.length; _b++) {
+ var cell = rowCells_1[_b];
+ var headerCellClassNames = [theme.getClass('widgetHeader')];
+ if (cell.isWeekStart) {
+ headerCellClassNames.push('fc-em-cell');
+ }
+ if (oneDay) {
+ headerCellClassNames = headerCellClassNames.concat(core.getDayClasses(cell.date, this.props.dateProfile, this.context, true) // adds "today" class and other day-based classes
+ );
+ }
+ html +=
+ '<th class="' + headerCellClassNames.join(' ') + '"' +
+ ' data-date="' + dateEnv.formatIso(cell.date, { omitTime: !tDateProfile.isTimeScale, omitTimeZoneOffset: true }) + '"' +
+ (cell.colspan > 1 ? ' colspan="' + cell.colspan + '"' : '') +
+ '>' +
+ '<div class="fc-cell-content">' +
+ cell.spanHtml +
+ '</div>' +
+ '</th>';
+ }
+ html += '</tr>';
+ }
+ html += '</tbody>';
+ this.tableEl.innerHTML = html; // TODO: does this work cross-browser?
+ this.slatColEls = core.findElements(this.tableEl, 'col');
+ this.innerEls = core.findElements(this.tableEl.querySelector('tr:last-child'), // compound selector won't work because of query-root problem
+ 'th .fc-cell-text');
+ core.findElements(this.tableEl.querySelectorAll('tr:not(:last-child)'), // compound selector won't work because of query-root problem
+ 'th .fc-cell-text').forEach(function (innerEl) {
+ innerEl.classList.add('fc-sticky');
+ });
+ };
+ return TimelineHeader;
+ }(core.Component));
+
+ var TimelineSlats = /** @class */ (function (_super) {
+ __extends(TimelineSlats, _super);
+ function TimelineSlats(context, parentEl) {
+ var _this = _super.call(this, context) || this;
+ parentEl.appendChild(_this.el = core.createElement('div', { className: 'fc-slats' }));
+ return _this;
+ }
+ TimelineSlats.prototype.destroy = function () {
+ core.removeElement(this.el);
+ _super.prototype.destroy.call(this);
+ };
+ TimelineSlats.prototype.render = function (props) {
+ this.renderDates(props.tDateProfile);
+ };
+ TimelineSlats.prototype.renderDates = function (tDateProfile) {
+ var _a = this, theme = _a.theme, view = _a.view, dateEnv = _a.dateEnv;
+ var slotDates = tDateProfile.slotDates, isWeekStarts = tDateProfile.isWeekStarts;
+ var html = '<table class="' + theme.getClass('tableGrid') + '">' +
+ '<colgroup>';
+ for (var i = 0; i < slotDates.length; i++) {
+ html += '<col/>';
+ }
+ html += '</colgroup>';
+ html += '<tbody><tr>';
+ for (var i = 0; i < slotDates.length; i++) {
+ html += this.slatCellHtml(slotDates[i], isWeekStarts[i], tDateProfile);
+ }
+ html += '</tr></tbody></table>';
+ this.el.innerHTML = html;
+ this.slatColEls = core.findElements(this.el, 'col');
+ this.slatEls = core.findElements(this.el, 'td');
+ for (var i = 0; i < slotDates.length; i++) {
+ view.publiclyTrigger('dayRender', [
+ {
+ date: dateEnv.toDate(slotDates[i]),
+ el: this.slatEls[i],
+ view: view
+ }
+ ]);
+ }
+ this.outerCoordCache = new core.PositionCache(this.el, this.slatEls, true, // isHorizontal
+ false // isVertical
+ );
+ // for the inner divs within the slats
+ // used for event rendering and scrollTime, to disregard slat border
+ this.innerCoordCache = new core.PositionCache(this.el, core.findChildren(this.slatEls, 'div'), true, // isHorizontal
+ false // isVertical
+ );
+ };
+ TimelineSlats.prototype.slatCellHtml = function (date, isEm, tDateProfile) {
+ var _a = this, theme = _a.theme, dateEnv = _a.dateEnv;
+ var classes;
+ if (tDateProfile.isTimeScale) {
+ classes = [];
+ classes.push(core.isInt(dateEnv.countDurationsBetween(tDateProfile.normalizedRange.start, date, tDateProfile.labelInterval)) ?
+ 'fc-major' :
+ 'fc-minor');
+ }
+ else {
+ classes = core.getDayClasses(date, this.props.dateProfile, this.context);
+ classes.push('fc-day');
+ }
+ classes.unshift(theme.getClass('widgetContent'));
+ if (isEm) {
+ classes.push('fc-em-cell');
+ }
+ return '<td class="' + classes.join(' ') + '"' +
+ ' data-date="' + dateEnv.formatIso(date, { omitTime: !tDateProfile.isTimeScale, omitTimeZoneOffset: true }) + '"' +
+ '><div></div></td>';
+ };
+ TimelineSlats.prototype.updateSize = function () {
+ this.outerCoordCache.build();
+ this.innerCoordCache.build();
+ };
+ TimelineSlats.prototype.positionToHit = function (leftPosition) {
+ var outerCoordCache = this.outerCoordCache;
+ var tDateProfile = this.props.tDateProfile;
+ var slatIndex = outerCoordCache.leftToIndex(leftPosition);
+ if (slatIndex != null) {
+ // somewhat similar to what TimeGrid does. consolidate?
+ var slatWidth = outerCoordCache.getWidth(slatIndex);
+ var partial = this.isRtl ?
+ (outerCoordCache.rights[slatIndex] - leftPosition) / slatWidth :
+ (leftPosition - outerCoordCache.lefts[slatIndex]) / slatWidth;
+ var localSnapIndex = Math.floor(partial * tDateProfile.snapsPerSlot);
+ var start = this.dateEnv.add(tDateProfile.slotDates[slatIndex], core.multiplyDuration(tDateProfile.snapDuration, localSnapIndex));
+ var end = this.dateEnv.add(start, tDateProfile.snapDuration);
+ return {
+ dateSpan: {
+ range: { start: start, end: end },
+ allDay: !this.props.tDateProfile.isTimeScale
+ },
+ dayEl: this.slatColEls[slatIndex],
+ left: outerCoordCache.lefts[slatIndex],
+ right: outerCoordCache.rights[slatIndex]
+ };
+ }
+ return null;
+ };
+ return TimelineSlats;
+ }(core.Component));
+
+ var MIN_AUTO_LABELS = 18; // more than `12` months but less that `24` hours
+ var MAX_AUTO_SLOTS_PER_LABEL = 6; // allows 6 10-min slots in an hour
+ var MAX_AUTO_CELLS = 200; // allows 4-days to have a :30 slot duration
+ core.config.MAX_TIMELINE_SLOTS = 1000;
+ // potential nice values for slot-duration and interval-duration
+ var STOCK_SUB_DURATIONS = [
+ { years: 1 },
+ { months: 1 },
+ { days: 1 },
+ { hours: 1 },
+ { minutes: 30 },
+ { minutes: 15 },
+ { minutes: 10 },
+ { minutes: 5 },
+ { minutes: 1 },
+ { seconds: 30 },
+ { seconds: 15 },
+ { seconds: 10 },
+ { seconds: 5 },
+ { seconds: 1 },
+ { milliseconds: 500 },
+ { milliseconds: 100 },
+ { milliseconds: 10 },
+ { milliseconds: 1 }
+ ];
+ function buildTimelineDateProfile(dateProfile, view) {
+ var dateEnv = view.dateEnv;
+ var tDateProfile = {
+ labelInterval: queryDurationOption(view, 'slotLabelInterval'),
+ slotDuration: queryDurationOption(view, 'slotDuration')
+ };
+ validateLabelAndSlot(tDateProfile, dateProfile, dateEnv); // validate after computed grid duration
+ ensureLabelInterval(tDateProfile, dateProfile, dateEnv);
+ ensureSlotDuration(tDateProfile, dateProfile, dateEnv);
+ var input = view.opt('slotLabelFormat');
+ var rawFormats = Array.isArray(input) ?
+ input
+ : (input != null) ?
+ [input]
+ :
+ computeHeaderFormats(tDateProfile, dateProfile, dateEnv, view);
+ tDateProfile.headerFormats = rawFormats.map(function (rawFormat) {
+ return core.createFormatter(rawFormat);
+ });
+ tDateProfile.isTimeScale = Boolean(tDateProfile.slotDuration.milliseconds);
+ var largeUnit = null;
+ if (!tDateProfile.isTimeScale) {
+ var slotUnit = core.greatestDurationDenominator(tDateProfile.slotDuration).unit;
+ if (/year|month|week/.test(slotUnit)) {
+ largeUnit = slotUnit;
+ }
+ }
+ tDateProfile.largeUnit = largeUnit;
+ tDateProfile.emphasizeWeeks =
+ core.isSingleDay(tDateProfile.slotDuration) &&
+ currentRangeAs('weeks', dateProfile, dateEnv) >= 2 &&
+ !view.opt('businessHours');
+ /*
+ console.log('label interval =', timelineView.labelInterval.humanize())
+ console.log('slot duration =', timelineView.slotDuration.humanize())
+ console.log('header formats =', timelineView.headerFormats)
+ console.log('isTimeScale', timelineView.isTimeScale)
+ console.log('largeUnit', timelineView.largeUnit)
+ */
+ var rawSnapDuration = view.opt('snapDuration');
+ var snapDuration;
+ var snapsPerSlot;
+ if (rawSnapDuration) {
+ snapDuration = core.createDuration(rawSnapDuration);
+ snapsPerSlot = core.wholeDivideDurations(tDateProfile.slotDuration, snapDuration);
+ // ^ TODO: warning if not whole?
+ }
+ if (snapsPerSlot == null) {
+ snapDuration = tDateProfile.slotDuration;
+ snapsPerSlot = 1;
+ }
+ tDateProfile.snapDuration = snapDuration;
+ tDateProfile.snapsPerSlot = snapsPerSlot;
+ // more...
+ var timeWindowMs = core.asRoughMs(dateProfile.maxTime) - core.asRoughMs(dateProfile.minTime);
+ // TODO: why not use normalizeRange!?
+ var normalizedStart = normalizeDate(dateProfile.renderRange.start, tDateProfile, dateEnv);
+ var normalizedEnd = normalizeDate(dateProfile.renderRange.end, tDateProfile, dateEnv);
+ // apply minTime/maxTime
+ // TODO: View should be responsible.
+ if (tDateProfile.isTimeScale) {
+ normalizedStart = dateEnv.add(normalizedStart, dateProfile.minTime);
+ normalizedEnd = dateEnv.add(core.addDays(normalizedEnd, -1), dateProfile.maxTime);
+ }
+ tDateProfile.timeWindowMs = timeWindowMs;
+ tDateProfile.normalizedRange = { start: normalizedStart, end: normalizedEnd };
+ var slotDates = [];
+ var date = normalizedStart;
+ while (date < normalizedEnd) {
+ if (isValidDate(date, tDateProfile, dateProfile, view)) {
+ slotDates.push(date);
+ }
+ date = dateEnv.add(date, tDateProfile.slotDuration);
+ }
+ tDateProfile.slotDates = slotDates;
+ // more...
+ var snapIndex = -1;
+ var snapDiff = 0; // index of the diff :(
+ var snapDiffToIndex = [];
+ var snapIndexToDiff = [];
+ date = normalizedStart;
+ while (date < normalizedEnd) {
+ if (isValidDate(date, tDateProfile, dateProfile, view)) {
+ snapIndex++;
+ snapDiffToIndex.push(snapIndex);
+ snapIndexToDiff.push(snapDiff);
+ }
+ else {
+ snapDiffToIndex.push(snapIndex + 0.5);
+ }
+ date = dateEnv.add(date, tDateProfile.snapDuration);
+ snapDiff++;
+ }
+ tDateProfile.snapDiffToIndex = snapDiffToIndex;
+ tDateProfile.snapIndexToDiff = snapIndexToDiff;
+ tDateProfile.snapCnt = snapIndex + 1; // is always one behind
+ tDateProfile.slotCnt = tDateProfile.snapCnt / tDateProfile.snapsPerSlot;
+ // more...
+ tDateProfile.isWeekStarts = buildIsWeekStarts(tDateProfile, dateEnv);
+ tDateProfile.cellRows = buildCellRows(tDateProfile, dateEnv, view);
+ return tDateProfile;
+ }
+ /*
+ snaps to appropriate unit
+ */
+ function normalizeDate(date, tDateProfile, dateEnv) {
+ var normalDate = date;
+ if (!tDateProfile.isTimeScale) {
+ normalDate = core.startOfDay(normalDate);
+ if (tDateProfile.largeUnit) {
+ normalDate = dateEnv.startOf(normalDate, tDateProfile.largeUnit);
+ }
+ }
+ return normalDate;
+ }
+ /*
+ snaps to appropriate unit
+ */
+ function normalizeRange(range, tDateProfile, dateEnv) {
+ if (!tDateProfile.isTimeScale) {
+ range = core.computeVisibleDayRange(range);
+ if (tDateProfile.largeUnit) {
+ var dayRange = range; // preserve original result
+ range = {
+ start: dateEnv.startOf(range.start, tDateProfile.largeUnit),
+ end: dateEnv.startOf(range.end, tDateProfile.largeUnit)
+ };
+ // if date is partially through the interval, or is in the same interval as the start,
+ // make the exclusive end be the *next* interval
+ if (range.end.valueOf() !== dayRange.end.valueOf() || range.end <= range.start) {
+ range = {
+ start: range.start,
+ end: dateEnv.add(range.end, tDateProfile.slotDuration)
+ };
+ }
+ }
+ }
+ return range;
+ }
+ function isValidDate(date, tDateProfile, dateProfile, view) {
+ if (view.dateProfileGenerator.isHiddenDay(date)) {
+ return false;
+ }
+ else if (tDateProfile.isTimeScale) {
+ // determine if the time is within minTime/maxTime, which may have wacky values
+ var day = core.startOfDay(date);
+ var timeMs = date.valueOf() - day.valueOf();
+ var ms = timeMs - core.asRoughMs(dateProfile.minTime); // milliseconds since minTime
+ ms = ((ms % 86400000) + 86400000) % 86400000; // make negative values wrap to 24hr clock
+ return ms < tDateProfile.timeWindowMs; // before the maxTime?
+ }
+ else {
+ return true;
+ }
+ }
+ function queryDurationOption(view, name) {
+ var input = view.opt(name);
+ if (input != null) {
+ return core.createDuration(input);
+ }
+ }
+ function validateLabelAndSlot(tDateProfile, dateProfile, dateEnv) {
+ var currentRange = dateProfile.currentRange;
+ // make sure labelInterval doesn't exceed the max number of cells
+ if (tDateProfile.labelInterval) {
+ var labelCnt = dateEnv.countDurationsBetween(currentRange.start, currentRange.end, tDateProfile.labelInterval);
+ if (labelCnt > core.config.MAX_TIMELINE_SLOTS) {
+ console.warn('slotLabelInterval results in too many cells');
+ tDateProfile.labelInterval = null;
+ }
+ }
+ // make sure slotDuration doesn't exceed the maximum number of cells
+ if (tDateProfile.slotDuration) {
+ var slotCnt = dateEnv.countDurationsBetween(currentRange.start, currentRange.end, tDateProfile.slotDuration);
+ if (slotCnt > core.config.MAX_TIMELINE_SLOTS) {
+ console.warn('slotDuration results in too many cells');
+ tDateProfile.slotDuration = null;
+ }
+ }
+ // make sure labelInterval is a multiple of slotDuration
+ if (tDateProfile.labelInterval && tDateProfile.slotDuration) {
+ var slotsPerLabel = core.wholeDivideDurations(tDateProfile.labelInterval, tDateProfile.slotDuration);
+ if (slotsPerLabel === null || slotsPerLabel < 1) {
+ console.warn('slotLabelInterval must be a multiple of slotDuration');
+ tDateProfile.slotDuration = null;
+ }
+ }
+ }
+ function ensureLabelInterval(tDateProfile, dateProfile, dateEnv) {
+ var currentRange = dateProfile.currentRange;
+ var labelInterval = tDateProfile.labelInterval;
+ if (!labelInterval) {
+ // compute based off the slot duration
+ // find the largest label interval with an acceptable slots-per-label
+ var input = void 0;
+ if (tDateProfile.slotDuration) {
+ for (var _i = 0, STOCK_SUB_DURATIONS_1 = STOCK_SUB_DURATIONS; _i < STOCK_SUB_DURATIONS_1.length; _i++) {
+ input = STOCK_SUB_DURATIONS_1[_i];
+ var tryLabelInterval = core.createDuration(input);
+ var slotsPerLabel = core.wholeDivideDurations(tryLabelInterval, tDateProfile.slotDuration);
+ if (slotsPerLabel !== null && slotsPerLabel <= MAX_AUTO_SLOTS_PER_LABEL) {
+ labelInterval = tryLabelInterval;
+ break;
+ }
+ }
+ // use the slot duration as a last resort
+ if (!labelInterval) {
+ labelInterval = tDateProfile.slotDuration;
+ }
+ // compute based off the view's duration
+ // find the largest label interval that yields the minimum number of labels
+ }
+ else {
+ for (var _a = 0, STOCK_SUB_DURATIONS_2 = STOCK_SUB_DURATIONS; _a < STOCK_SUB_DURATIONS_2.length; _a++) {
+ input = STOCK_SUB_DURATIONS_2[_a];
+ labelInterval = core.createDuration(input);
+ var labelCnt = dateEnv.countDurationsBetween(currentRange.start, currentRange.end, labelInterval);
+ if (labelCnt >= MIN_AUTO_LABELS) {
+ break;
+ }
+ }
+ }
+ tDateProfile.labelInterval = labelInterval;
+ }
+ return labelInterval;
+ }
+ function ensureSlotDuration(tDateProfile, dateProfile, dateEnv) {
+ var currentRange = dateProfile.currentRange;
+ var slotDuration = tDateProfile.slotDuration;
+ if (!slotDuration) {
+ var labelInterval = ensureLabelInterval(tDateProfile, dateProfile, dateEnv); // will compute if necessary
+ // compute based off the label interval
+ // find the largest slot duration that is different from labelInterval, but still acceptable
+ for (var _i = 0, STOCK_SUB_DURATIONS_3 = STOCK_SUB_DURATIONS; _i < STOCK_SUB_DURATIONS_3.length; _i++) {
+ var input = STOCK_SUB_DURATIONS_3[_i];
+ var trySlotDuration = core.createDuration(input);
+ var slotsPerLabel = core.wholeDivideDurations(labelInterval, trySlotDuration);
+ if (slotsPerLabel !== null && slotsPerLabel > 1 && slotsPerLabel <= MAX_AUTO_SLOTS_PER_LABEL) {
+ slotDuration = trySlotDuration;
+ break;
+ }
+ }
+ // only allow the value if it won't exceed the view's # of slots limit
+ if (slotDuration) {
+ var slotCnt = dateEnv.countDurationsBetween(currentRange.start, currentRange.end, slotDuration);
+ if (slotCnt > MAX_AUTO_CELLS) {
+ slotDuration = null;
+ }
+ }
+ // use the label interval as a last resort
+ if (!slotDuration) {
+ slotDuration = labelInterval;
+ }
+ tDateProfile.slotDuration = slotDuration;
+ }
+ return slotDuration;
+ }
+ function computeHeaderFormats(tDateProfile, dateProfile, dateEnv, view) {
+ var format1;
+ var format2;
+ var labelInterval = tDateProfile.labelInterval;
+ var unit = core.greatestDurationDenominator(labelInterval).unit;
+ var weekNumbersVisible = view.opt('weekNumbers');
+ var format0 = (format1 = (format2 = null));
+ // NOTE: weekNumber computation function wont work
+ if ((unit === 'week') && !weekNumbersVisible) {
+ unit = 'day';
+ }
+ switch (unit) {
+ case 'year':
+ format0 = { year: 'numeric' }; // '2015'
+ break;
+ case 'month':
+ if (currentRangeAs('years', dateProfile, dateEnv) > 1) {
+ format0 = { year: 'numeric' }; // '2015'
+ }
+ format1 = { month: 'short' }; // 'Jan'
+ break;
+ case 'week':
+ if (currentRangeAs('years', dateProfile, dateEnv) > 1) {
+ format0 = { year: 'numeric' }; // '2015'
+ }
+ format1 = { week: 'narrow' }; // 'Wk4'
+ break;
+ case 'day':
+ if (currentRangeAs('years', dateProfile, dateEnv) > 1) {
+ format0 = { year: 'numeric', month: 'long' }; // 'January 2014'
+ }
+ else if (currentRangeAs('months', dateProfile, dateEnv) > 1) {
+ format0 = { month: 'long' }; // 'January'
+ }
+ if (weekNumbersVisible) {
+ format1 = { week: 'short' }; // 'Wk 4'
+ }
+ format2 = { weekday: 'narrow', day: 'numeric' }; // 'Su 9'
+ break;
+ case 'hour':
+ if (weekNumbersVisible) {
+ format0 = { week: 'short' }; // 'Wk 4'
+ }
+ if (currentRangeAs('days', dateProfile, dateEnv) > 1) {
+ format1 = { weekday: 'short', day: 'numeric', month: 'numeric', omitCommas: true }; // Sat 4/7
+ }
+ format2 = {
+ hour: 'numeric',
+ minute: '2-digit',
+ omitZeroMinute: true,
+ meridiem: 'short'
+ };
+ break;
+ case 'minute':
+ // sufficiently large number of different minute cells?
+ if ((core.asRoughMinutes(labelInterval) / 60) >= MAX_AUTO_SLOTS_PER_LABEL) {
+ format0 = {
+ hour: 'numeric',
+ meridiem: 'short'
+ };
+ format1 = function (params) {
+ return ':' + core.padStart(params.date.minute, 2); // ':30'
+ };
+ }
+ else {
+ format0 = {
+ hour: 'numeric',
+ minute: 'numeric',
+ meridiem: 'short'
+ };
+ }
+ break;
+ case 'second':
+ // sufficiently large number of different second cells?
+ if ((core.asRoughSeconds(labelInterval) / 60) >= MAX_AUTO_SLOTS_PER_LABEL) {
+ format0 = { hour: 'numeric', minute: '2-digit', meridiem: 'lowercase' }; // '8:30 PM'
+ format1 = function (params) {
+ return ':' + core.padStart(params.date.second, 2); // ':30'
+ };
+ }
+ else {
+ format0 = { hour: 'numeric', minute: '2-digit', second: '2-digit', meridiem: 'lowercase' }; // '8:30:45 PM'
+ }
+ break;
+ case 'millisecond':
+ format0 = { hour: 'numeric', minute: '2-digit', second: '2-digit', meridiem: 'lowercase' }; // '8:30:45 PM'
+ format1 = function (params) {
+ return '.' + core.padStart(params.millisecond, 3);
+ };
+ break;
+ }
+ return [].concat(format0 || [], format1 || [], format2 || []);
+ }
+ // Compute the number of the give units in the "current" range.
+ // Won't go more precise than days.
+ // Will return `0` if there's not a clean whole interval.
+ function currentRangeAs(unit, dateProfile, dateEnv) {
+ var range = dateProfile.currentRange;
+ var res = null;
+ if (unit === 'years') {
+ res = dateEnv.diffWholeYears(range.start, range.end);
+ }
+ else if (unit === 'months') {
+ res = dateEnv.diffWholeMonths(range.start, range.end);
+ }
+ else if (unit === 'weeks') {
+ res = dateEnv.diffWholeMonths(range.start, range.end);
+ }
+ else if (unit === 'days') {
+ res = core.diffWholeDays(range.start, range.end);
+ }
+ return res || 0;
+ }
+ function buildIsWeekStarts(tDateProfile, dateEnv) {
+ var slotDates = tDateProfile.slotDates, emphasizeWeeks = tDateProfile.emphasizeWeeks;
+ var prevWeekNumber = null;
+ var isWeekStarts = [];
+ for (var _i = 0, slotDates_1 = slotDates; _i < slotDates_1.length; _i++) {
+ var slotDate = slotDates_1[_i];
+ var weekNumber = dateEnv.computeWeekNumber(slotDate);
+ var isWeekStart = emphasizeWeeks && (prevWeekNumber !== null) && (prevWeekNumber !== weekNumber);
+ prevWeekNumber = weekNumber;
+ isWeekStarts.push(isWeekStart);
+ }
+ return isWeekStarts;
+ }
+ function buildCellRows(tDateProfile, dateEnv, view) {
+ var slotDates = tDateProfile.slotDates;
+ var formats = tDateProfile.headerFormats;
+ var cellRows = formats.map(function (format) { return []; }); // indexed by row,col
+ // specifically for navclicks
+ var rowUnits = formats.map(function (format) {
+ return format.getLargestUnit ? format.getLargestUnit() : null;
+ });
+ // builds cellRows and slotCells
+ for (var i = 0; i < slotDates.length; i++) {
+ var date = slotDates[i];
+ var isWeekStart = tDateProfile.isWeekStarts[i];
+ for (var row = 0; row < formats.length; row++) {
+ var format = formats[row];
+ var rowCells = cellRows[row];
+ var leadingCell = rowCells[rowCells.length - 1];
+ var isSuperRow = (formats.length > 1) && (row < (formats.length - 1)); // more than one row and not the last
+ var newCell = null;
+ if (isSuperRow) {
+ var text = dateEnv.format(date, format);
+ if (!leadingCell || (leadingCell.text !== text)) {
+ newCell = buildCellObject(date, text, rowUnits[row], view);
+ }
+ else {
+ leadingCell.colspan += 1;
+ }
+ }
+ else {
+ if (!leadingCell ||
+ core.isInt(dateEnv.countDurationsBetween(tDateProfile.normalizedRange.start, date, tDateProfile.labelInterval))) {
+ var text = dateEnv.format(date, format);
+ newCell = buildCellObject(date, text, rowUnits[row], view);
+ }
+ else {
+ leadingCell.colspan += 1;
+ }
+ }
+ if (newCell) {
+ newCell.weekStart = isWeekStart;
+ rowCells.push(newCell);
+ }
+ }
+ }
+ return cellRows;
+ }
+ function buildCellObject(date, text, rowUnit, view) {
+ var spanHtml = core.buildGotoAnchorHtml(view, {
+ date: date,
+ type: rowUnit,
+ forceOff: !rowUnit
+ }, {
+ 'class': 'fc-cell-text'
+ }, core.htmlEscape(text));
+ return { text: text, spanHtml: spanHtml, date: date, colspan: 1, isWeekStart: false };
+ }
+
+ var TimelineNowIndicator = /** @class */ (function () {
+ function TimelineNowIndicator(headParent, bodyParent) {
+ this.headParent = headParent;
+ this.bodyParent = bodyParent;
+ }
+ TimelineNowIndicator.prototype.render = function (coord, isRtl) {
+ var styleProps = isRtl ? { right: -coord } : { left: coord };
+ this.headParent.appendChild(this.arrowEl = core.createElement('div', {
+ className: 'fc-now-indicator fc-now-indicator-arrow',
+ style: styleProps
+ }));
+ this.bodyParent.appendChild(this.lineEl = core.createElement('div', {
+ className: 'fc-now-indicator fc-now-indicator-line',
+ style: styleProps
+ }));
+ };
+ TimelineNowIndicator.prototype.unrender = function () {
+ if (this.arrowEl) {
+ core.removeElement(this.arrowEl);
+ }
+ if (this.lineEl) {
+ core.removeElement(this.lineEl);
+ }
+ };
+ return TimelineNowIndicator;
+ }());
+
+ var STICKY_PROP_VAL = computeStickyPropVal(); // if null, means not supported at all
+ var IS_MS_EDGE = /Edge/.test(navigator.userAgent);
+ var IS_SAFARI = STICKY_PROP_VAL === '-webkit-sticky'; // good b/c doesn't confuse chrome
+ var STICKY_CLASSNAME = 'fc-sticky';
+ /*
+ useful beyond the native position:sticky for these reasons:
+ - support in IE11
+ - nice centering support
+ */
+ var StickyScroller = /** @class */ (function () {
+ function StickyScroller(scroller, isRtl, isVertical) {
+ var _this = this;
+ this.usingRelative = null;
+ /*
+ known bug: called twice on init. problem when mixing with ScrollJoiner
+ */
+ this.updateSize = function () {
+ var els = Array.prototype.slice.call(_this.scroller.canvas.el.querySelectorAll('.' + STICKY_CLASSNAME));
+ var elGeoms = _this.queryElGeoms(els);
+ var viewportWidth = _this.scroller.el.clientWidth;
+ if (_this.usingRelative) {
+ var elDestinations = _this.computeElDestinations(elGeoms, viewportWidth); // read before prepPositioning
+ assignRelativePositions(els, elGeoms, elDestinations);
+ }
+ else {
+ assignStickyPositions(els, elGeoms, viewportWidth);
+ }
+ };
+ this.scroller = scroller;
+ this.usingRelative =
+ !STICKY_PROP_VAL || // IE11
+ (IS_MS_EDGE && isRtl) || // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/18883305/
+ ((IS_MS_EDGE || IS_SAFARI) && isVertical); // because doesn't work with rowspan in tables, our only vertial use
+ if (this.usingRelative) {
+ scroller.on('scrollEnd', this.updateSize);
+ }
+ }
+ StickyScroller.prototype.destroy = function () {
+ this.scroller.off('scrollEnd', this.updateSize);
+ };
+ StickyScroller.prototype.queryElGeoms = function (els) {
+ var canvasOrigin = this.scroller.canvas.el.getBoundingClientRect();
+ var elGeoms = [];
+ for (var _i = 0, els_1 = els; _i < els_1.length; _i++) {
+ var el = els_1[_i];
+ var parentBound = core.translateRect(el.parentNode.getBoundingClientRect(), -canvasOrigin.left, -canvasOrigin.top);
+ var elRect = el.getBoundingClientRect();
+ var computedStyles = window.getComputedStyle(el);
+ var computedTextAlign = window.getComputedStyle(el.parentNode).textAlign; // ask the parent
+ var intendedTextAlign = computedTextAlign;
+ var naturalBound = null;
+ if (computedStyles.position !== 'sticky') {
+ naturalBound = core.translateRect(elRect, -canvasOrigin.left - (parseFloat(computedStyles.left) || 0), // could be 'auto'
+ -canvasOrigin.top - (parseFloat(computedStyles.top) || 0));
+ }
+ if (el.hasAttribute('data-sticky-center')) {
+ intendedTextAlign = 'center';
+ }
+ elGeoms.push({
+ parentBound: parentBound,
+ naturalBound: naturalBound,
+ elWidth: elRect.width,
+ elHeight: elRect.height,
+ computedTextAlign: computedTextAlign,
+ intendedTextAlign: intendedTextAlign
+ });
+ }
+ return elGeoms;
+ };
+ StickyScroller.prototype.computeElDestinations = function (elGeoms, viewportWidth) {
+ var viewportLeft = this.scroller.getScrollFromLeft();
+ var viewportTop = this.scroller.getScrollTop();
+ var viewportRight = viewportLeft + viewportWidth;
+ return elGeoms.map(function (elGeom) {
+ var elWidth = elGeom.elWidth, elHeight = elGeom.elHeight, parentBound = elGeom.parentBound, naturalBound = elGeom.naturalBound;
+ var destLeft; // relative to canvas topleft
+ var destTop; // "
+ switch (elGeom.intendedTextAlign) {
+ case 'left':
+ destLeft = viewportLeft;
+ break;
+ case 'right':
+ destLeft = viewportRight - elWidth;
+ break;
+ case 'center':
+ destLeft = (viewportLeft + viewportRight) / 2 - elWidth / 2;
+ break;
+ }
+ destLeft = Math.min(destLeft, parentBound.right - elWidth);
+ destLeft = Math.max(destLeft, parentBound.left);
+ destTop = viewportTop;
+ destTop = Math.min(destTop, parentBound.bottom - elHeight);
+ destTop = Math.max(destTop, naturalBound.top); // better to use natural top for upper bound
+ return { left: destLeft, top: destTop };
+ });
+ };
+ return StickyScroller;
+ }());
+ function assignRelativePositions(els, elGeoms, elDestinations) {
+ els.forEach(function (el, i) {
+ var naturalBound = elGeoms[i].naturalBound;
+ core.applyStyle(el, {
+ position: 'relative',
+ left: elDestinations[i].left - naturalBound.left,
+ top: elDestinations[i].top - naturalBound.top
+ });
+ });
+ }
+ function assignStickyPositions(els, elGeoms, viewportWidth) {
+ els.forEach(function (el, i) {
+ var stickyLeft = 0;
+ if (elGeoms[i].intendedTextAlign === 'center') {
+ stickyLeft = (viewportWidth - elGeoms[i].elWidth) / 2;
+ // needs to be forced to left?
+ if (elGeoms[i].computedTextAlign === 'center') {
+ el.setAttribute('data-sticky-center', '') // remember for next queryElGeoms
+ ;
+ el.parentNode.style.textAlign = 'left';
+ }
+ }
+ core.applyStyle(el, {
+ position: STICKY_PROP_VAL,
+ left: stickyLeft,
+ right: 0,
+ top: 0
+ });
+ });
+ }
+ function computeStickyPropVal() {
+ var el = core.htmlToElement('<div style="position:-webkit-sticky;position:sticky"></div>');
+ var val = el.style.position;
+ if (val.indexOf('sticky') !== -1) {
+ return val;
+ }
+ else {
+ return null;
+ }
+ }
+
+ var TimeAxis = /** @class */ (function (_super) {
+ __extends(TimeAxis, _super);
+ function TimeAxis(context, headerContainerEl, bodyContainerEl) {
+ var _this = _super.call(this, context) || this;
+ var layout = _this.layout = new HeaderBodyLayout(headerContainerEl, bodyContainerEl, 'auto');
+ var headerEnhancedScroller = layout.headerScroller.enhancedScroll;
+ var bodyEnhancedScroller = layout.bodyScroller.enhancedScroll;
+ // needs to go after layout, which has ScrollJoiner
+ _this.headStickyScroller = new StickyScroller(headerEnhancedScroller, _this.isRtl, false); // isVertical=false
+ _this.bodyStickyScroller = new StickyScroller(bodyEnhancedScroller, _this.isRtl, false); // isVertical=false
+ _this.header = new TimelineHeader(context, headerEnhancedScroller.canvas.contentEl);
+ _this.slats = new TimelineSlats(context, bodyEnhancedScroller.canvas.bgEl);
+ _this.nowIndicator = new TimelineNowIndicator(headerEnhancedScroller.canvas.el, bodyEnhancedScroller.canvas.el);
+ return _this;
+ }
+ TimeAxis.prototype.destroy = function () {
+ this.layout.destroy();
+ this.header.destroy();
+ this.slats.destroy();
+ this.nowIndicator.unrender();
+ this.headStickyScroller.destroy();
+ this.bodyStickyScroller.destroy();
+ _super.prototype.destroy.call(this);
+ };
+ TimeAxis.prototype.render = function (props) {
+ var tDateProfile = this.tDateProfile =
+ buildTimelineDateProfile(props.dateProfile, this.view); // TODO: cache
+ this.header.receiveProps({
+ dateProfile: props.dateProfile,
+ tDateProfile: tDateProfile
+ });
+ this.slats.receiveProps({
+ dateProfile: props.dateProfile,
+ tDateProfile: tDateProfile
+ });
+ };
+ // Now Indicator
+ // ------------------------------------------------------------------------------------------
+ TimeAxis.prototype.getNowIndicatorUnit = function (dateProfile) {
+ // yuck
+ var tDateProfile = this.tDateProfile =
+ buildTimelineDateProfile(dateProfile, this.view); // TODO: cache
+ if (tDateProfile.isTimeScale) {
+ return core.greatestDurationDenominator(tDateProfile.slotDuration).unit;
+ }
+ };
+ // will only execute if isTimeScale
+ TimeAxis.prototype.renderNowIndicator = function (date) {
+ if (core.rangeContainsMarker(this.tDateProfile.normalizedRange, date)) {
+ this.nowIndicator.render(this.dateToCoord(date), this.isRtl);
+ }
+ };
+ // will only execute if isTimeScale
+ TimeAxis.prototype.unrenderNowIndicator = function () {
+ this.nowIndicator.unrender();
+ };
+ // Sizing
+ // ------------------------------------------------------------------------------------------
+ TimeAxis.prototype.updateSize = function (isResize, totalHeight, isAuto) {
+ this.applySlotWidth(this.computeSlotWidth());
+ // adjusts gutters. do after slot widths set
+ this.layout.setHeight(totalHeight, isAuto);
+ // pretty much just queries coords. do last
+ this.slats.updateSize();
+ };
+ TimeAxis.prototype.updateStickyScrollers = function () {
+ this.headStickyScroller.updateSize();
+ this.bodyStickyScroller.updateSize();
+ };
+ TimeAxis.prototype.computeSlotWidth = function () {
+ var slotWidth = this.opt('slotWidth') || '';
+ if (slotWidth === '') {
+ slotWidth = this.computeDefaultSlotWidth(this.tDateProfile);
+ }
+ return slotWidth;
+ };
+ TimeAxis.prototype.computeDefaultSlotWidth = function (tDateProfile) {
+ var maxInnerWidth = 0; // TODO: harness core's `matchCellWidths` for this
+ this.header.innerEls.forEach(function (innerEl, i) {
+ maxInnerWidth = Math.max(maxInnerWidth, innerEl.getBoundingClientRect().width);
+ });
+ var headingCellWidth = Math.ceil(maxInnerWidth) + 1; // assume no padding, and one pixel border
+ // in TimelineView.defaults we ensured that labelInterval is an interval of slotDuration
+ // TODO: rename labelDuration?
+ var slotsPerLabel = core.wholeDivideDurations(tDateProfile.labelInterval, tDateProfile.slotDuration);
+ var slotWidth = Math.ceil(headingCellWidth / slotsPerLabel);
+ var minWidth = window.getComputedStyle(this.header.slatColEls[0]).minWidth;
+ if (minWidth) {
+ minWidth = parseInt(minWidth, 10);
+ if (minWidth) {
+ slotWidth = Math.max(slotWidth, minWidth);
+ }
+ }
+ return slotWidth;
+ };
+ TimeAxis.prototype.applySlotWidth = function (slotWidth) {
+ var _a = this, layout = _a.layout, tDateProfile = _a.tDateProfile;
+ var containerWidth = '';
+ var containerMinWidth = '';
+ var nonLastSlotWidth = '';
+ if (slotWidth !== '') {
+ slotWidth = Math.round(slotWidth);
+ containerWidth = slotWidth * tDateProfile.slotDates.length;
+ containerMinWidth = '';
+ nonLastSlotWidth = slotWidth;
+ var availableWidth = layout.bodyScroller.enhancedScroll.getClientWidth();
+ if (availableWidth > containerWidth) {
+ containerMinWidth = availableWidth;
+ containerWidth = '';
+ nonLastSlotWidth = Math.floor(availableWidth / tDateProfile.slotDates.length);
+ }
+ }
+ layout.headerScroller.enhancedScroll.canvas.setWidth(containerWidth);
+ layout.headerScroller.enhancedScroll.canvas.setMinWidth(containerMinWidth);
+ layout.bodyScroller.enhancedScroll.canvas.setWidth(containerWidth);
+ layout.bodyScroller.enhancedScroll.canvas.setMinWidth(containerMinWidth);
+ if (nonLastSlotWidth !== '') {
+ this.header.slatColEls.slice(0, -1).concat(this.slats.slatColEls.slice(0, -1)).forEach(function (el) {
+ el.style.width = nonLastSlotWidth + 'px';
+ });
+ }
+ };
+ // returned value is between 0 and the number of snaps
+ TimeAxis.prototype.computeDateSnapCoverage = function (date) {
+ var _a = this, dateEnv = _a.dateEnv, tDateProfile = _a.tDateProfile;
+ var snapDiff = dateEnv.countDurationsBetween(tDateProfile.normalizedRange.start, date, tDateProfile.snapDuration);
+ if (snapDiff < 0) {
+ return 0;
+ }
+ else if (snapDiff >= tDateProfile.snapDiffToIndex.length) {
+ return tDateProfile.snapCnt;
+ }
+ else {
+ var snapDiffInt = Math.floor(snapDiff);
+ var snapCoverage = tDateProfile.snapDiffToIndex[snapDiffInt];
+ if (core.isInt(snapCoverage)) { // not an in-between value
+ snapCoverage += snapDiff - snapDiffInt; // add the remainder
+ }
+ else {
+ // a fractional value, meaning the date is not visible
+ // always round up in this case. works for start AND end dates in a range.
+ snapCoverage = Math.ceil(snapCoverage);
+ }
+ return snapCoverage;
+ }
+ };
+ // for LTR, results range from 0 to width of area
+ // for RTL, results range from negative width of area to 0
+ TimeAxis.prototype.dateToCoord = function (date) {
+ var tDateProfile = this.tDateProfile;
+ var snapCoverage = this.computeDateSnapCoverage(date);
+ var slotCoverage = snapCoverage / tDateProfile.snapsPerSlot;
+ var slotIndex = Math.floor(slotCoverage);
+ slotIndex = Math.min(slotIndex, tDateProfile.slotCnt - 1);
+ var partial = slotCoverage - slotIndex;
+ var _a = this.slats, innerCoordCache = _a.innerCoordCache, outerCoordCache = _a.outerCoordCache;
+ if (this.isRtl) {
+ return (outerCoordCache.rights[slotIndex] -
+ (innerCoordCache.getWidth(slotIndex) * partial)) - outerCoordCache.originClientRect.width;
+ }
+ else {
+ return (outerCoordCache.lefts[slotIndex] +
+ (innerCoordCache.getWidth(slotIndex) * partial));
+ }
+ };
+ TimeAxis.prototype.rangeToCoords = function (range) {
+ if (this.isRtl) {
+ return { right: this.dateToCoord(range.start), left: this.dateToCoord(range.end) };
+ }
+ else {
+ return { left: this.dateToCoord(range.start), right: this.dateToCoord(range.end) };
+ }
+ };
+ // Scrolling
+ // ------------------------------------------------------------------------------------------
+ TimeAxis.prototype.computeDateScroll = function (timeMs) {
+ var dateEnv = this.dateEnv;
+ var dateProfile = this.props.dateProfile;
+ var left = 0;
+ if (dateProfile) {
+ left = this.dateToCoord(dateEnv.add(core.startOfDay(dateProfile.activeRange.start), // startOfDay needed?
+ core.createDuration(timeMs)));
+ // hack to overcome the left borders of non-first slat
+ if (!this.isRtl && left) {
+ left += 1;
+ }
+ }
+ return { left: left };
+ };
+ TimeAxis.prototype.queryDateScroll = function () {
+ var enhancedScroll = this.layout.bodyScroller.enhancedScroll;
+ return {
+ left: enhancedScroll.getScrollLeft()
+ };
+ };
+ TimeAxis.prototype.applyDateScroll = function (scroll) {
+ // TODO: lame we have to update both. use the scrolljoiner instead maybe
+ this.layout.bodyScroller.enhancedScroll.setScrollLeft(scroll.left || 0);
+ this.layout.headerScroller.enhancedScroll.setScrollLeft(scroll.left || 0);
+ };
+ return TimeAxis;
+ }(core.Component));
+
+ // import { computeResourceEditable } from '@fullcalendar/resource-common' ... CAN'T HAVE THIS DEP! COPIED AND PASTED BELOW!
+ var TimelineLaneEventRenderer = /** @class */ (function (_super) {
+ __extends(TimelineLaneEventRenderer, _super);
+ function TimelineLaneEventRenderer(context, masterContainerEl, timeAxis) {
+ var _this = _super.call(this, context) || this;
+ _this.masterContainerEl = masterContainerEl;
+ _this.timeAxis = timeAxis;
+ return _this;
+ }
+ TimelineLaneEventRenderer.prototype.renderSegHtml = function (seg, mirrorInfo) {
+ var eventRange = seg.eventRange;
+ var eventDef = eventRange.def;
+ var eventUi = eventRange.ui;
+ var isDraggable = eventUi.startEditable || computeResourceEditable(eventDef, this.timeAxis.calendar);
+ var isResizableFromStart = seg.isStart && eventUi.durationEditable && this.context.options.eventResizableFromStart;
+ var isResizableFromEnd = seg.isEnd && eventUi.durationEditable;
+ var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd, mirrorInfo);
+ classes.unshift('fc-timeline-event', 'fc-h-event');
+ var timeText = this.getTimeText(eventRange);
+ return '<a class="' + classes.join(' ') + '" style="' + core.cssToStr(this.getSkinCss(eventUi)) + '"' +
+ (eventDef.url ?
+ ' href="' + core.htmlEscape(eventDef.url) + '"' :
+ '') +
+ '>' +
+ '<div class="fc-content">' +
+ (timeText ?
+ '<span class="fc-time">' +
+ core.htmlEscape(timeText) +
+ '</span>'
+ :
+ '') +
+ '<span class="fc-title fc-sticky">' +
+ (eventDef.title ? core.htmlEscape(eventDef.title) : ' ') +
+ '</span>' +
+ '</div>' +
+ (isResizableFromStart ?
+ '<div class="fc-resizer fc-start-resizer"></div>' :
+ '') +
+ (isResizableFromEnd ?
+ '<div class="fc-resizer fc-end-resizer"></div>' :
+ '') +
+ '</a>';
+ };
+ TimelineLaneEventRenderer.prototype.computeDisplayEventTime = function () {
+ return !this.timeAxis.tDateProfile.isTimeScale; // because times should be obvious via axis
+ };
+ TimelineLaneEventRenderer.prototype.computeDisplayEventEnd = function () {
+ return false;
+ };
+ // Computes a default event time formatting string if `timeFormat` is not explicitly defined
+ TimelineLaneEventRenderer.prototype.computeEventTimeFormat = function () {
+ return {
+ hour: 'numeric',
+ minute: '2-digit',
+ omitZeroMinute: true,
+ meridiem: 'narrow'
+ };
+ };
+ TimelineLaneEventRenderer.prototype.attachSegs = function (segs, mirrorInfo) {
+ if (!this.el && this.masterContainerEl) {
+ this.el = core.createElement('div', { className: 'fc-event-container' });
+ if (mirrorInfo) {
+ this.el.classList.add('fc-mirror-container');
+ }
+ this.masterContainerEl.appendChild(this.el);
+ }
+ if (this.el) {
+ for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
+ var seg = segs_1[_i];
+ this.el.appendChild(seg.el);
+ }
+ }
+ };
+ TimelineLaneEventRenderer.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);
+ }
+ };
+ // computes AND assigns (assigns the left/right at least). bad
+ TimelineLaneEventRenderer.prototype.computeSegSizes = function (segs) {
+ var timeAxis = this.timeAxis;
+ for (var _i = 0, segs_3 = segs; _i < segs_3.length; _i++) {
+ var seg = segs_3[_i];
+ var coords = timeAxis.rangeToCoords(seg); // works because Seg has start/end
+ core.applyStyle(seg.el, {
+ left: (seg.left = coords.left),
+ right: -(seg.right = coords.right)
+ });
+ }
+ };
+ TimelineLaneEventRenderer.prototype.assignSegSizes = function (segs) {
+ if (!this.el) {
+ return;
+ }
+ // compute seg verticals
+ for (var _i = 0, segs_4 = segs; _i < segs_4.length; _i++) {
+ var seg = segs_4[_i];
+ seg.height = core.computeHeightAndMargins(seg.el);
+ }
+ this.buildSegLevels(segs); // populates above/below props for computeOffsetForSegs
+ var totalHeight = computeOffsetForSegs(segs); // also assigns seg.top
+ core.applyStyleProp(this.el, 'height', totalHeight);
+ // assign seg verticals
+ for (var _a = 0, segs_5 = segs; _a < segs_5.length; _a++) {
+ var seg = segs_5[_a];
+ core.applyStyleProp(seg.el, 'top', seg.top);
+ }
+ };
+ TimelineLaneEventRenderer.prototype.buildSegLevels = function (segs) {
+ var segLevels = [];
+ segs = this.sortEventSegs(segs);
+ for (var _i = 0, segs_6 = segs; _i < segs_6.length; _i++) {
+ var unplacedSeg = segs_6[_i];
+ unplacedSeg.above = [];
+ // determine the first level with no collisions
+ var level = 0; // level index
+ while (level < segLevels.length) {
+ var isLevelCollision = false;
+ // determine collisions
+ for (var _a = 0, _b = segLevels[level]; _a < _b.length; _a++) {
+ var placedSeg = _b[_a];
+ if (timeRowSegsCollide(unplacedSeg, placedSeg)) {
+ unplacedSeg.above.push(placedSeg);
+ isLevelCollision = true;
+ }
+ }
+ if (isLevelCollision) {
+ level += 1;
+ }
+ else {
+ break;
+ }
+ }
+ // insert into the first non-colliding level. create if necessary
+ (segLevels[level] || (segLevels[level] = []))
+ .push(unplacedSeg);
+ // record possible colliding segments below (TODO: automated test for this)
+ level += 1;
+ while (level < segLevels.length) {
+ for (var _c = 0, _d = segLevels[level]; _c < _d.length; _c++) {
+ var belowSeg = _d[_c];
+ if (timeRowSegsCollide(unplacedSeg, belowSeg)) {
+ belowSeg.above.push(unplacedSeg);
+ }
+ }
+ level += 1;
+ }
+ }
+ return segLevels;
+ };
+ return TimelineLaneEventRenderer;
+ }(core.FgEventRenderer));
+ function computeOffsetForSegs(segs) {
+ var max = 0;
+ for (var _i = 0, segs_7 = segs; _i < segs_7.length; _i++) {
+ var seg = segs_7[_i];
+ max = Math.max(max, computeOffsetForSeg(seg));
+ }
+ return max;
+ }
+ function computeOffsetForSeg(seg) {
+ if ((seg.top == null)) {
+ seg.top = computeOffsetForSegs(seg.above);
+ }
+ return seg.top + seg.height;
+ }
+ function timeRowSegsCollide(seg0, seg1) {
+ return (seg0.left < seg1.right) && (seg0.right > seg1.left);
+ }
+ // HACK
+ function computeResourceEditable(eventDef, calendar) {
+ var resourceEditable = eventDef.resourceEditable;
+ if (resourceEditable == null) {
+ var source = eventDef.sourceId && calendar.state.eventSources[eventDef.sourceId];
+ if (source) {
+ resourceEditable = source.extendedProps.resourceEditable; // used the Source::extendedProps hack
+ }
+ if (resourceEditable == null) {
+ resourceEditable = calendar.opt('eventResourceEditable');
+ if (resourceEditable == null) {
+ resourceEditable = true; // TODO: use defaults system instead
+ }
+ }
+ }
+ return resourceEditable;
+ }
+
+ var TimelineLaneFillRenderer = /** @class */ (function (_super) {
+ __extends(TimelineLaneFillRenderer, _super);
+ function TimelineLaneFillRenderer(context, masterContainerEl, timeAxis) {
+ var _this = _super.call(this, context) || this;
+ _this.masterContainerEl = masterContainerEl;
+ _this.timeAxis = timeAxis;
+ return _this;
+ }
+ TimelineLaneFillRenderer.prototype.attachSegs = function (type, segs) {
+ if (segs.length) {
+ var className = void 0;
+ if (type === 'businessHours') {
+ className = 'bgevent';
+ }
+ else {
+ className = type.toLowerCase();
+ }
+ // making a new container each time is OKAY
+ // all types of segs (background or business hours or whatever) are rendered in one pass
+ var containerEl = core.createElement('div', { className: 'fc-' + className + '-container' });
+ this.masterContainerEl.appendChild(containerEl);
+ for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
+ var seg = segs_1[_i];
+ containerEl.appendChild(seg.el);
+ }
+ return [containerEl]; // return value
+ }
+ };
+ TimelineLaneFillRenderer.prototype.computeSegSizes = function (segs) {
+ var timeAxis = this.timeAxis;
+ for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {
+ var seg = segs_2[_i];
+ var coords = timeAxis.rangeToCoords(seg);
+ seg.left = coords.left;
+ seg.right = coords.right;
+ }
+ };
+ TimelineLaneFillRenderer.prototype.assignSegSizes = function (segs) {
+ for (var _i = 0, segs_3 = segs; _i < segs_3.length; _i++) {
+ var seg = segs_3[_i];
+ core.applyStyle(seg.el, {
+ left: seg.left,
+ right: -seg.right
+ });
+ }
+ };
+ return TimelineLaneFillRenderer;
+ }(core.FillRenderer));
+
+ var TimelineLane = /** @class */ (function (_super) {
+ __extends(TimelineLane, _super);
+ function TimelineLane(context, fgContainerEl, bgContainerEl, timeAxis) {
+ var _this = _super.call(this, context, bgContainerEl) // should el be bgContainerEl???
+ || this;
+ _this.slicer = new TimelineLaneSlicer();
+ _this.renderEventDrag = core.memoizeRendering(_this._renderEventDrag, _this._unrenderEventDrag);
+ _this.renderEventResize = core.memoizeRendering(_this._renderEventResize, _this._unrenderEventResize);
+ var fillRenderer = _this.fillRenderer = new TimelineLaneFillRenderer(context, bgContainerEl, timeAxis);
+ var eventRenderer = _this.eventRenderer = new TimelineLaneEventRenderer(context, fgContainerEl, timeAxis);
+ _this.mirrorRenderer = new TimelineLaneEventRenderer(context, fgContainerEl, timeAxis);
+ _this.renderBusinessHours = core.memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'businessHours'), fillRenderer.unrender.bind(fillRenderer, 'businessHours'));
+ _this.renderDateSelection = core.memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'highlight'), fillRenderer.unrender.bind(fillRenderer, 'highlight'));
+ _this.renderBgEvents = core.memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'bgEvent'), fillRenderer.unrender.bind(fillRenderer, 'bgEvent'));
+ _this.renderFgEvents = core.memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer));
+ _this.renderEventSelection = core.memoizeRendering(eventRenderer.selectByInstanceId.bind(eventRenderer), eventRenderer.unselectByInstanceId.bind(eventRenderer), [_this.renderFgEvents]);
+ _this.timeAxis = timeAxis;
+ return _this;
+ }
+ TimelineLane.prototype.render = function (props) {
+ var slicedProps = this.slicer.sliceProps(props, props.dateProfile, this.timeAxis.tDateProfile.isTimeScale ? null : props.nextDayThreshold, this, this.timeAxis);
+ this.renderBusinessHours(slicedProps.businessHourSegs);
+ this.renderDateSelection(slicedProps.dateSelectionSegs);
+ this.renderBgEvents(slicedProps.bgEventSegs);
+ this.renderFgEvents(slicedProps.fgEventSegs);
+ this.renderEventSelection(slicedProps.eventSelection);
+ this.renderEventDrag(slicedProps.eventDrag);
+ this.renderEventResize(slicedProps.eventResize);
+ };
+ TimelineLane.prototype.destroy = function () {
+ _super.prototype.destroy.call(this);
+ this.renderBusinessHours.unrender();
+ this.renderDateSelection.unrender();
+ this.renderBgEvents.unrender();
+ this.renderFgEvents.unrender();
+ this.renderEventSelection.unrender();
+ this.renderEventDrag.unrender();
+ this.renderEventResize.unrender();
+ };
+ TimelineLane.prototype._renderEventDrag = function (state) {
+ if (state) {
+ this.eventRenderer.hideByHash(state.affectedInstances);
+ this.mirrorRenderer.renderSegs(state.segs, { isDragging: true, sourceSeg: state.sourceSeg });
+ }
+ };
+ TimelineLane.prototype._unrenderEventDrag = function (state) {
+ if (state) {
+ this.eventRenderer.showByHash(state.affectedInstances);
+ this.mirrorRenderer.unrender(state.segs, { isDragging: true, sourceSeg: state.sourceSeg });
+ }
+ };
+ TimelineLane.prototype._renderEventResize = function (state) {
+ if (state) {
+ // HACK. eventRenderer and fillRenderer both use these segs. would compete over seg.el
+ var segsForHighlight = state.segs.map(function (seg) {
+ return __assign({}, seg);
+ });
+ this.eventRenderer.hideByHash(state.affectedInstances);
+ this.fillRenderer.renderSegs('highlight', segsForHighlight);
+ this.mirrorRenderer.renderSegs(state.segs, { isDragging: true, sourceSeg: state.sourceSeg });
+ }
+ };
+ TimelineLane.prototype._unrenderEventResize = function (state) {
+ if (state) {
+ this.eventRenderer.showByHash(state.affectedInstances);
+ this.fillRenderer.unrender('highlight');
+ this.mirrorRenderer.unrender(state.segs, { isDragging: true, sourceSeg: state.sourceSeg });
+ }
+ };
+ TimelineLane.prototype.updateSize = function (isResize) {
+ var _a = this, fillRenderer = _a.fillRenderer, eventRenderer = _a.eventRenderer, mirrorRenderer = _a.mirrorRenderer;
+ fillRenderer.computeSizes(isResize);
+ eventRenderer.computeSizes(isResize);
+ mirrorRenderer.computeSizes(isResize);
+ fillRenderer.assignSizes(isResize);
+ eventRenderer.assignSizes(isResize);
+ mirrorRenderer.assignSizes(isResize);
+ };
+ return TimelineLane;
+ }(core.DateComponent));
+ var TimelineLaneSlicer = /** @class */ (function (_super) {
+ __extends(TimelineLaneSlicer, _super);
+ function TimelineLaneSlicer() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ TimelineLaneSlicer.prototype.sliceRange = function (origRange, timeAxis) {
+ var tDateProfile = timeAxis.tDateProfile;
+ var dateProfile = timeAxis.props.dateProfile;
+ var normalRange = normalizeRange(origRange, tDateProfile, timeAxis.dateEnv);
+ var segs = [];
+ // protect against when the span is entirely in an invalid date region
+ if (timeAxis.computeDateSnapCoverage(normalRange.start) < timeAxis.computeDateSnapCoverage(normalRange.end)) {
+ // intersect the footprint's range with the grid's range
+ var slicedRange = core.intersectRanges(normalRange, tDateProfile.normalizedRange);
+ if (slicedRange) {
+ segs.push({
+ start: slicedRange.start,
+ end: slicedRange.end,
+ isStart: slicedRange.start.valueOf() === normalRange.start.valueOf() && isValidDate(slicedRange.start, tDateProfile, dateProfile, timeAxis.view),
+ isEnd: slicedRange.end.valueOf() === normalRange.end.valueOf() && isValidDate(core.addMs(slicedRange.end, -1), tDateProfile, dateProfile, timeAxis.view)
+ });
+ }
+ }
+ return segs;
+ };
+ return TimelineLaneSlicer;
+ }(core.Slicer));
+
+ var TimelineView = /** @class */ (function (_super) {
+ __extends(TimelineView, _super);
+ function TimelineView(context, viewSpec, dateProfileGenerator, parentEl) {
+ var _this = _super.call(this, context, viewSpec, dateProfileGenerator, parentEl) || this;
+ _this.el.classList.add('fc-timeline');
+ if (_this.opt('eventOverlap') === false) {
+ _this.el.classList.add('fc-no-overlap');
+ }
+ _this.el.innerHTML = _this.renderSkeletonHtml();
+ _this.timeAxis = new TimeAxis(_this.context, _this.el.querySelector('thead .fc-time-area'), _this.el.querySelector('tbody .fc-time-area'));
+ _this.lane = new TimelineLane(_this.context, _this.timeAxis.layout.bodyScroller.enhancedScroll.canvas.contentEl, _this.timeAxis.layout.bodyScroller.enhancedScroll.canvas.bgEl, _this.timeAxis);
+ context.calendar.registerInteractiveComponent(_this, {
+ el: _this.timeAxis.slats.el
+ });
+ return _this;
+ }
+ TimelineView.prototype.destroy = function () {
+ this.timeAxis.destroy();
+ this.lane.destroy();
+ _super.prototype.destroy.call(this);
+ this.calendar.unregisterInteractiveComponent(this);
+ };
+ TimelineView.prototype.renderSkeletonHtml = function () {
+ var theme = this.theme;
+ return "<table class=\"" + theme.getClass('tableGrid') + "\"> <thead class=\"fc-head\"> <tr> <td class=\"fc-time-area " + theme.getClass('widgetHeader') + "\"></td> </tr> </thead> <tbody class=\"fc-body\"> <tr> <td class=\"fc-time-area " + theme.getClass('widgetContent') + "\"></td> </tr> </tbody> </table>";
+ };
+ TimelineView.prototype.render = function (props) {
+ _super.prototype.render.call(this, props); // flags for updateSize, addScroll
+ this.timeAxis.receiveProps({
+ dateProfile: props.dateProfile
+ });
+ this.lane.receiveProps(__assign({}, props, { nextDayThreshold: this.nextDayThreshold }));
+ };
+ TimelineView.prototype.updateSize = function (isResize, totalHeight, isAuto) {
+ this.timeAxis.updateSize(isResize, totalHeight, isAuto);
+ this.lane.updateSize(isResize);
+ };
+ // Now Indicator
+ // ------------------------------------------------------------------------------------------
+ TimelineView.prototype.getNowIndicatorUnit = function (dateProfile) {
+ return this.timeAxis.getNowIndicatorUnit(dateProfile);
+ };
+ TimelineView.prototype.renderNowIndicator = function (date) {
+ this.timeAxis.renderNowIndicator(date);
+ };
+ TimelineView.prototype.unrenderNowIndicator = function () {
+ this.timeAxis.unrenderNowIndicator();
+ };
+ // Scroll System
+ // ------------------------------------------------------------------------------------------
+ TimelineView.prototype.computeDateScroll = function (timeMs) {
+ return this.timeAxis.computeDateScroll(timeMs);
+ };
+ TimelineView.prototype.applyScroll = function (scroll, isResize) {
+ _super.prototype.applyScroll.call(this, scroll, isResize); // will call applyDateScroll
+ // avoid updating stickyscroll too often
+ // TODO: repeat code as ResourceTimelineView::updateSize
+ var calendar = this.calendar;
+ if (isResize || calendar.isViewUpdated || calendar.isDatesUpdated || calendar.isEventsUpdated) {
+ this.timeAxis.updateStickyScrollers();
+ }
+ };
+ TimelineView.prototype.applyDateScroll = function (scroll) {
+ this.timeAxis.applyDateScroll(scroll);
+ };
+ TimelineView.prototype.queryScroll = function () {
+ var enhancedScroll = this.timeAxis.layout.bodyScroller.enhancedScroll;
+ return {
+ top: enhancedScroll.getScrollTop(),
+ left: enhancedScroll.getScrollLeft()
+ };
+ };
+ // Hit System
+ // ------------------------------------------------------------------------------------------
+ TimelineView.prototype.buildPositionCaches = function () {
+ this.timeAxis.slats.updateSize();
+ };
+ TimelineView.prototype.queryHit = function (positionLeft, positionTop, elWidth, elHeight) {
+ var slatHit = this.timeAxis.slats.positionToHit(positionLeft);
+ if (slatHit) {
+ return {
+ component: this,
+ dateSpan: slatHit.dateSpan,
+ rect: {
+ left: slatHit.left,
+ right: slatHit.right,
+ top: 0,
+ bottom: elHeight
+ },
+ dayEl: slatHit.dayEl,
+ layer: 0
+ };
+ }
+ };
+ return TimelineView;
+ }(core.View));
+
+ var main = core.createPlugin({
+ defaultView: 'timelineDay',
+ views: {
+ timeline: {
+ class: TimelineView,
+ eventResizableFromStart: true // how is this consumed for TimelineView tho?
+ },
+ timelineDay: {
+ type: 'timeline',
+ duration: { days: 1 }
+ },
+ timelineWeek: {
+ type: 'timeline',
+ duration: { weeks: 1 }
+ },
+ timelineMonth: {
+ type: 'timeline',
+ duration: { months: 1 }
+ },
+ timelineYear: {
+ type: 'timeline',
+ duration: { years: 1 }
+ }
+ }
+ });
+
+ exports.HeaderBodyLayout = HeaderBodyLayout;
+ exports.ScrollJoiner = ScrollJoiner;
+ exports.StickyScroller = StickyScroller;
+ exports.TimeAxis = TimeAxis;
+ exports.TimelineLane = TimelineLane;
+ exports.TimelineView = TimelineView;
+ exports.default = main;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+}));
--- /dev/null
+/*!
+FullCalendar Timeline Plugin v4.1.0
+Docs & License: https://fullcalendar.io/scheduler
+(c) 2019 Adam Shaw
+*/.fc-scroller-clip{overflow:hidden;position:relative}.fc-no-scrollbars{background:rgba(255,255,255,0)}.fc-no-scrollbars::-webkit-scrollbar{width:0;height:0}.fc-scroller-canvas{position:relative;box-sizing:border-box;min-height:100%}.fc-scroller-canvas>.fc-bg{z-index:1}.fc-scroller-canvas>.fc-content{z-index:2;position:relative;border-style:solid;border-width:0}.fc-scroller-canvas.fc-gutter-left>.fc-content{border-left-width:1px;margin-left:-1px}.fc-scroller-canvas.fc-gutter-right>.fc-content{border-right-width:1px;margin-right:-1px}.fc-scroller-canvas.fc-gutter-top>.fc-content{border-top-width:1px;margin-top:-1px}.fc-rtl .fc-timeline{direction:rtl}.fc-scrolled .fc-head .fc-scroller{z-index:2}.fc-timeline.fc-scrolled .fc-head .fc-scroller{box-shadow:0 3px 4px rgba(0,0,0,.075)}.fc-timeline .fc-body .fc-scroller{z-index:1}.fc-timeline .fc-scroller-canvas>div>div>table,.fc-timeline .fc-scroller-canvas>div>table{border-style:hidden}.fc-timeline .fc-scroller-canvas>.fc-content>.fc-rows>table{border-bottom-style:none}.fc-timeline td,.fc-timeline th{white-space:nowrap}.fc-timeline .fc-cell-content{overflow:hidden}.fc-timeline .fc-cell-text{display:inline-block;padding-left:4px;padding-right:4px}.fc-timeline th{vertical-align:middle}.fc-timeline .fc-head .fc-cell-content{padding-top:3px;padding-bottom:3px}.fc-timeline .fc-head .fc-time-area .fc-cell-content{overflow:visible}.fc-time-area col{min-width:2.2em}.fc-ltr .fc-time-area .fc-chrono th{text-align:left}.fc-rtl .fc-time-area .fc-chrono th{text-align:right}.fc-time-area .fc-slats{position:absolute;z-index:1;top:0;left:0;right:0;bottom:0}.fc-time-area .fc-slats table{height:100%}.fc-time-area .fc-slats .fc-minor{border-style:dotted}.fc-time-area .fc-slats td{border-width:0 1px}.fc-ltr .fc-time-area .fc-slats td{border-right-width:0}.fc-rtl .fc-time-area .fc-slats td{border-left-width:0}.fc-time-area .fc-bgevent-container,.fc-time-area .fc-highlight-container{position:absolute;z-index:2;top:0;bottom:0;width:0}.fc-ltr .fc-time-area .fc-bgevent-container,.fc-ltr .fc-time-area .fc-highlight-container,.fc-ltr .fc-time-area .fc-mirror-container{left:0}.fc-rtl .fc-time-area .fc-bgevent-container,.fc-rtl .fc-time-area .fc-highlight-container,.fc-rtl .fc-time-area .fc-mirror-container{right:0}.fc-time-area .fc-bgevent,.fc-time-area .fc-highlight{position:absolute;top:0;bottom:0}.fc-timeline .fc-now-indicator{z-index:3;top:0}.fc-time-area .fc-now-indicator-arrow{margin:0 -6px;border-width:6px 5px 0;border-left-color:transparent;border-right-color:transparent}.fc-time-area .fc-now-indicator-line{margin:0 -1px;bottom:0;border-left-width:1px}.fc-time-area .fc-event-container{position:relative;z-index:2;width:0}.fc-time-area .fc-mirror-container{position:absolute;z-index:3;top:0}.fc-time-area .fc-event-container{padding-bottom:8px;top:-1px}.fc-time-area tr:first-child .fc-event-container{top:0}.fc-no-overlap .fc-time-area .fc-event-container{padding-bottom:0;top:0}.fc-timeline-event{position:absolute;border-radius:0;padding:2px 0;margin-bottom:1px}.fc-no-overlap .fc-timeline-event{padding:5px 0;margin-bottom:0}.fc-ltr .fc-timeline-event{margin-right:1px}.fc-rtl .fc-timeline-event{margin-left:1px}.fc-timeline-event .fc-time{font-weight:700;padding:0 1px}.fc-rtl .fc-timeline-event .fc-time{display:inline-block}.fc-timeline-event .fc-title{padding:0 3px;display:inline-block;vertical-align:top;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;max-width:100%;white-space:nowrap;overflow:hidden}.fc-ltr .fc-timeline-event.fc-not-start .fc-content,.fc-rtl .fc-timeline-event.fc-not-end .fc-content{margin-left:8px}.fc-ltr .fc-timeline-event.fc-not-end .fc-content,.fc-rtl .fc-timeline-event.fc-not-start .fc-content{margin-right:8px}.fc-timeline-event.fc-not-end .fc-content:after,.fc-timeline-event.fc-not-start .fc-content:before{content:"";position:absolute;top:50%;margin-top:-5px;border:5px solid #000;border-top-color:transparent;border-bottom-color:transparent;opacity:.5}.fc-ltr .fc-timeline-event.fc-not-start .fc-content:before,.fc-rtl .fc-timeline-event.fc-not-end .fc-content:after{border-left:0;left:-6px}.fc-ltr .fc-timeline-event.fc-not-end .fc-content:after,.fc-rtl .fc-timeline-event.fc-not-start .fc-content:before{border-right:0;right:-6px}
\ No newline at end of file
--- /dev/null
+/*!
+FullCalendar Timeline Plugin v4.1.0
+Docs & License: https://fullcalendar.io/scheduler
+(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):(e=e||self,t(e.FullCalendarTimeline={},e.FullCalendar))}(this,function(e,t){"use strict";function r(e,t){function r(){this.constructor=e}T(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}function n(){return z||(z=i())}function i(){var e=t.htmlToElement('<div style=" position: absolute; top: -1000px; width: 1px; height: 1px; overflow: scroll; direction: rtl; font-size: 100px; ">A</div>');document.body.appendChild(e);var r;return e.scrollLeft>0?r="positive":(e.scrollLeft=1,r=e.scrollLeft>0?"reverse":"negative"),t.removeElement(e),r}function o(e,r){var n=r.dateEnv,i={labelInterval:c(r,"slotLabelInterval"),slotDuration:c(r,"slotDuration")};d(i,e,n),h(i,e,n),u(i,e,n);var o=r.opt("slotLabelFormat"),s=Array.isArray(o)?o:null!=o?[o]:p(i,e,n,r);i.headerFormats=s.map(function(e){return t.createFormatter(e)}),i.isTimeScale=Boolean(i.slotDuration.milliseconds);var v=null;if(!i.isTimeScale){var y=t.greatestDurationDenominator(i.slotDuration).unit;/year|month|week/.test(y)&&(v=y)}i.largeUnit=v,i.emphasizeWeeks=t.isSingleDay(i.slotDuration)&&f("weeks",e,n)>=2&&!r.opt("businessHours");var S,b,E=r.opt("snapDuration");E&&(S=t.createDuration(E),b=t.wholeDivideDurations(i.slotDuration,S)),null==b&&(S=i.slotDuration,b=1),i.snapDuration=S,i.snapsPerSlot=b;var D=t.asRoughMs(e.maxTime)-t.asRoughMs(e.minTime),w=l(e.renderRange.start,i,n),C=l(e.renderRange.end,i,n);i.isTimeScale&&(w=n.add(w,e.minTime),C=n.add(t.addDays(C,-1),e.maxTime)),i.timeWindowMs=D,i.normalizedRange={start:w,end:C};for(var T=[],R=w;R<C;)a(R,i,e,r)&&T.push(R),R=n.add(R,i.slotDuration);i.slotDates=T;var x=-1,M=0,z=[],k=[];for(R=w;R<C;)a(R,i,e,r)?(x++,z.push(x),k.push(M)):z.push(x+.5),R=n.add(R,i.snapDuration),M++;return i.snapDiffToIndex=z,i.snapIndexToDiff=k,i.snapCnt=x+1,i.slotCnt=i.snapCnt/i.snapsPerSlot,i.isWeekStarts=g(i,n),i.cellRows=m(i,n,r),i}function l(e,r,n){var i=e;return r.isTimeScale||(i=t.startOfDay(i),r.largeUnit&&(i=n.startOf(i,r.largeUnit))),i}function s(e,r,n){if(!r.isTimeScale&&(e=t.computeVisibleDayRange(e),r.largeUnit)){var i=e;e={start:n.startOf(e.start,r.largeUnit),end:n.startOf(e.end,r.largeUnit)},(e.end.valueOf()!==i.end.valueOf()||e.end<=e.start)&&(e={start:e.start,end:n.add(e.end,r.slotDuration)})}return e}function a(e,r,n,i){if(i.dateProfileGenerator.isHiddenDay(e))return!1;if(r.isTimeScale){var o=t.startOfDay(e),l=e.valueOf()-o.valueOf(),s=l-t.asRoughMs(n.minTime);return s=(s%864e5+864e5)%864e5,s<r.timeWindowMs}return!0}function c(e,r){var n=e.opt(r);if(null!=n)return t.createDuration(n)}function d(e,r,n){var i=r.currentRange;if(e.labelInterval){var o=n.countDurationsBetween(i.start,i.end,e.labelInterval);o>t.config.MAX_TIMELINE_SLOTS&&(console.warn("slotLabelInterval results in too many cells"),e.labelInterval=null)}if(e.slotDuration){var l=n.countDurationsBetween(i.start,i.end,e.slotDuration);l>t.config.MAX_TIMELINE_SLOTS&&(console.warn("slotDuration results in too many cells"),e.slotDuration=null)}if(e.labelInterval&&e.slotDuration){var s=t.wholeDivideDurations(e.labelInterval,e.slotDuration);(null===s||s<1)&&(console.warn("slotLabelInterval must be a multiple of slotDuration"),e.slotDuration=null)}}function h(e,r,n){var i=r.currentRange,o=e.labelInterval;if(!o){var l=void 0;if(e.slotDuration){for(var s=0,a=O;s<a.length;s++){l=a[s];var c=t.createDuration(l),d=t.wholeDivideDurations(c,e.slotDuration);if(null!==d&&d<=A){o=c;break}}o||(o=e.slotDuration)}else for(var h=0,u=O;h<u.length;h++){l=u[h],o=t.createDuration(l);var p=n.countDurationsBetween(i.start,i.end,o);if(p>=W)break}e.labelInterval=o}return o}function u(e,r,n){var i=r.currentRange,o=e.slotDuration;if(!o){for(var l=h(e,r,n),s=0,a=O;s<a.length;s++){var c=a[s],d=t.createDuration(c),u=t.wholeDivideDurations(l,d);if(null!==u&&u>1&&u<=A){o=d;break}}if(o){var p=n.countDurationsBetween(i.start,i.end,o);p>B&&(o=null)}o||(o=l),e.slotDuration=o}return o}function p(e,r,n,i){var o,l,s=e.labelInterval,a=t.greatestDurationDenominator(s).unit,c=i.opt("weekNumbers"),d=o=l=null;switch("week"!==a||c||(a="day"),a){case"year":d={year:"numeric"};break;case"month":f("years",r,n)>1&&(d={year:"numeric"}),o={month:"short"};break;case"week":f("years",r,n)>1&&(d={year:"numeric"}),o={week:"narrow"};break;case"day":f("years",r,n)>1?d={year:"numeric",month:"long"}:f("months",r,n)>1&&(d={month:"long"}),c&&(o={week:"short"}),l={weekday:"narrow",day:"numeric"};break;case"hour":c&&(d={week:"short"}),f("days",r,n)>1&&(o={weekday:"short",day:"numeric",month:"numeric",omitCommas:!0}),l={hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"short"};break;case"minute":t.asRoughMinutes(s)/60>=A?(d={hour:"numeric",meridiem:"short"},o=function(e){return":"+t.padStart(e.date.minute,2)}):d={hour:"numeric",minute:"numeric",meridiem:"short"};break;case"second":t.asRoughSeconds(s)/60>=A?(d={hour:"numeric",minute:"2-digit",meridiem:"lowercase"},o=function(e){return":"+t.padStart(e.date.second,2)}):d={hour:"numeric",minute:"2-digit",second:"2-digit",meridiem:"lowercase"};break;case"millisecond":d={hour:"numeric",minute:"2-digit",second:"2-digit",meridiem:"lowercase"},o=function(e){return"."+t.padStart(e.millisecond,3)}}return[].concat(d||[],o||[],l||[])}function f(e,r,n){var i=r.currentRange,o=null;return"years"===e?o=n.diffWholeYears(i.start,i.end):"months"===e?o=n.diffWholeMonths(i.start,i.end):"weeks"===e?o=n.diffWholeMonths(i.start,i.end):"days"===e&&(o=t.diffWholeDays(i.start,i.end)),o||0}function g(e,t){for(var r=e.slotDates,n=e.emphasizeWeeks,i=null,o=[],l=0,s=r;l<s.length;l++){var a=s[l],c=t.computeWeekNumber(a),d=n&&null!==i&&i!==c;i=c,o.push(d)}return o}function m(e,r,n){for(var i=e.slotDates,o=e.headerFormats,l=o.map(function(e){return[]}),s=o.map(function(e){return e.getLargestUnit?e.getLargestUnit():null}),a=0;a<i.length;a++)for(var c=i[a],d=e.isWeekStarts[a],h=0;h<o.length;h++){var u=o[h],p=l[h],f=p[p.length-1],g=o.length>1&&h<o.length-1,m=null;if(g){var y=r.format(c,u);f&&f.text===y?f.colspan+=1:m=v(c,y,s[h],n)}else if(!f||t.isInt(r.countDurationsBetween(e.normalizedRange.start,c,e.labelInterval))){var y=r.format(c,u);m=v(c,y,s[h],n)}else f.colspan+=1;m&&(m.weekStart=d,p.push(m))}return l}function v(e,r,n,i){var o=t.buildGotoAnchorHtml(i,{date:e,type:n,forceOff:!n},{"class":"fc-cell-text"},t.htmlEscape(r));return{text:r,spanHtml:o,date:e,colspan:1,isWeekStart:!1}}function y(e,r,n){e.forEach(function(e,i){var o=r[i].naturalBound;t.applyStyle(e,{position:"relative",left:n[i].left-o.left,top:n[i].top-o.top})})}function S(e,r,n){e.forEach(function(e,i){var o=0;"center"===r[i].intendedTextAlign&&(o=(n-r[i].elWidth)/2,"center"===r[i].computedTextAlign&&(e.setAttribute("data-sticky-center",""),e.parentNode.style.textAlign="left")),t.applyStyle(e,{position:_,left:o,right:0,top:0})})}function b(){var e=t.htmlToElement('<div style="position:-webkit-sticky;position:sticky"></div>'),r=e.style.position;return r.indexOf("sticky")!==-1?r:null}function E(e){for(var t=0,r=0,n=e;r<n.length;r++){var i=n[r];t=Math.max(t,D(i))}return t}function D(e){return null==e.top&&(e.top=E(e.above)),e.top+e.height}function w(e,t){return e.left<t.right&&e.right>t.left}function C(e,t){var r=e.resourceEditable;if(null==r){var n=e.sourceId&&t.state.eventSources[e.sourceId];n&&(r=n.extendedProps.resourceEditable),null==r&&(r=t.opt("eventResourceEditable"),null==r&&(r=!0))}return r}/*! *****************************************************************************
+ 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 T=function(e,t){return(T=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)},R=function(){return R=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++){t=arguments[r];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])}return e},R.apply(this,arguments)},x=function(){function e(){this.gutters={},this.el=t.htmlToElement('<div class="fc-scroller-canvas"> <div class="fc-content"></div> <div class="fc-bg"></div> </div>'),this.contentEl=this.el.querySelector(".fc-content"),this.bgEl=this.el.querySelector(".fc-bg")}return e.prototype.setGutters=function(e){e?R(this.gutters,e):this.gutters={},this.updateSize()},e.prototype.setWidth=function(e){this.width=e,this.updateSize()},e.prototype.setMinWidth=function(e){this.minWidth=e,this.updateSize()},e.prototype.clearWidth=function(){this.width=null,this.minWidth=null,this.updateSize()},e.prototype.updateSize=function(){var e=this,r=e.gutters,n=e.el;t.forceClassName(n,"fc-gutter-left",r.left),t.forceClassName(n,"fc-gutter-right",r.right),t.forceClassName(n,"fc-gutter-top",r.top),t.forceClassName(n,"fc-gutter-bottom",r.bottom),t.applyStyle(n,{paddingLeft:r.left||"",paddingRight:r.right||"",paddingTop:r.top||"",paddingBottom:r.bottom||"",width:null!=this.width?this.width+(r.left||0)+(r.right||0):"",minWidth:null!=this.minWidth?this.minWidth+(r.left||0)+(r.right||0):""}),t.applyStyle(this.bgEl,{left:r.left||"",right:r.right||"",top:r.top||"",bottom:r.bottom||""})},e}(),M=function(e){function i(r,n){var i=e.call(this,r,n)||this;return i.reportScroll=function(){i.isScrolling||i.reportScrollStart(),i.trigger("scroll"),i.isMoving=!0,i.requestMovingEnd()},i.reportScrollStart=function(){i.isScrolling||(i.isScrolling=!0,i.trigger("scrollStart",i.isTouching))},i.reportTouchStart=function(){i.isTouching=!0},i.reportTouchEnd=function(){i.isTouching&&(i.isTouching=!1,i.isTouchScrollEnabled&&i.unbindPreventTouchScroll(),i.isMoving||i.reportScrollEnd())},i.isScrolling=!1,i.isTouching=!1,i.isMoving=!1,i.isTouchScrollEnabled=!0,i.requestMovingEnd=t.debounce(i.reportMovingEnd,500),i.canvas=new x,i.el.appendChild(i.canvas.el),i.applyOverflow(),i.bindHandlers(),i}return r(i,e),i.prototype.destroy=function(){e.prototype.destroy.call(this),this.unbindHandlers()},i.prototype.disableTouchScroll=function(){this.isTouchScrollEnabled=!1,this.bindPreventTouchScroll()},i.prototype.enableTouchScroll=function(){this.isTouchScrollEnabled=!0,this.isTouching||this.unbindPreventTouchScroll()},i.prototype.bindPreventTouchScroll=function(){this.preventTouchScrollHandler||this.el.addEventListener("touchmove",this.preventTouchScrollHandler=t.preventDefault)},i.prototype.unbindPreventTouchScroll=function(){this.preventTouchScrollHandler&&(this.el.removeEventListener("touchmove",this.preventTouchScrollHandler),this.preventTouchScrollHandler=null)},i.prototype.bindHandlers=function(){this.el.addEventListener("scroll",this.reportScroll),this.el.addEventListener("touchstart",this.reportTouchStart,{passive:!0}),this.el.addEventListener("touchend",this.reportTouchEnd)},i.prototype.unbindHandlers=function(){this.el.removeEventListener("scroll",this.reportScroll),this.el.removeEventListener("touchstart",this.reportTouchStart,{passive:!0}),this.el.removeEventListener("touchend",this.reportTouchEnd)},i.prototype.reportMovingEnd=function(){this.isMoving=!1,this.isTouching||this.reportScrollEnd()},i.prototype.reportScrollEnd=function(){this.isScrolling&&(this.trigger("scrollEnd"),this.isScrolling=!1)},i.prototype.getScrollLeft=function(){var e=this.el,t=window.getComputedStyle(e).direction,r=e.scrollLeft;if("rtl"===t)switch(n()){case"positive":r=r+e.clientWidth-e.scrollWidth;break;case"reverse":r=-r}return r},i.prototype.setScrollLeft=function(e){var t=this.el,r=window.getComputedStyle(t).direction;if("rtl"===r)switch(n()){case"positive":e=e-t.clientWidth+t.scrollWidth;break;case"reverse":e=-e}t.scrollLeft=e},i.prototype.getScrollFromLeft=function(){var e=this.el,t=window.getComputedStyle(e).direction,r=e.scrollLeft;if("rtl"===t)switch(n()){case"negative":r=r-e.clientWidth+e.scrollWidth;break;case"reverse":r=-r-e.clientWidth+e.scrollWidth}return r},i}(t.ScrollComponent);t.EmitterMixin.mixInto(M);var z,k=function(){function e(e,r,n){this.isHScrollbarsClipped=!1,this.isVScrollbarsClipped=!1,"clipped-scroll"===e&&(e="scroll",this.isHScrollbarsClipped=!0),"clipped-scroll"===r&&(r="scroll",this.isVScrollbarsClipped=!0),this.enhancedScroll=new M(e,r),n.appendChild(this.el=t.createElement("div",{className:"fc-scroller-clip"})),this.el.appendChild(this.enhancedScroll.el)}return e.prototype.destroy=function(){t.removeElement(this.el)},e.prototype.updateSize=function(){var e=this.enhancedScroll,r=e.el,n=t.computeEdges(r),i={marginLeft:0,marginRight:0,marginTop:0,marginBottom:0};this.isVScrollbarsClipped&&(i.marginLeft=-n.scrollbarLeft,i.marginRight=-n.scrollbarRight),this.isHScrollbarsClipped&&(i.marginBottom=-n.scrollbarBottom),t.applyStyle(r,i),!this.isHScrollbarsClipped&&"hidden"!==e.overflowX||!this.isVScrollbarsClipped&&"hidden"!==e.overflowY||n.scrollbarLeft||n.scrollbarRight||n.scrollbarBottom?r.classList.remove("fc-no-scrollbars"):r.classList.add("fc-no-scrollbars")},e.prototype.setHeight=function(e){this.enhancedScroll.setHeight(e)},e.prototype.getScrollbarWidths=function(){var e=this.enhancedScroll.getScrollbarWidths();return this.isVScrollbarsClipped&&(e.left=0,e.right=0),this.isHScrollbarsClipped&&(e.bottom=0),e},e}(),I=function(){function e(e,t){this.axis=e,this.scrollers=t;for(var r=0,n=this.scrollers;r<n.length;r++){var i=n[r];this.initScroller(i)}}return e.prototype.initScroller=function(e){var t=this,r=e.enhancedScroll,n=function(){t.assignMasterScroller(e)};"wheel mousewheel DomMouseScroll MozMousePixelScroll".split(" ").forEach(function(e){r.el.addEventListener(e,n)}),r.on("scrollStart",function(){t.masterScroller||t.assignMasterScroller(e)}).on("scroll",function(){if(e===t.masterScroller)for(var n=0,i=t.scrollers;n<i.length;n++){var o=i[n];if(o!==e)switch(t.axis){case"horizontal":o.enhancedScroll.el.scrollLeft=r.el.scrollLeft;break;case"vertical":o.enhancedScroll.setScrollTop(r.getScrollTop())}}}).on("scrollEnd",function(){e===t.masterScroller&&t.unassignMasterScroller()})},e.prototype.assignMasterScroller=function(e){this.unassignMasterScroller(),this.masterScroller=e;for(var t=0,r=this.scrollers;t<r.length;t++){var n=r[t];n!==e&&n.enhancedScroll.disableTouchScroll()}},e.prototype.unassignMasterScroller=function(){if(this.masterScroller){for(var e=0,t=this.scrollers;e<t.length;e++){var r=t[e];r.enhancedScroll.enableTouchScroll()}this.masterScroller=null}},e.prototype.update=function(){for(var e,t,r=this.scrollers.map(function(e){return e.getScrollbarWidths()}),n=0,i=0,o=0,l=0,s=0,a=r;s<a.length;s++)e=a[s],n=Math.max(n,e.left),i=Math.max(i,e.right),o=Math.max(o,e.top),l=Math.max(l,e.bottom);for(t=0;t<this.scrollers.length;t++){var c=this.scrollers[t];e=r[t],c.enhancedScroll.canvas.setGutters("horizontal"===this.axis?{left:n-e.left,right:i-e.right}:{top:o-e.top,bottom:l-e.bottom})}},e}(),P=function(){function e(e,t,r){this.headerScroller=new k("clipped-scroll","hidden",e),this.bodyScroller=new k("auto",r,t),this.scrollJoiner=new I("horizontal",[this.headerScroller,this.bodyScroller])}return e.prototype.destroy=function(){this.headerScroller.destroy(),this.bodyScroller.destroy()},e.prototype.setHeight=function(e,t){var r;r=t?"auto":e-this.queryHeadHeight(),this.bodyScroller.setHeight(r),this.headerScroller.updateSize(),this.bodyScroller.updateSize(),this.scrollJoiner.update()},e.prototype.queryHeadHeight=function(){return this.headerScroller.enhancedScroll.canvas.contentEl.offsetHeight},e}(),H=function(e){function n(r,n){var i=e.call(this,r)||this;return n.appendChild(i.tableEl=t.createElement("table",{className:i.theme.getClass("tableGrid")})),i}return r(n,e),n.prototype.destroy=function(){t.removeElement(this.tableEl),e.prototype.destroy.call(this)},n.prototype.render=function(e){this.renderDates(e.tDateProfile)},n.prototype.renderDates=function(e){for(var r=this,n=r.dateEnv,i=r.theme,o=e.cellRows,l=o[o.length-1],s=t.asRoughMs(e.labelInterval)>t.asRoughMs(e.slotDuration),a=t.isSingleDay(e.slotDuration),c="<colgroup>",d=e.slotCnt-1;d>=0;d--)c+="<col/>";c+="</colgroup>",c+="<tbody>";for(var h=0,u=o;h<u.length;h++){var p=u[h],f=p===l;c+="<tr"+(s&&f?' class="fc-chrono"':"")+">";for(var g=0,m=p;g<m.length;g++){var v=m[g],y=[i.getClass("widgetHeader")];v.isWeekStart&&y.push("fc-em-cell"),a&&(y=y.concat(t.getDayClasses(v.date,this.props.dateProfile,this.context,!0))),c+='<th class="'+y.join(" ")+'" data-date="'+n.formatIso(v.date,{omitTime:!e.isTimeScale,omitTimeZoneOffset:!0})+'"'+(v.colspan>1?' colspan="'+v.colspan+'"':"")+'><div class="fc-cell-content">'+v.spanHtml+"</div></th>"}c+="</tr>"}c+="</tbody>",this.tableEl.innerHTML=c,this.slatColEls=t.findElements(this.tableEl,"col"),this.innerEls=t.findElements(this.tableEl.querySelector("tr:last-child"),"th .fc-cell-text"),t.findElements(this.tableEl.querySelectorAll("tr:not(:last-child)"),"th .fc-cell-text").forEach(function(e){e.classList.add("fc-sticky")})},n}(t.Component),L=function(e){function n(r,n){var i=e.call(this,r)||this;return n.appendChild(i.el=t.createElement("div",{className:"fc-slats"})),i}return r(n,e),n.prototype.destroy=function(){t.removeElement(this.el),e.prototype.destroy.call(this)},n.prototype.render=function(e){this.renderDates(e.tDateProfile)},n.prototype.renderDates=function(e){for(var r=this,n=r.theme,i=r.view,o=r.dateEnv,l=e.slotDates,s=e.isWeekStarts,a='<table class="'+n.getClass("tableGrid")+'"><colgroup>',c=0;c<l.length;c++)a+="<col/>";a+="</colgroup>",a+="<tbody><tr>";for(var c=0;c<l.length;c++)a+=this.slatCellHtml(l[c],s[c],e);a+="</tr></tbody></table>",this.el.innerHTML=a,this.slatColEls=t.findElements(this.el,"col"),this.slatEls=t.findElements(this.el,"td");for(var c=0;c<l.length;c++)i.publiclyTrigger("dayRender",[{date:o.toDate(l[c]),el:this.slatEls[c],view:i}]);this.outerCoordCache=new t.PositionCache(this.el,this.slatEls,(!0),(!1)),this.innerCoordCache=new t.PositionCache(this.el,t.findChildren(this.slatEls,"div"),(!0),(!1))},n.prototype.slatCellHtml=function(e,r,n){var i,o=this,l=o.theme,s=o.dateEnv;return n.isTimeScale?(i=[],i.push(t.isInt(s.countDurationsBetween(n.normalizedRange.start,e,n.labelInterval))?"fc-major":"fc-minor")):(i=t.getDayClasses(e,this.props.dateProfile,this.context),i.push("fc-day")),i.unshift(l.getClass("widgetContent")),r&&i.push("fc-em-cell"),'<td class="'+i.join(" ")+'" data-date="'+s.formatIso(e,{omitTime:!n.isTimeScale,omitTimeZoneOffset:!0})+'"><div></div></td>'},n.prototype.updateSize=function(){this.outerCoordCache.build(),this.innerCoordCache.build()},n.prototype.positionToHit=function(e){var r=this.outerCoordCache,n=this.props.tDateProfile,i=r.leftToIndex(e);if(null!=i){var o=r.getWidth(i),l=this.isRtl?(r.rights[i]-e)/o:(e-r.lefts[i])/o,s=Math.floor(l*n.snapsPerSlot),a=this.dateEnv.add(n.slotDates[i],t.multiplyDuration(n.snapDuration,s)),c=this.dateEnv.add(a,n.snapDuration);return{dateSpan:{range:{start:a,end:c},allDay:!this.props.tDateProfile.isTimeScale},dayEl:this.slatColEls[i],left:r.lefts[i],right:r.rights[i]}}return null},n}(t.Component),W=18,A=6,B=200;t.config.MAX_TIMELINE_SLOTS=1e3;var O=[{years:1},{months:1},{days:1},{hours:1},{minutes:30},{minutes:15},{minutes:10},{minutes:5},{minutes:1},{seconds:30},{seconds:15},{seconds:10},{seconds:5},{seconds:1},{milliseconds:500},{milliseconds:100},{milliseconds:10},{milliseconds:1}],N=function(){function e(e,t){this.headParent=e,this.bodyParent=t}return e.prototype.render=function(e,r){var n=r?{right:-e}:{left:e};this.headParent.appendChild(this.arrowEl=t.createElement("div",{className:"fc-now-indicator fc-now-indicator-arrow",style:n})),this.bodyParent.appendChild(this.lineEl=t.createElement("div",{className:"fc-now-indicator fc-now-indicator-line",style:n}))},e.prototype.unrender=function(){this.arrowEl&&t.removeElement(this.arrowEl),this.lineEl&&t.removeElement(this.lineEl)},e}(),_=b(),F=/Edge/.test(navigator.userAgent),q="-webkit-sticky"===_,U="fc-sticky",j=function(){function e(e,t,r){var n=this;this.usingRelative=null,this.updateSize=function(){var e=Array.prototype.slice.call(n.scroller.canvas.el.querySelectorAll("."+U)),t=n.queryElGeoms(e),r=n.scroller.el.clientWidth;if(n.usingRelative){var i=n.computeElDestinations(t,r);y(e,t,i)}else S(e,t,r)},this.scroller=e,this.usingRelative=!_||F&&t||(F||q)&&r,this.usingRelative&&e.on("scrollEnd",this.updateSize)}return e.prototype.destroy=function(){this.scroller.off("scrollEnd",this.updateSize)},e.prototype.queryElGeoms=function(e){for(var r=this.scroller.canvas.el.getBoundingClientRect(),n=[],i=0,o=e;i<o.length;i++){var l=o[i],s=t.translateRect(l.parentNode.getBoundingClientRect(),-r.left,-r.top),a=l.getBoundingClientRect(),c=window.getComputedStyle(l),d=window.getComputedStyle(l.parentNode).textAlign,h=d,u=null;"sticky"!==c.position&&(u=t.translateRect(a,-r.left-(parseFloat(c.left)||0),-r.top-(parseFloat(c.top)||0))),l.hasAttribute("data-sticky-center")&&(h="center"),n.push({parentBound:s,naturalBound:u,elWidth:a.width,elHeight:a.height,computedTextAlign:d,intendedTextAlign:h})}return n},e.prototype.computeElDestinations=function(e,t){var r=this.scroller.getScrollFromLeft(),n=this.scroller.getScrollTop(),i=r+t;return e.map(function(e){var t,o,l=e.elWidth,s=e.elHeight,a=e.parentBound,c=e.naturalBound;switch(e.intendedTextAlign){case"left":t=r;break;case"right":t=i-l;break;case"center":t=(r+i)/2-l/2}return t=Math.min(t,a.right-l),t=Math.max(t,a.left),o=n,o=Math.min(o,a.bottom-s),o=Math.max(o,c.top),{left:t,top:o}})},e}(),V=function(e){function n(t,r,n){var i=e.call(this,t)||this,o=i.layout=new P(r,n,"auto"),l=o.headerScroller.enhancedScroll,s=o.bodyScroller.enhancedScroll;return i.headStickyScroller=new j(l,i.isRtl,(!1)),i.bodyStickyScroller=new j(s,i.isRtl,(!1)),i.header=new H(t,l.canvas.contentEl),i.slats=new L(t,s.canvas.bgEl),i.nowIndicator=new N(l.canvas.el,s.canvas.el),i}return r(n,e),n.prototype.destroy=function(){this.layout.destroy(),this.header.destroy(),this.slats.destroy(),this.nowIndicator.unrender(),this.headStickyScroller.destroy(),this.bodyStickyScroller.destroy(),e.prototype.destroy.call(this)},n.prototype.render=function(e){var t=this.tDateProfile=o(e.dateProfile,this.view);this.header.receiveProps({dateProfile:e.dateProfile,tDateProfile:t}),this.slats.receiveProps({dateProfile:e.dateProfile,tDateProfile:t})},n.prototype.getNowIndicatorUnit=function(e){var r=this.tDateProfile=o(e,this.view);if(r.isTimeScale)return t.greatestDurationDenominator(r.slotDuration).unit},n.prototype.renderNowIndicator=function(e){t.rangeContainsMarker(this.tDateProfile.normalizedRange,e)&&this.nowIndicator.render(this.dateToCoord(e),this.isRtl)},n.prototype.unrenderNowIndicator=function(){this.nowIndicator.unrender()},n.prototype.updateSize=function(e,t,r){this.applySlotWidth(this.computeSlotWidth()),this.layout.setHeight(t,r),this.slats.updateSize()},n.prototype.updateStickyScrollers=function(){this.headStickyScroller.updateSize(),this.bodyStickyScroller.updateSize()},n.prototype.computeSlotWidth=function(){var e=this.opt("slotWidth")||"";return""===e&&(e=this.computeDefaultSlotWidth(this.tDateProfile)),e},n.prototype.computeDefaultSlotWidth=function(e){var r=0;this.header.innerEls.forEach(function(e,t){r=Math.max(r,e.getBoundingClientRect().width)});var n=Math.ceil(r)+1,i=t.wholeDivideDurations(e.labelInterval,e.slotDuration),o=Math.ceil(n/i),l=window.getComputedStyle(this.header.slatColEls[0]).minWidth;return l&&(l=parseInt(l,10),l&&(o=Math.max(o,l))),o},n.prototype.applySlotWidth=function(e){var t=this,r=t.layout,n=t.tDateProfile,i="",o="",l="";if(""!==e){e=Math.round(e),i=e*n.slotDates.length,o="",l=e;var s=r.bodyScroller.enhancedScroll.getClientWidth();s>i&&(o=s,i="",l=Math.floor(s/n.slotDates.length))}r.headerScroller.enhancedScroll.canvas.setWidth(i),r.headerScroller.enhancedScroll.canvas.setMinWidth(o),r.bodyScroller.enhancedScroll.canvas.setWidth(i),r.bodyScroller.enhancedScroll.canvas.setMinWidth(o),""!==l&&this.header.slatColEls.slice(0,-1).concat(this.slats.slatColEls.slice(0,-1)).forEach(function(e){e.style.width=l+"px"})},n.prototype.computeDateSnapCoverage=function(e){var r=this,n=r.dateEnv,i=r.tDateProfile,o=n.countDurationsBetween(i.normalizedRange.start,e,i.snapDuration);if(o<0)return 0;if(o>=i.snapDiffToIndex.length)return i.snapCnt;var l=Math.floor(o),s=i.snapDiffToIndex[l];return t.isInt(s)?s+=o-l:s=Math.ceil(s),s},n.prototype.dateToCoord=function(e){var t=this.tDateProfile,r=this.computeDateSnapCoverage(e),n=r/t.snapsPerSlot,i=Math.floor(n);i=Math.min(i,t.slotCnt-1);var o=n-i,l=this.slats,s=l.innerCoordCache,a=l.outerCoordCache;return this.isRtl?a.rights[i]-s.getWidth(i)*o-a.originClientRect.width:a.lefts[i]+s.getWidth(i)*o},n.prototype.rangeToCoords=function(e){return this.isRtl?{right:this.dateToCoord(e.start),left:this.dateToCoord(e.end)}:{left:this.dateToCoord(e.start),right:this.dateToCoord(e.end)}},n.prototype.computeDateScroll=function(e){var r=this.dateEnv,n=this.props.dateProfile,i=0;return n&&(i=this.dateToCoord(r.add(t.startOfDay(n.activeRange.start),t.createDuration(e))),!this.isRtl&&i&&(i+=1)),{left:i}},n.prototype.queryDateScroll=function(){var e=this.layout.bodyScroller.enhancedScroll;return{left:e.getScrollLeft()}},n.prototype.applyDateScroll=function(e){this.layout.bodyScroller.enhancedScroll.setScrollLeft(e.left||0),this.layout.headerScroller.enhancedScroll.setScrollLeft(e.left||0)},n}(t.Component),G=function(e){function n(t,r,n){var i=e.call(this,t)||this;return i.masterContainerEl=r,i.timeAxis=n,i}return r(n,e),n.prototype.renderSegHtml=function(e,r){var n=e.eventRange,i=n.def,o=n.ui,l=o.startEditable||C(i,this.timeAxis.calendar),s=e.isStart&&o.durationEditable&&this.context.options.eventResizableFromStart,a=e.isEnd&&o.durationEditable,c=this.getSegClasses(e,l,s||a,r);c.unshift("fc-timeline-event","fc-h-event");var d=this.getTimeText(n);return'<a class="'+c.join(" ")+'" style="'+t.cssToStr(this.getSkinCss(o))+'"'+(i.url?' href="'+t.htmlEscape(i.url)+'"':"")+'><div class="fc-content">'+(d?'<span class="fc-time">'+t.htmlEscape(d)+"</span>":"")+'<span class="fc-title fc-sticky">'+(i.title?t.htmlEscape(i.title):" ")+"</span></div>"+(s?'<div class="fc-resizer fc-start-resizer"></div>':"")+(a?'<div class="fc-resizer fc-end-resizer"></div>':"")+"</a>"},n.prototype.computeDisplayEventTime=function(){return!this.timeAxis.tDateProfile.isTimeScale},n.prototype.computeDisplayEventEnd=function(){return!1},n.prototype.computeEventTimeFormat=function(){return{hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"narrow"}},n.prototype.attachSegs=function(e,r){if(!this.el&&this.masterContainerEl&&(this.el=t.createElement("div",{className:"fc-event-container"}),r&&this.el.classList.add("fc-mirror-container"),this.masterContainerEl.appendChild(this.el)),this.el)for(var n=0,i=e;n<i.length;n++){var o=i[n];this.el.appendChild(o.el)}},n.prototype.detachSegs=function(e){for(var r=0,n=e;r<n.length;r++){var i=n[r];t.removeElement(i.el)}},n.prototype.computeSegSizes=function(e){for(var r=this.timeAxis,n=0,i=e;n<i.length;n++){var o=i[n],l=r.rangeToCoords(o);t.applyStyle(o.el,{left:o.left=l.left,right:-(o.right=l.right)})}},n.prototype.assignSegSizes=function(e){if(this.el){for(var r=0,n=e;r<n.length;r++){var i=n[r];i.height=t.computeHeightAndMargins(i.el)}this.buildSegLevels(e);var o=E(e);t.applyStyleProp(this.el,"height",o);for(var l=0,s=e;l<s.length;l++){var i=s[l];t.applyStyleProp(i.el,"top",i.top)}}},n.prototype.buildSegLevels=function(e){var t=[];e=this.sortEventSegs(e);for(var r=0,n=e;r<n.length;r++){var i=n[r];i.above=[];for(var o=0;o<t.length;){for(var l=!1,s=0,a=t[o];s<a.length;s++){var c=a[s];w(i,c)&&(i.above.push(c),l=!0)}if(!l)break;o+=1}for((t[o]||(t[o]=[])).push(i),o+=1;o<t.length;){for(var d=0,h=t[o];d<h.length;d++){var u=h[d];w(i,u)&&u.above.push(i)}o+=1}}return t},n}(t.FgEventRenderer),X=function(e){function n(t,r,n){var i=e.call(this,t)||this;return i.masterContainerEl=r,i.timeAxis=n,i}return r(n,e),n.prototype.attachSegs=function(e,r){if(r.length){var n=void 0;n="businessHours"===e?"bgevent":e.toLowerCase();var i=t.createElement("div",{className:"fc-"+n+"-container"});this.masterContainerEl.appendChild(i);for(var o=0,l=r;o<l.length;o++){var s=l[o];i.appendChild(s.el)}return[i]}},n.prototype.computeSegSizes=function(e){for(var t=this.timeAxis,r=0,n=e;r<n.length;r++){var i=n[r],o=t.rangeToCoords(i);i.left=o.left,i.right=o.right}},n.prototype.assignSegSizes=function(e){for(var r=0,n=e;r<n.length;r++){var i=n[r];t.applyStyle(i.el,{left:i.left,right:-i.right})}},n}(t.FillRenderer),Z=function(e){function n(r,n,i,o){var l=e.call(this,r,i)||this;l.slicer=new J,l.renderEventDrag=t.memoizeRendering(l._renderEventDrag,l._unrenderEventDrag),l.renderEventResize=t.memoizeRendering(l._renderEventResize,l._unrenderEventResize);var s=l.fillRenderer=new X(r,i,o),a=l.eventRenderer=new G(r,n,o);return l.mirrorRenderer=new G(r,n,o),l.renderBusinessHours=t.memoizeRendering(s.renderSegs.bind(s,"businessHours"),s.unrender.bind(s,"businessHours")),l.renderDateSelection=t.memoizeRendering(s.renderSegs.bind(s,"highlight"),s.unrender.bind(s,"highlight")),l.renderBgEvents=t.memoizeRendering(s.renderSegs.bind(s,"bgEvent"),s.unrender.bind(s,"bgEvent")),l.renderFgEvents=t.memoizeRendering(a.renderSegs.bind(a),a.unrender.bind(a)),l.renderEventSelection=t.memoizeRendering(a.selectByInstanceId.bind(a),a.unselectByInstanceId.bind(a),[l.renderFgEvents]),l.timeAxis=o,l}return r(n,e),n.prototype.render=function(e){var t=this.slicer.sliceProps(e,e.dateProfile,this.timeAxis.tDateProfile.isTimeScale?null:e.nextDayThreshold,this,this.timeAxis);this.renderBusinessHours(t.businessHourSegs),this.renderDateSelection(t.dateSelectionSegs),this.renderBgEvents(t.bgEventSegs),this.renderFgEvents(t.fgEventSegs),this.renderEventSelection(t.eventSelection),this.renderEventDrag(t.eventDrag),this.renderEventResize(t.eventResize)},n.prototype.destroy=function(){e.prototype.destroy.call(this),this.renderBusinessHours.unrender(),this.renderDateSelection.unrender(),this.renderBgEvents.unrender(),this.renderFgEvents.unrender(),this.renderEventSelection.unrender(),this.renderEventDrag.unrender(),this.renderEventResize.unrender()},n.prototype._renderEventDrag=function(e){e&&(this.eventRenderer.hideByHash(e.affectedInstances),this.mirrorRenderer.renderSegs(e.segs,{isDragging:!0,sourceSeg:e.sourceSeg}))},n.prototype._unrenderEventDrag=function(e){e&&(this.eventRenderer.showByHash(e.affectedInstances),this.mirrorRenderer.unrender(e.segs,{isDragging:!0,sourceSeg:e.sourceSeg}))},n.prototype._renderEventResize=function(e){if(e){var t=e.segs.map(function(e){return R({},e)});this.eventRenderer.hideByHash(e.affectedInstances),this.fillRenderer.renderSegs("highlight",t),this.mirrorRenderer.renderSegs(e.segs,{isDragging:!0,sourceSeg:e.sourceSeg})}},n.prototype._unrenderEventResize=function(e){e&&(this.eventRenderer.showByHash(e.affectedInstances),this.fillRenderer.unrender("highlight"),this.mirrorRenderer.unrender(e.segs,{isDragging:!0,sourceSeg:e.sourceSeg}))},n.prototype.updateSize=function(e){var t=this,r=t.fillRenderer,n=t.eventRenderer,i=t.mirrorRenderer;r.computeSizes(e),n.computeSizes(e),i.computeSizes(e),r.assignSizes(e),n.assignSizes(e),i.assignSizes(e)},n}(t.DateComponent),J=function(e){function n(){return null!==e&&e.apply(this,arguments)||this}return r(n,e),n.prototype.sliceRange=function(e,r){var n=r.tDateProfile,i=r.props.dateProfile,o=s(e,n,r.dateEnv),l=[];if(r.computeDateSnapCoverage(o.start)<r.computeDateSnapCoverage(o.end)){var c=t.intersectRanges(o,n.normalizedRange);c&&l.push({start:c.start,end:c.end,isStart:c.start.valueOf()===o.start.valueOf()&&a(c.start,n,i,r.view),isEnd:c.end.valueOf()===o.end.valueOf()&&a(t.addMs(c.end,-1),n,i,r.view)})}return l},n}(t.Slicer),Y=function(e){function t(t,r,n,i){var o=e.call(this,t,r,n,i)||this;return o.el.classList.add("fc-timeline"),o.opt("eventOverlap")===!1&&o.el.classList.add("fc-no-overlap"),o.el.innerHTML=o.renderSkeletonHtml(),o.timeAxis=new V(o.context,o.el.querySelector("thead .fc-time-area"),o.el.querySelector("tbody .fc-time-area")),o.lane=new Z(o.context,o.timeAxis.layout.bodyScroller.enhancedScroll.canvas.contentEl,o.timeAxis.layout.bodyScroller.enhancedScroll.canvas.bgEl,o.timeAxis),t.calendar.registerInteractiveComponent(o,{el:o.timeAxis.slats.el}),o}return r(t,e),t.prototype.destroy=function(){this.timeAxis.destroy(),this.lane.destroy(),e.prototype.destroy.call(this),this.calendar.unregisterInteractiveComponent(this)},t.prototype.renderSkeletonHtml=function(){var e=this.theme;return'<table class="'+e.getClass("tableGrid")+'"> <thead class="fc-head"> <tr> <td class="fc-time-area '+e.getClass("widgetHeader")+'"></td> </tr> </thead> <tbody class="fc-body"> <tr> <td class="fc-time-area '+e.getClass("widgetContent")+'"></td> </tr> </tbody> </table>'},t.prototype.render=function(t){e.prototype.render.call(this,t),this.timeAxis.receiveProps({dateProfile:t.dateProfile}),this.lane.receiveProps(R({},t,{nextDayThreshold:this.nextDayThreshold}))},t.prototype.updateSize=function(e,t,r){this.timeAxis.updateSize(e,t,r),this.lane.updateSize(e)},t.prototype.getNowIndicatorUnit=function(e){return this.timeAxis.getNowIndicatorUnit(e)},t.prototype.renderNowIndicator=function(e){this.timeAxis.renderNowIndicator(e)},t.prototype.unrenderNowIndicator=function(){this.timeAxis.unrenderNowIndicator()},t.prototype.computeDateScroll=function(e){return this.timeAxis.computeDateScroll(e)},t.prototype.applyScroll=function(t,r){e.prototype.applyScroll.call(this,t,r);var n=this.calendar;(r||n.isViewUpdated||n.isDatesUpdated||n.isEventsUpdated)&&this.timeAxis.updateStickyScrollers()},t.prototype.applyDateScroll=function(e){this.timeAxis.applyDateScroll(e)},t.prototype.queryScroll=function(){var e=this.timeAxis.layout.bodyScroller.enhancedScroll;return{top:e.getScrollTop(),left:e.getScrollLeft()}},t.prototype.buildPositionCaches=function(){this.timeAxis.slats.updateSize()},t.prototype.queryHit=function(e,t,r,n){var i=this.timeAxis.slats.positionToHit(e);if(i)return{component:this,dateSpan:i.dateSpan,rect:{left:i.left,right:i.right,top:0,bottom:n},dayEl:i.dayEl,layer:0}},t}(t.View),K=t.createPlugin({defaultView:"timelineDay",views:{timeline:{"class":Y,eventResizableFromStart:!0},timelineDay:{type:"timeline",duration:{days:1}},timelineWeek:{type:"timeline",duration:{weeks:1}},timelineMonth:{type:"timeline",duration:{months:1}},timelineYear:{type:"timeline",duration:{years:1}}}});e.HeaderBodyLayout=P,e.ScrollJoiner=I,e.StickyScroller=j,e.TimeAxis=V,e.TimelineLane=Z,e.TimelineView=Y,e["default"]=K,Object.defineProperty(e,"__esModule",{value:!0})});
\ No newline at end of file
--- /dev/null
+{
+ "_from": "@fullcalendar/timeline",
+ "_id": "@fullcalendar/timeline@4.1.0",
+ "_inBundle": false,
+ "_integrity": "sha512-GS3ocCuK8dvM+cbsBtqhEOnUl1u0/FO8b8wpgH+kxT8K4bkPoOTyRRqeX4oZKkNSxZReFHOfYfTUVHpwhhSEGQ==",
+ "_location": "/@fullcalendar/timeline",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "tag",
+ "registry": true,
+ "raw": "@fullcalendar/timeline",
+ "name": "@fullcalendar/timeline",
+ "escapedName": "@fullcalendar%2ftimeline",
+ "scope": "@fullcalendar",
+ "rawSpec": "",
+ "saveSpec": null,
+ "fetchSpec": "latest"
+ },
+ "_requiredBy": [
+ "#USER",
+ "/"
+ ],
+ "_resolved": "https://registry.npmjs.org/@fullcalendar/timeline/-/timeline-4.1.0.tgz",
+ "_shasum": "e85f43ff56b1c238b844e89e56d926cda367ee21",
+ "_spec": "@fullcalendar/timeline",
+ "_where": "C:\\Users\\ksaff\\Workspace\\Websites\\fullcalendar",
+ "author": {
+ "name": "Adam Shaw",
+ "email": "arshaw@arshaw.com",
+ "url": "http://arshaw.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/fullcalendar/fullcalendar-scheduler/issues"
+ },
+ "bundleDependencies": false,
+ "copyright": "2019 Adam Shaw",
+ "deprecated": false,
+ "description": "Display events on a horizontal time axis (without resources)",
+ "docs": "https://fullcalendar.io/docs/timeline-view-no-resources",
+ "homepage": "https://fullcalendar.io/scheduler",
+ "license": "SEE LICENSE IN LICENSE.md",
+ "main": "main.js",
+ "name": "@fullcalendar/timeline",
+ "peerDependencies": {
+ "@fullcalendar/core": "~4.1.0"
+ },
+ "releaseDate": "2019-04-24",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/fullcalendar/fullcalendar-scheduler.git",
+ "homepage": "https://github.com/fullcalendar/fullcalendar-scheduler"
+ },
+ "title": "FullCalendar Timeline Plugin",
+ "types": "main.d.ts",
+ "unpkg": "main.min.js",
+ "version": "4.1.0"
+}
use strict;
use File::Basename qw/dirname basename/;
-use lib ('./lib');
-use lib ('./api/lib');
+use lib ('./backoffice/api/lib');
use Template;
use CGI;