Merge branch 'dev' of https://framagit.org/hubzilla/core into dev
This commit is contained in:
commit
f7b281a65f
@ -1,6 +1,6 @@
|
||||
# Select image from https://hub.docker.com/_/php/
|
||||
#image: php:7.2
|
||||
# Use a prepared Hubzilla image to optimise pipeline run
|
||||
# Use a prepared Hubzilla image to optimise pipeline duration
|
||||
image: registry.gitlab.com/dawnbreak/hubzilla/core:php7.2
|
||||
|
||||
|
||||
@ -32,55 +32,28 @@ variables:
|
||||
|
||||
|
||||
before_script:
|
||||
# pecl and composer do not work with PHP production restrictions (from Hubzilla Docker image)
|
||||
- if [ -f /usr/local/etc/php/conf.d/z_prod.ini ]; then mv /usr/local/etc/php/conf.d/z_prod.ini /usr/local/etc/php/conf.d/z_prod.ini.off; fi
|
||||
# Install & enable Xdebug for code coverage reports
|
||||
- pecl install xdebug
|
||||
- docker-php-ext-enable xdebug
|
||||
# Install composer
|
||||
- curl -sS https://getcomposer.org/installer | php
|
||||
# Install dev libraries from composer
|
||||
- php composer.phar install --no-progress
|
||||
- php ./composer.phar install --no-progress
|
||||
|
||||
|
||||
# test PHP7 with MySQL 5.7
|
||||
php7.2_mysql 1/2:
|
||||
# hidden job definition with template for MySQL/MariaDB
|
||||
.job_template_mysql: &job_definition_mysql
|
||||
stage: test
|
||||
services:
|
||||
- mysql:5.7
|
||||
script:
|
||||
- echo "USE $MYSQL_DATABASE; $(cat ./install/schema_mysql.sql)" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mysql "$MYSQL_DATABASE"
|
||||
- echo "SHOW DATABASES;" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mysql "$MYSQL_DATABASE"
|
||||
- echo "USE $MYSQL_DATABASE; SHOW TABLES;" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mysql "$MYSQL_DATABASE"
|
||||
- vendor/bin/phpunit --configuration tests/phpunit.xml --coverage-text
|
||||
|
||||
|
||||
# test PHP7 with MySQL latest (8)
|
||||
php7.2_mysql 2/2:
|
||||
stage: test
|
||||
services:
|
||||
- name: mysql:latest
|
||||
command: ["--default-authentication-plugin=mysql_native_password"]
|
||||
script:
|
||||
- echo "USE $MYSQL_DATABASE; $(cat ./install/schema_mysql.sql)" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mysql "$MYSQL_DATABASE"
|
||||
- echo "SHOW DATABASES;" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mysql "$MYSQL_DATABASE"
|
||||
- echo "USE $MYSQL_DATABASE; SHOW TABLES;" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mysql "$MYSQL_DATABASE"
|
||||
- vendor/bin/phpunit --configuration tests/phpunit.xml --coverage-text
|
||||
|
||||
|
||||
# test PHP7 with MariaDB latest (10.3)
|
||||
php7.2_mariadb:
|
||||
stage: test
|
||||
services:
|
||||
- name: mariadb:latest
|
||||
alias: mysql
|
||||
script:
|
||||
- echo "USE $MYSQL_DATABASE; $(cat ./install/schema_mysql.sql)" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mysql "$MYSQL_DATABASE"
|
||||
- echo "SHOW DATABASES;" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mysql "$MYSQL_DATABASE"
|
||||
- echo "USE $MYSQL_DATABASE; SHOW TABLES;" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mysql "$MYSQL_DATABASE"
|
||||
- vendor/bin/phpunit --configuration tests/phpunit.xml --coverage-text
|
||||
|
||||
|
||||
# test PHP7 with PostgreSQL latest
|
||||
php7.2_postgres:
|
||||
# hidden job definition with template for PostgreSQL
|
||||
.job_template_postgres: &job_definition_postgres
|
||||
stage: test
|
||||
services:
|
||||
- postgres:latest
|
||||
@ -95,7 +68,10 @@ php7.2_postgres:
|
||||
#- psql -h "postgres" -U "$POSTGRES_USER" -d "$POSTGRES_DB" -c "\dt;"
|
||||
# Run the actual tests
|
||||
- vendor/bin/phpunit --configuration tests/phpunit-pgsql.xml --testdox
|
||||
artifacts:
|
||||
|
||||
# hidden job definition with artifacts config template
|
||||
.artifacts_template:
|
||||
artifacts: &artifacts_template
|
||||
expire_in: 1 week
|
||||
# Gitlab should show the results, but has problems parsing PHPUnit's junit file.
|
||||
reports:
|
||||
@ -106,7 +82,52 @@ php7.2_postgres:
|
||||
- tests/results/
|
||||
|
||||
|
||||
# Generate Doxygen API Documentation and deploy it at GitLab pages
|
||||
# PHP7.2 with MySQL 5.7
|
||||
php7.2_mysql5.7:
|
||||
<<: *job_definition_mysql
|
||||
services:
|
||||
- mysql:5.7
|
||||
|
||||
|
||||
# PHP7.2 with MySQL 8 (latest)
|
||||
php7.2_mysql8:
|
||||
<<: *job_definition_mysql
|
||||
services:
|
||||
- name: mysql:8
|
||||
command: ["--default-authentication-plugin=mysql_native_password"]
|
||||
|
||||
|
||||
# PHP7.2 with MariaDB 10.2
|
||||
php7.2_mariadb10.2:
|
||||
<<: *job_definition_mysql
|
||||
services:
|
||||
- name: mariadb:10.2
|
||||
alias: mysql
|
||||
|
||||
|
||||
# PHP7.3 with MariaDB 10.3 (latest)
|
||||
php7.3_mariadb10.3:
|
||||
<<: *job_definition_mysql
|
||||
image: registry.gitlab.com/dawnbreak/hubzilla/core:php7.3
|
||||
services:
|
||||
- name: mariadb:10.3
|
||||
alias: mysql
|
||||
|
||||
|
||||
# PHP7.2 with PostgreSQL latest (11)
|
||||
php7.2_postgres11:
|
||||
<<: *job_definition_postgres
|
||||
artifacts: *artifacts_template
|
||||
|
||||
|
||||
# PHP7.3 with PostgreSQL latest (11)
|
||||
php7.3_postgres11:
|
||||
<<: *job_definition_postgres
|
||||
image: registry.gitlab.com/dawnbreak/hubzilla/core:php7.3
|
||||
artifacts: *artifacts_template
|
||||
|
||||
|
||||
# Generate Doxygen API Documentation and deploy it as GitLab pages
|
||||
pages:
|
||||
stage: deploy
|
||||
cache: {}
|
||||
|
24
CHANGELOG
24
CHANGELOG
@ -1,3 +1,27 @@
|
||||
Hubzilla 4.0.2 (2019-04-08)
|
||||
- Port cdav calendar to fullcalendar version 4
|
||||
- Fix perms_pending not evaluated correctly
|
||||
- Fix return wrong profile photo modification date by plugin
|
||||
- Fix suggestion widget using feature_enabled still
|
||||
- Fix check service class limits when syncing files
|
||||
- Remove xchan_instance_url from notifier query - it is not used anymore
|
||||
- Implement remove cover photo functionality
|
||||
- Fix z6_discover() and create a zot6 hubloc on import if applicable
|
||||
- Add backend support for connections ordering
|
||||
- Deduplicate items in item_store() by uuid if we got one otherwise by mid
|
||||
- Add ITEM_TYPE_CUSTOM support to mod display
|
||||
- Fix mod subthread on sys channel items
|
||||
- Fix "recipient not found" dreport spaming with own xchan
|
||||
- Fix wrong variables in dirsearch
|
||||
- Fix 48 hours timeframe check in mod changeaddr
|
||||
- Fix wrong variable in Libsync
|
||||
- Pubcrawl: revert adding additional receivers to comments
|
||||
- Diaspora: fix intro received when being banned
|
||||
- Pubcrawl: add diaspora:guid from friendica AP posts for deduplication
|
||||
- Diaspora: fix friendica plink
|
||||
- Photocache: fix issue with spaces and quotes in original filenames
|
||||
|
||||
|
||||
Hubzilla 4.0.1 (2019-03-21)
|
||||
- Fix permissions not getting decrypted on follow
|
||||
- Add option to add a poster to the video bbcode
|
||||
|
@ -280,9 +280,12 @@ class Cdav extends Controller {
|
||||
return;
|
||||
|
||||
$title = $_REQUEST['title'];
|
||||
$dtstart = new \DateTime($_REQUEST['dtstart']);
|
||||
if($_REQUEST['dtend'])
|
||||
$dtend = new \DateTime($_REQUEST['dtend']);
|
||||
$start = datetime_convert(App::$timezone, 'UTC', $_REQUEST['dtstart']);
|
||||
$dtstart = new \DateTime($start);
|
||||
if($_REQUEST['dtend']) {
|
||||
$end = datetime_convert(App::$timezone, 'UTC', $_REQUEST['dtend']);
|
||||
$dtend = new \DateTime($end);
|
||||
}
|
||||
$description = $_REQUEST['description'];
|
||||
$location = $_REQUEST['location'];
|
||||
|
||||
@ -306,13 +309,17 @@ class Cdav extends Controller {
|
||||
'DTSTART' => $dtstart
|
||||
]
|
||||
]);
|
||||
if($dtend)
|
||||
if($dtend) {
|
||||
$vcalendar->VEVENT->add('DTEND', $dtend);
|
||||
$vcalendar->VEVENT->DTEND['TZID'] = App::$timezone;
|
||||
}
|
||||
if($description)
|
||||
$vcalendar->VEVENT->add('DESCRIPTION', $description);
|
||||
if($location)
|
||||
$vcalendar->VEVENT->add('LOCATION', $location);
|
||||
|
||||
$vcalendar->VEVENT->DTSTART['TZID'] = App::$timezone;
|
||||
|
||||
$calendarData = $vcalendar->serialize();
|
||||
|
||||
$caldavBackend->createCalendarObject($id, $objectUri, $calendarData);
|
||||
@ -351,8 +358,12 @@ class Cdav extends Controller {
|
||||
|
||||
$uri = $_REQUEST['uri'];
|
||||
$title = $_REQUEST['title'];
|
||||
$dtstart = new \DateTime($_REQUEST['dtstart']);
|
||||
$dtend = $_REQUEST['dtend'] ? new \DateTime($_REQUEST['dtend']) : '';
|
||||
$start = datetime_convert(App::$timezone, 'UTC', $_REQUEST['dtstart']);
|
||||
$dtstart = new \DateTime($start);
|
||||
if($_REQUEST['dtend']) {
|
||||
$end = datetime_convert(App::$timezone, 'UTC', $_REQUEST['dtend']);
|
||||
$dtend = new \DateTime($end);
|
||||
}
|
||||
$description = $_REQUEST['description'];
|
||||
$location = $_REQUEST['location'];
|
||||
|
||||
@ -404,8 +415,12 @@ class Cdav extends Controller {
|
||||
return;
|
||||
|
||||
$uri = $_REQUEST['uri'];
|
||||
$dtstart = new \DateTime($_REQUEST['dtstart']);
|
||||
$dtend = $_REQUEST['dtend'] ? new \DateTime($_REQUEST['dtend']) : '';
|
||||
$start = datetime_convert(App::$timezone, 'UTC', $_REQUEST['dtstart']);
|
||||
$dtstart = new \DateTime($start);
|
||||
if($_REQUEST['dtend']) {
|
||||
$end = datetime_convert(App::$timezone, 'UTC', $_REQUEST['dtend']);
|
||||
$dtend = new \DateTime($end);
|
||||
}
|
||||
|
||||
$object = $caldavBackend->getCalendarObject($id, $uri);
|
||||
|
||||
@ -877,12 +892,19 @@ class Cdav extends Controller {
|
||||
//Display calendar(s) here
|
||||
if(argc() == 2 && argv(1) === 'calendar') {
|
||||
|
||||
head_add_css('/library/fullcalendar/fullcalendar.css');
|
||||
head_add_css('/library/fullcalendar/packages/core/main.min.css');
|
||||
head_add_css('/library/fullcalendar/packages/daygrid/main.min.css');
|
||||
head_add_css('/library/fullcalendar/packages/timegrid/main.min.css');
|
||||
head_add_css('/library/fullcalendar/packages/list/main.min.css');
|
||||
head_add_css('cdav_calendar.css');
|
||||
|
||||
head_add_js('/library/moment/moment.min.js', 1);
|
||||
head_add_js('/library/fullcalendar/fullcalendar.min.js', 1);
|
||||
head_add_js('/library/fullcalendar/locale-all.js', 1);
|
||||
head_add_js('/library/fullcalendar/packages/core/main.min.js');
|
||||
head_add_js('/library/fullcalendar/packages/interaction/main.min.js');
|
||||
head_add_js('/library/fullcalendar/packages/daygrid/main.min.js');
|
||||
head_add_js('/library/fullcalendar/packages/timegrid/main.min.js');
|
||||
head_add_js('/library/fullcalendar/packages/list/main.min.js');
|
||||
|
||||
$sources = '';
|
||||
|
||||
foreach($calendars as $calendar) {
|
||||
$editable = (($calendar['share-access'] == 2) ? 'false' : 'true'); // false/true must be string since we're passing it to javascript
|
||||
@ -891,6 +913,7 @@ class Cdav extends Controller {
|
||||
$switch = get_pconfig(local_channel(), 'cdav_calendar', $calendar['id'][0]);
|
||||
if($switch) {
|
||||
$sources .= '{
|
||||
id: ' . $calendar['id'][0] . ',
|
||||
url: \'/cdav/calendar/json/' . $calendar['id'][0] . '/' . $calendar['id'][1] . '\',
|
||||
color: \'' . $color . '\'
|
||||
}, ';
|
||||
@ -911,8 +934,8 @@ class Cdav extends Controller {
|
||||
$first_day = (($first_day) ? $first_day : 0);
|
||||
|
||||
$title = ['title', t('Event title')];
|
||||
$dtstart = ['dtstart', t('Start date and time'), '', t('Example: YYYY-MM-DD HH:mm')];
|
||||
$dtend = ['dtend', t('End date and time'), '', t('Example: YYYY-MM-DD HH:mm')];
|
||||
$dtstart = ['dtstart', t('Start date and time')];
|
||||
$dtend = ['dtend', t('End date and time')];
|
||||
$description = ['description', t('Description')];
|
||||
$location = ['location', t('Location')];
|
||||
|
||||
@ -920,6 +943,7 @@ class Cdav extends Controller {
|
||||
'$sources' => $sources,
|
||||
'$color' => $color,
|
||||
'$lang' => App::$language,
|
||||
'$timezone' => App::$timezone,
|
||||
'$first_day' => $first_day,
|
||||
'$prev' => t('Previous'),
|
||||
'$next' => t('Next'),
|
||||
@ -952,10 +976,12 @@ class Cdav extends Controller {
|
||||
//Provide json data for calendar
|
||||
if(argc() == 5 && argv(1) === 'calendar' && argv(2) === 'json' && intval(argv(3)) && intval(argv(4))) {
|
||||
|
||||
$events = [];
|
||||
|
||||
$id = [argv(3), argv(4)];
|
||||
|
||||
if(! cdav_perms($id[0],$calendars))
|
||||
killme();
|
||||
json_return_and_die($events);
|
||||
|
||||
if (x($_GET,'start'))
|
||||
$start = new \DateTime($_GET['start']);
|
||||
@ -969,16 +995,19 @@ class Cdav extends Controller {
|
||||
$filters['comp-filters'][0]['time-range']['end'] = $end;
|
||||
|
||||
$uris = $caldavBackend->calendarQuery($id, $filters);
|
||||
|
||||
if($uris) {
|
||||
|
||||
$objects = $caldavBackend->getMultipleCalendarObjects($id, $uris);
|
||||
|
||||
foreach($objects as $object) {
|
||||
|
||||
$vcalendar = \Sabre\VObject\Reader::read($object['calendardata']);
|
||||
|
||||
if(isset($vcalendar->VEVENT->RRULE))
|
||||
if(isset($vcalendar->VEVENT->RRULE)) {
|
||||
// expanding recurrent events seems to loose timezone info
|
||||
// save it here so we can add it later
|
||||
$recurrent_timezone = (string)$vcalendar->VEVENT->DTSTART['TZID'];
|
||||
$vcalendar = $vcalendar->expand($start, $end);
|
||||
}
|
||||
|
||||
foreach($vcalendar->VEVENT as $vevent) {
|
||||
$title = (string)$vevent->SUMMARY;
|
||||
@ -986,14 +1015,15 @@ class Cdav extends Controller {
|
||||
$dtend = (string)$vevent->DTEND;
|
||||
$description = (string)$vevent->DESCRIPTION;
|
||||
$location = (string)$vevent->LOCATION;
|
||||
|
||||
$timezone = (string)$vevent->DTSTART['TZID'];
|
||||
$rw = ((cdav_perms($id[0],$calendars,true)) ? true : false);
|
||||
$editable = $rw ? true : false;
|
||||
$recurrent = ((isset($vevent->{'RECURRENCE-ID'})) ? true : false);
|
||||
|
||||
$editable = $rw ? true : false;
|
||||
|
||||
if($recurrent)
|
||||
if($recurrent) {
|
||||
$editable = false;
|
||||
$timezone = $recurrent_timezone;
|
||||
}
|
||||
|
||||
$allDay = false;
|
||||
|
||||
@ -1007,8 +1037,8 @@ class Cdav extends Controller {
|
||||
'calendar_id' => $id,
|
||||
'uri' => $object['uri'],
|
||||
'title' => $title,
|
||||
'start' => $dtstart,
|
||||
'end' => $dtend,
|
||||
'start' => datetime_convert($timezone, $timezone, $dtstart, 'c'),
|
||||
'end' => (($dtend) ? datetime_convert($timezone, $timezone, $dtend, 'c') : ''),
|
||||
'description' => $description,
|
||||
'location' => $location,
|
||||
'allDay' => $allDay,
|
||||
@ -1018,11 +1048,8 @@ class Cdav extends Controller {
|
||||
];
|
||||
}
|
||||
}
|
||||
json_return_and_die($events);
|
||||
}
|
||||
else {
|
||||
killme();
|
||||
}
|
||||
json_return_and_die($events);
|
||||
}
|
||||
|
||||
//enable/disable calendars
|
||||
|
@ -129,7 +129,7 @@ class Cover_photo extends \Zotlabs\Web\Controller {
|
||||
if(file_exists($tmp_name)) {
|
||||
$base_image = $r[0];
|
||||
$gis = getimagesize($tmp_name);
|
||||
logger('gis: ' . print_r($gis,true));
|
||||
logger('gis: ' . print_r($gis,true), LOGGER_DEBUG);
|
||||
$base_image['width'] = $gis[0];
|
||||
$base_image['height'] = $gis[1];
|
||||
$base_image['content'] = @file_get_contents($tmp_name);
|
||||
@ -190,25 +190,18 @@ logger('gis: ' . print_r($gis,true));
|
||||
'filename' => $base_image['filename'],
|
||||
'album' => t('Cover Photos'),
|
||||
'os_path' => $base_image['os_path'],
|
||||
'display_path' => $base_image['display_path']
|
||||
'display_path' => $base_image['display_path'],
|
||||
'photo_usage' => PHOTO_COVER
|
||||
];
|
||||
|
||||
$p['imgscale'] = 7;
|
||||
$p['photo_usage'] = PHOTO_COVER;
|
||||
|
||||
$r1 = $im->save($p);
|
||||
|
||||
$r1 = $im->storeThumbnail($p, PHOTO_RES_COVER_1200);
|
||||
|
||||
$im->doScaleImage(850,310);
|
||||
$p['imgscale'] = 8;
|
||||
|
||||
$r2 = $im->save($p);
|
||||
|
||||
$r2 = $im->storeThumbnail($p, PHOTO_RES_COVER_850);
|
||||
|
||||
$im->doScaleImage(425,160);
|
||||
$p['imgscale'] = 9;
|
||||
|
||||
$r3 = $im->save($p);
|
||||
|
||||
$r3 = $im->storeThumbnail($p, PHOTO_RES_COVER_425);
|
||||
|
||||
if($r1 === false || $r2 === false || $r3 === false) {
|
||||
// if one failed, delete them all so we can start over.
|
||||
notice( t('Image resize failed.') . EOL );
|
||||
@ -216,6 +209,17 @@ logger('gis: ' . print_r($gis,true));
|
||||
dbesc($base_image['resource_id']),
|
||||
local_channel()
|
||||
);
|
||||
|
||||
$x = q("SELECT content FROM photo WHERE resource_id = '%s' AND uid = %d AND os_storage = 1 AND imgscale >= 7",
|
||||
dbesc($base_image['resource_id']),
|
||||
local_channel()
|
||||
);
|
||||
if($x) {
|
||||
foreach($x as $xx) {
|
||||
@unlink(dbunescbin($xx['content']));
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -35,7 +35,6 @@ class Getfile extends \Zotlabs\Web\Controller {
|
||||
$sig = $_POST['signature'];
|
||||
$resource = $_POST['resource'];
|
||||
$revision = intval($_POST['revision']);
|
||||
$resolution = (-1);
|
||||
|
||||
if(! $hash)
|
||||
killme();
|
||||
@ -81,9 +80,14 @@ class Getfile extends \Zotlabs\Web\Controller {
|
||||
killme();
|
||||
}
|
||||
|
||||
if(substr($resource,-2,1) == '-') {
|
||||
if(isset($_POST['resolution']))
|
||||
$resolution = intval($_POST['resolution']);
|
||||
elseif(substr($resource,-2,1) == '-') {
|
||||
$resolution = intval(substr($resource,-1,1));
|
||||
$resource = substr($resource,0,-2);
|
||||
}
|
||||
else {
|
||||
$resolution = (-1);
|
||||
}
|
||||
|
||||
$slop = intval(get_pconfig($channel['channel_id'],'system','getfile_time_slop'));
|
||||
@ -106,9 +110,10 @@ class Getfile extends \Zotlabs\Web\Controller {
|
||||
}
|
||||
|
||||
if($resolution > 0) {
|
||||
$r = q("select * from photo where resource_id = '%s' and uid = %d limit 1",
|
||||
$r = q("SELECT * FROM photo WHERE resource_id = '%s' AND uid = %d AND imgscale = %d LIMIT 1",
|
||||
dbesc($resource),
|
||||
intval($channel['channel_id'])
|
||||
intval($channel['channel_id']),
|
||||
$resolution
|
||||
);
|
||||
if($r) {
|
||||
header('Content-type: ' . $r[0]['mimetype']);
|
||||
|
@ -119,34 +119,45 @@ class Profile_photo extends \Zotlabs\Web\Controller {
|
||||
'filename' => $base_image['filename'],
|
||||
'album' => t('Profile Photos'),
|
||||
'os_path' => $base_image['os_path'],
|
||||
'display_path' => $base_image['display_path']
|
||||
'display_path' => $base_image['display_path'],
|
||||
'photo_usage' => PHOTO_PROFILE,
|
||||
'edited' => dbescdate($base_image['edited'])
|
||||
];
|
||||
|
||||
$p['imgscale'] = PHOTO_RES_PROFILE_300;
|
||||
$p['photo_usage'] = (($is_default_profile) ? PHOTO_PROFILE : PHOTO_NORMAL);
|
||||
|
||||
$r1 = $im->save($p);
|
||||
$r1 = $im->storeThumbnail($p, PHOTO_RES_PROFILE_300);
|
||||
|
||||
$im->scaleImage(80);
|
||||
$p['imgscale'] = PHOTO_RES_PROFILE_80;
|
||||
|
||||
$r2 = $im->save($p);
|
||||
$r2 = $im->storeThumbnail($p, PHOTO_RES_PROFILE_80);
|
||||
|
||||
$im->scaleImage(48);
|
||||
$p['imgscale'] = PHOTO_RES_PROFILE_48;
|
||||
|
||||
$r3 = $im->save($p);
|
||||
|
||||
$r3 = $im->storeThumbnail($p, PHOTO_RES_PROFILE_48);
|
||||
|
||||
if($r1 === false || $r2 === false || $r3 === false) {
|
||||
// if one failed, delete them all so we can start over.
|
||||
notice( t('Image resize failed.') . EOL );
|
||||
$x = q("delete from photo where resource_id = '%s' and uid = %d and imgscale in ( %d, %d, %d ) ",
|
||||
$x = q("delete from photo where resource_id = '%s' and uid = %d and imgscale in ( %d, %d, %d )",
|
||||
dbesc($base_image['resource_id']),
|
||||
local_channel(),
|
||||
intval(PHOTO_RES_PROFILE_300),
|
||||
intval(PHOTO_RES_PROFILE_80),
|
||||
intval(PHOTO_RES_PROFILE_48)
|
||||
);
|
||||
|
||||
$x = q("SELECT content FROM photo WHERE resource_id = '%s' AND uid = %d AND os_storage = 1 AND imgscale IN ( %d, %d, %d )",
|
||||
dbesc($base_image['resource_id']),
|
||||
local_channel(),
|
||||
intval(PHOTO_RES_PROFILE_300),
|
||||
intval(PHOTO_RES_PROFILE_80),
|
||||
intval(PHOTO_RES_PROFILE_48)
|
||||
);
|
||||
if($x) {
|
||||
foreach($x as $xx) {
|
||||
@unlink(dbunescbin($xx['content']));
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -198,7 +209,7 @@ class Profile_photo extends \Zotlabs\Web\Controller {
|
||||
$r = q("UPDATE xchan set xchan_photo_mimetype = '%s', xchan_photo_date = '%s', xchan_photo_l = '%s', xchan_photo_m = '%s', xchan_photo_s = '%s'
|
||||
where xchan_hash = '%s'",
|
||||
dbesc($im->getType()),
|
||||
dbesc(datetime_convert()),
|
||||
dbescdate($base_image['edited']),
|
||||
dbesc(z_root() . '/photo/profile/l/' . $channel['channel_id']),
|
||||
dbesc(z_root() . '/photo/profile/m/' . $channel['channel_id']),
|
||||
dbesc(z_root() . '/photo/profile/s/' . $channel['channel_id']),
|
||||
@ -245,7 +256,7 @@ class Profile_photo extends \Zotlabs\Web\Controller {
|
||||
else {
|
||||
require_once('include/attach.php');
|
||||
|
||||
$res = attach_store(\App::get_channel(), get_observer_hash(), '', array('album' => t('Profile Photos'), 'hash' => $hash));
|
||||
$res = attach_store(\App::get_channel(), get_observer_hash(), '', array('album' => t('Profile Photos'), 'hash' => $hash, 'nosync' => true));
|
||||
|
||||
logger('attach_store: ' . print_r($res,true));
|
||||
}
|
||||
@ -353,20 +364,23 @@ class Profile_photo extends \Zotlabs\Web\Controller {
|
||||
|
||||
if($havescale) {
|
||||
// unset any existing profile photos
|
||||
$r = q("UPDATE photo SET photo_usage = %d WHERE photo_usage = %d AND uid = %d",
|
||||
$x = q("UPDATE photo SET photo_usage = %d WHERE photo_usage = %d AND uid = %d",
|
||||
intval(PHOTO_NORMAL),
|
||||
intval(PHOTO_PROFILE),
|
||||
intval(local_channel()));
|
||||
|
||||
$r = q("UPDATE photo SET photo_usage = %d WHERE uid = %d AND resource_id = '%s'",
|
||||
intval(local_channel())
|
||||
);
|
||||
|
||||
$edited = datetime_convert();
|
||||
|
||||
$x = q("UPDATE photo SET photo_usage = %d, edited = '%s' WHERE uid = %d AND resource_id = '%s' AND imgscale > 0",
|
||||
intval(PHOTO_PROFILE),
|
||||
dbescdate($edited),
|
||||
intval(local_channel()),
|
||||
dbesc($resource_id)
|
||||
);
|
||||
);
|
||||
|
||||
$r = q("UPDATE xchan set xchan_photo_date = '%s'
|
||||
where xchan_hash = '%s'",
|
||||
dbesc(datetime_convert()),
|
||||
$x = q("UPDATE xchan SET xchan_photo_date = '%s' WHERE xchan_hash = '%s'",
|
||||
dbescdate($edited),
|
||||
dbesc($channel['xchan_hash'])
|
||||
);
|
||||
|
||||
|
@ -448,6 +448,7 @@ abstract class PhotoDriver {
|
||||
$p['width'] = (($arr['width']) ? $arr['width'] : $this->getWidth());
|
||||
$p['height'] = (($arr['height']) ? $arr['height'] : $this->getHeight());
|
||||
$p['expires'] = (($arr['expires']) ? $arr['expires'] : gmdate('Y-m-d H:i:s', time() + get_config('system', 'photo_cache_time', 86400)));
|
||||
$p['profile'] = ((array_key_exists('profile', $arr)) ? intval($arr['profile']) : 0);
|
||||
|
||||
if(! intval($p['imgscale']))
|
||||
logger('save: ' . print_r($arr, true), LOGGER_DATA);
|
||||
@ -481,18 +482,47 @@ abstract class PhotoDriver {
|
||||
allow_gid = '%s',
|
||||
deny_cid = '%s',
|
||||
deny_gid = '%s',
|
||||
expires = '%s'
|
||||
expires = '%s',
|
||||
profile = %d
|
||||
where id = %d",
|
||||
intval($p['aid']), intval($p['uid']), dbesc($p['xchan']), dbesc($p['resource_id']), dbescdate($p['created']), dbescdate($p['edited']), dbesc(basename($p['filename'])), dbesc($p['mimetype']), dbesc($p['album']), intval($p['height']), intval($p['width']), (intval($p['os_storage']) ? dbescbin($p['os_syspath']) : dbescbin($this->imageString())), intval($p['os_storage']), (intval($p['os_storage']) ? @filesize($p['os_syspath']) : strlen($this->imageString())), intval($p['imgscale']), intval($p['photo_usage']), dbesc($p['title']), dbesc($p['description']), dbesc($p['os_path']), dbesc($p['display_path']), dbesc($p['allow_cid']), dbesc($p['allow_gid']), dbesc($p['deny_cid']), dbesc($p['deny_gid']), dbescdate($p['expires']), intval($x[0]['id']));
|
||||
intval($p['aid']), intval($p['uid']), dbesc($p['xchan']), dbesc($p['resource_id']), dbescdate($p['created']), dbescdate($p['edited']), dbesc(basename($p['filename'])), dbesc($p['mimetype']), dbesc($p['album']), intval($p['height']), intval($p['width']), (intval($p['os_storage']) ? dbescbin($p['os_syspath']) : dbescbin($this->imageString())), intval($p['os_storage']), (intval($p['os_storage']) ? @filesize($p['os_syspath']) : strlen($this->imageString())), intval($p['imgscale']), intval($p['photo_usage']), dbesc($p['title']), dbesc($p['description']), dbesc($p['os_path']), dbesc($p['display_path']), dbesc($p['allow_cid']), dbesc($p['allow_gid']), dbesc($p['deny_cid']), dbesc($p['deny_gid']), dbescdate($p['expires']), intval($p['profile']), intval($x[0]['id']));
|
||||
} else {
|
||||
$p['created'] = (($arr['created']) ? $arr['created'] : $p['edited']);
|
||||
$r = q("INSERT INTO photo
|
||||
( aid, uid, xchan, resource_id, created, edited, filename, mimetype, album, height, width, content, os_storage, filesize, imgscale, photo_usage, title, description, os_path, display_path, allow_cid, allow_gid, deny_cid, deny_gid, expires )
|
||||
VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', %d, %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' )", intval($p['aid']), intval($p['uid']), dbesc($p['xchan']), dbesc($p['resource_id']), dbescdate($p['created']), dbescdate($p['edited']), dbesc(basename($p['filename'])), dbesc($p['mimetype']), dbesc($p['album']), intval($p['height']), intval($p['width']), (intval($p['os_storage']) ? dbescbin($p['os_syspath']) : dbescbin($this->imageString())), intval($p['os_storage']), (intval($p['os_storage']) ? @filesize($p['os_syspath']) : strlen($this->imageString())), intval($p['imgscale']), intval($p['photo_usage']), dbesc($p['title']), dbesc($p['description']), dbesc($p['os_path']), dbesc($p['display_path']), dbesc($p['allow_cid']), dbesc($p['allow_gid']), dbesc($p['deny_cid']), dbesc($p['deny_gid']), dbescdate($p['expires']));
|
||||
( aid, uid, xchan, resource_id, created, edited, filename, mimetype, album, height, width, content, os_storage, filesize, imgscale, photo_usage, title, description, os_path, display_path, allow_cid, allow_gid, deny_cid, deny_gid, expires, profile )
|
||||
VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', %d, %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d)", intval($p['aid']), intval($p['uid']), dbesc($p['xchan']), dbesc($p['resource_id']), dbescdate($p['created']), dbescdate($p['edited']), dbesc(basename($p['filename'])), dbesc($p['mimetype']), dbesc($p['album']), intval($p['height']), intval($p['width']), (intval($p['os_storage']) ? dbescbin($p['os_syspath']) : dbescbin($this->imageString())), intval($p['os_storage']), (intval($p['os_storage']) ? @filesize($p['os_syspath']) : strlen($this->imageString())), intval($p['imgscale']), intval($p['photo_usage']), dbesc($p['title']), dbesc($p['description']), dbesc($p['os_path']), dbesc($p['display_path']), dbesc($p['allow_cid']), dbesc($p['allow_gid']), dbesc($p['deny_cid']), dbesc($p['deny_gid']), dbescdate($p['expires']), intval($p['profile']));
|
||||
}
|
||||
logger('Photo save imgscale ' . $p['imgscale'] . ' returned ' . intval($r));
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Stores thumbnail to database or filesystem.
|
||||
*
|
||||
* @param array $arr
|
||||
* @param scale int
|
||||
* @return boolean|array
|
||||
*/
|
||||
public function storeThumbnail($arr, $scale = 0) {
|
||||
|
||||
$arr['imgscale'] = $scale;
|
||||
|
||||
if(boolval(get_config('system','filesystem_storage_thumbnails', 0)) && $scale > 0) {
|
||||
$channel = \App::get_channel();
|
||||
$arr['os_storage'] = 1;
|
||||
$arr['os_syspath'] = 'store/' . $channel['channel_address'] . '/' . $arr['os_path'] . '-' . $scale;
|
||||
if(! $this->saveImage($arr['os_syspath']))
|
||||
return false;
|
||||
}
|
||||
|
||||
if(! $this->save($arr)) {
|
||||
if(array_key_exists('os_syspath', $arr))
|
||||
@unlink($arr['os_syspath']);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
2
boot.php
2
boot.php
@ -50,7 +50,7 @@ require_once('include/attach.php');
|
||||
require_once('include/bbcode.php');
|
||||
|
||||
define ( 'PLATFORM_NAME', 'hubzilla' );
|
||||
define ( 'STD_VERSION', '4.1.1' );
|
||||
define ( 'STD_VERSION', '4.1.2' );
|
||||
define ( 'ZOT_REVISION', '6.0a' );
|
||||
|
||||
define ( 'DB_UPDATE_VERSION', 1231 );
|
||||
|
@ -1521,6 +1521,17 @@ function attach_drop_photo($channel_id,$resource) {
|
||||
if($x) {
|
||||
drop_item($x[0]['id'],false,(($x[0]['item_hidden']) ? DROPITEM_NORMAL : DROPITEM_PHASE1),true);
|
||||
}
|
||||
|
||||
$r = q("SELECT content FROM photo WHERE resource_id = '%s' AND uid = %d AND os_storage = 1",
|
||||
dbesc($resource),
|
||||
intval($channel_id)
|
||||
);
|
||||
if($r) {
|
||||
foreach($r as $i) {
|
||||
@unlink(dbunescbin($i['content']));
|
||||
}
|
||||
}
|
||||
|
||||
q("DELETE FROM photo WHERE uid = %d AND resource_id = '%s'",
|
||||
intval($channel_id),
|
||||
dbesc($resource)
|
||||
|
@ -19,7 +19,7 @@ class dba_pdo extends dba_driver {
|
||||
$this->driver_dbtype = $scheme;
|
||||
|
||||
if(strpbrk($server,':;')) {
|
||||
$dsn = $server;
|
||||
$dsn = $this->driver_dbtype . ':unix_socket=' . trim($server, ':;');
|
||||
}
|
||||
else {
|
||||
$dsn = $this->driver_dbtype . ':host=' . $server . (intval($port) ? ';port=' . $port : '');
|
||||
|
@ -1345,6 +1345,7 @@ function sync_files($channel, $files) {
|
||||
logger('attachment store failed',LOGGER_NORMAL,LOG_ERR);
|
||||
}
|
||||
if($f['photo']) {
|
||||
|
||||
foreach($f['photo'] as $p) {
|
||||
unset($p['id']);
|
||||
$p['aid'] = $channel['channel_account_id'];
|
||||
@ -1366,6 +1367,7 @@ function sync_files($channel, $files) {
|
||||
dbesc($p['resource_id']),
|
||||
intval($channel['channel_id'])
|
||||
);
|
||||
$update_xchan = $p['edited'];
|
||||
}
|
||||
|
||||
// same for cover photos
|
||||
@ -1385,19 +1387,20 @@ function sync_files($channel, $files) {
|
||||
else
|
||||
$p['content'] = (($p['content'])? base64_decode($p['content']) : '');
|
||||
|
||||
if(intval($p['imgscale']) && (! $p['content'])) {
|
||||
if(intval($p['imgscale']) && (! empty($p['content']))) {
|
||||
|
||||
$time = datetime_convert();
|
||||
|
||||
$parr = array('hash' => $channel['channel_hash'],
|
||||
$parr = array(
|
||||
'hash' => $channel['channel_hash'],
|
||||
'time' => $time,
|
||||
'resource' => $att['hash'],
|
||||
'resource' => $p['resource_id'],
|
||||
'revision' => 0,
|
||||
'signature' => base64url_encode(rsa_sign($channel['channel_hash'] . '.' . $time, $channel['channel_prvkey'])),
|
||||
'resolution' => $p['imgscale']
|
||||
'resolution' => intval($p['imgscale'])
|
||||
);
|
||||
|
||||
$stored_image = $newfname . '-' . intval($p['imgscale']);
|
||||
$stored_image = $newfname . '-' . $p['imgscale'];
|
||||
|
||||
$fp = fopen($stored_image,'w');
|
||||
if(! $fp) {
|
||||
@ -1406,7 +1409,6 @@ function sync_files($channel, $files) {
|
||||
}
|
||||
$redirects = 0;
|
||||
|
||||
|
||||
$headers = [];
|
||||
$headers['Accept'] = 'application/x-zot+json' ;
|
||||
$headers['Sigtoken'] = random_string();
|
||||
@ -1414,8 +1416,18 @@ function sync_files($channel, $files) {
|
||||
|
||||
$x = z_post_url($fetch_url,$parr,$redirects,[ 'filep' => $fp, 'headers' => $headers]);
|
||||
fclose($fp);
|
||||
$p['content'] = file_get_contents($stored_image);
|
||||
unlink($stored_image);
|
||||
|
||||
// Override remote hub thumbnails storage settings
|
||||
if(! boolval(get_config('system','filesystem_storage_thumbnails', 0))) {
|
||||
$p['os_storage'] = 0;
|
||||
$p['content'] = file_get_contents($stored_image);
|
||||
@unlink($stored_image);
|
||||
}
|
||||
else {
|
||||
$p['os_storage'] = 1;
|
||||
$p['content'] = $stored_image;
|
||||
$p['os_syspath'] = $stored_image;
|
||||
}
|
||||
}
|
||||
|
||||
if(!isset($p['display_path']))
|
||||
@ -1447,6 +1459,16 @@ function sync_files($channel, $files) {
|
||||
create_table_from_array('photo',$p, [ 'content' ] );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Set xchan photo date to prevent thumbnails fetch for clones on profile update packet recieve
|
||||
if(isset($update_xchan)) {
|
||||
|
||||
$x = q("UPDATE xchan SET xchan_photo_date = '%s' WHERE xchan_hash = '%s'",
|
||||
dbescdate($update_xchan),
|
||||
dbesc($channel['channel_hash'])
|
||||
);
|
||||
}
|
||||
|
||||
\Zotlabs\Daemon\Master::Summon([ 'Thumbnail' , $att['hash'] ]);
|
||||
|
@ -277,8 +277,7 @@ function photo_upload($channel, $observer, $args) {
|
||||
if(($width > 1024 || $height > 1024) && (! $errors))
|
||||
$ph->scaleImage(1024);
|
||||
|
||||
$p['imgscale'] = 1;
|
||||
$r1 = $ph->save($p);
|
||||
$r1 = $ph->storeThumbnail($p, PHOTO_RES_1024);
|
||||
$link[1] = array(
|
||||
'rel' => 'alternate',
|
||||
'type' => 'text/html',
|
||||
@ -292,8 +291,7 @@ function photo_upload($channel, $observer, $args) {
|
||||
if(($width > 640 || $height > 640) && (! $errors))
|
||||
$ph->scaleImage(640);
|
||||
|
||||
$p['imgscale'] = 2;
|
||||
$r2 = $ph->save($p);
|
||||
$r2 = $ph->storeThumbnail($p, PHOTO_RES_640);
|
||||
$link[2] = array(
|
||||
'rel' => 'alternate',
|
||||
'type' => 'text/html',
|
||||
@ -307,8 +305,7 @@ function photo_upload($channel, $observer, $args) {
|
||||
if(($width > 320 || $height > 320) && (! $errors))
|
||||
$ph->scaleImage(320);
|
||||
|
||||
$p['imgscale'] = 3;
|
||||
$r3 = $ph->save($p);
|
||||
$r3 = $ph->storeThumbnail($p, PHOTO_RES_320);
|
||||
$link[3] = array(
|
||||
'rel' => 'alternate',
|
||||
'type' => 'text/html',
|
||||
|
@ -925,46 +925,62 @@ function import_xchan($arr, $ud_flags = UPDATE_FLAGS_UPDATED, $ud_arr = null) {
|
||||
$local = q("select channel_account_id, channel_id from channel where channel_hash = '%s' limit 1",
|
||||
dbesc($xchan_hash)
|
||||
);
|
||||
|
||||
if($local) {
|
||||
// @FIXME This should be removed in future when profile photo update by file sync procedure will be applied
|
||||
// on most hubs in the network
|
||||
// <---
|
||||
$ph = z_fetch_url($arr['photo'], true);
|
||||
|
||||
if($ph['success']) {
|
||||
|
||||
// Do not fetch already received thumbnails
|
||||
$x = q("SELECT resource_id FROM photo WHERE uid = %d AND imgscale = %d AND filesize = %d LIMIT 1",
|
||||
intval($local[0]['channel_id']),
|
||||
intval(PHOTO_RES_PROFILE_300),
|
||||
strlen($ph['body'])
|
||||
);
|
||||
|
||||
$hash = import_channel_photo($ph['body'], $arr['photo_mimetype'], $local[0]['channel_account_id'], $local[0]['channel_id']);
|
||||
if($x)
|
||||
$hash = $x[0]['resource_id'];
|
||||
else
|
||||
$hash = import_channel_photo($ph['body'], $arr['photo_mimetype'], $local[0]['channel_account_id'], $local[0]['channel_id']);
|
||||
}
|
||||
|
||||
if($hash) {
|
||||
// unless proven otherwise
|
||||
$is_default_profile = 1;
|
||||
|
||||
if($hash) {
|
||||
// unless proven otherwise
|
||||
$is_default_profile = 1;
|
||||
$profile = q("select is_default from profile where aid = %d and uid = %d limit 1",
|
||||
intval($local[0]['channel_account_id']),
|
||||
intval($local[0]['channel_id'])
|
||||
);
|
||||
if($profile) {
|
||||
if(! intval($profile[0]['is_default']))
|
||||
$is_default_profile = 0;
|
||||
}
|
||||
|
||||
$profile = q("select is_default from profile where aid = %d and uid = %d limit 1",
|
||||
// If setting for the default profile, unset the profile photo flag from any other photos I own
|
||||
if($is_default_profile) {
|
||||
q("UPDATE photo SET photo_usage = %d WHERE photo_usage = %d AND resource_id != '%s' AND aid = %d AND uid = %d",
|
||||
intval(PHOTO_NORMAL),
|
||||
intval(PHOTO_PROFILE),
|
||||
dbesc($hash),
|
||||
intval($local[0]['channel_account_id']),
|
||||
intval($local[0]['channel_id'])
|
||||
);
|
||||
if($profile) {
|
||||
if(! intval($profile[0]['is_default']))
|
||||
$is_default_profile = 0;
|
||||
}
|
||||
|
||||
// If setting for the default profile, unset the profile photo flag from any other photos I own
|
||||
if($is_default_profile) {
|
||||
q("UPDATE photo SET photo_usage = %d WHERE photo_usage = %d AND resource_id != '%s' AND aid = %d AND uid = %d",
|
||||
intval(PHOTO_NORMAL),
|
||||
intval(PHOTO_PROFILE),
|
||||
dbesc($hash),
|
||||
intval($local[0]['channel_account_id']),
|
||||
intval($local[0]['channel_id'])
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// reset the names in case they got messed up when we had a bug in this function
|
||||
$photos = array(
|
||||
z_root() . '/photo/profile/l/' . $local[0]['channel_id'],
|
||||
z_root() . '/photo/profile/m/' . $local[0]['channel_id'],
|
||||
z_root() . '/photo/profile/s/' . $local[0]['channel_id'],
|
||||
$arr['photo_mimetype'],
|
||||
false
|
||||
);
|
||||
}
|
||||
// --->
|
||||
|
||||
// reset the names in case they got messed up when we had a bug in this function
|
||||
$photos = array(
|
||||
z_root() . '/photo/profile/l/' . $local[0]['channel_id'],
|
||||
z_root() . '/photo/profile/m/' . $local[0]['channel_id'],
|
||||
z_root() . '/photo/profile/s/' . $local[0]['channel_id'],
|
||||
$arr['photo_mimetype'],
|
||||
false
|
||||
);
|
||||
}
|
||||
else {
|
||||
$photos = import_xchan_photo($arr['photo'], $xchan_hash);
|
||||
|
@ -175,7 +175,7 @@ encounter a database configuration which cannot be expressed on the setup form
|
||||
(for instance using MySQL with an unusual socket location); you can supply
|
||||
the PDO connection string as the database hostname. For instance
|
||||
|
||||
mysql:unix_socket=/my/special/socket_path
|
||||
:/path/to/socket.file
|
||||
|
||||
You should still fill in all other applicable form values as needed.
|
||||
|
||||
|
@ -12,7 +12,7 @@
|
||||
|
||||
// Then set the following for your MySQL installation
|
||||
|
||||
$db_host = 'your.mysqlhost.com'; // Use 'localhost' if you aren't using a remote server
|
||||
$db_host = 'your.mysqlhost.com'; // Use 'localhost' or ':/path/to/socket.file' if you aren't using a remote server
|
||||
$db_port = 0; // leave 0 for default or set your port
|
||||
$db_user = 'mysqlusername';
|
||||
$db_pass = 'mysqlpassword';
|
||||
|
20
library/fullcalendar.old/LICENSE.txt
Normal file
20
library/fullcalendar.old/LICENSE.txt
Normal file
@ -0,0 +1,20 @@
|
||||
Copyright (c) 2015 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.
|
1377
library/fullcalendar/CHANGELOG.md
Normal file
1377
library/fullcalendar/CHANGELOG.md
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,4 @@
|
||||
Copyright (c) 2015 Adam Shaw
|
||||
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
|
||||
|
109
library/fullcalendar/demos/background-events.html
Normal file
109
library/fullcalendar/demos/background-events.html
Normal file
@ -0,0 +1,109 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset='utf-8' />
|
||||
<link href='../packages/core/main.css' rel='stylesheet' />
|
||||
<link href='../packages/daygrid/main.css' rel='stylesheet' />
|
||||
<link href='../packages/timegrid/main.css' rel='stylesheet' />
|
||||
<link href='../packages/list/main.css' rel='stylesheet' />
|
||||
<script src='../packages/core/main.js'></script>
|
||||
<script src='../packages/interaction/main.js'></script>
|
||||
<script src='../packages/daygrid/main.js'></script>
|
||||
<script src='../packages/timegrid/main.js'></script>
|
||||
<script src='../packages/list/main.js'></script>
|
||||
<script>
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var calendarEl = document.getElementById('calendar');
|
||||
|
||||
var calendar = new FullCalendar.Calendar(calendarEl, {
|
||||
plugins: [ 'interaction', 'dayGrid', 'timeGrid', 'list' ],
|
||||
header: {
|
||||
left: 'prev,next today',
|
||||
center: 'title',
|
||||
right: 'dayGridMonth,timeGridWeek,timeGridDay,listMonth'
|
||||
},
|
||||
defaultDate: '2019-04-12',
|
||||
navLinks: true, // can click day/week names to navigate views
|
||||
businessHours: true, // display business hours
|
||||
editable: true,
|
||||
events: [
|
||||
{
|
||||
title: 'Business Lunch',
|
||||
start: '2019-04-03T13:00:00',
|
||||
constraint: 'businessHours'
|
||||
},
|
||||
{
|
||||
title: 'Meeting',
|
||||
start: '2019-04-13T11:00:00',
|
||||
constraint: 'availableForMeeting', // defined below
|
||||
color: '#257e4a'
|
||||
},
|
||||
{
|
||||
title: 'Conference',
|
||||
start: '2019-04-18',
|
||||
end: '2019-04-20'
|
||||
},
|
||||
{
|
||||
title: 'Party',
|
||||
start: '2019-04-29T20:00:00'
|
||||
},
|
||||
|
||||
// areas where "Meeting" must be dropped
|
||||
{
|
||||
groupId: 'availableForMeeting',
|
||||
start: '2019-04-11T10:00:00',
|
||||
end: '2019-04-11T16:00:00',
|
||||
rendering: 'background'
|
||||
},
|
||||
{
|
||||
groupId: 'availableForMeeting',
|
||||
start: '2019-04-13T10:00:00',
|
||||
end: '2019-04-13T16:00:00',
|
||||
rendering: 'background'
|
||||
},
|
||||
|
||||
// red areas where no events can be dropped
|
||||
{
|
||||
start: '2019-04-24',
|
||||
end: '2019-04-28',
|
||||
overlap: false,
|
||||
rendering: 'background',
|
||||
color: '#ff9f89'
|
||||
},
|
||||
{
|
||||
start: '2019-04-06',
|
||||
end: '2019-04-08',
|
||||
overlap: false,
|
||||
rendering: 'background',
|
||||
color: '#ff9f89'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
calendar.render();
|
||||
});
|
||||
|
||||
</script>
|
||||
<style>
|
||||
|
||||
body {
|
||||
margin: 40px 10px;
|
||||
padding: 0;
|
||||
font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
#calendar {
|
||||
max-width: 900px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id='calendar'></div>
|
||||
|
||||
</body>
|
||||
</html>
|
109
library/fullcalendar/demos/daygrid-views.html
Normal file
109
library/fullcalendar/demos/daygrid-views.html
Normal file
@ -0,0 +1,109 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset='utf-8' />
|
||||
<link href='../packages/core/main.css' rel='stylesheet' />
|
||||
<link href='../packages/daygrid/main.css' rel='stylesheet' />
|
||||
<script src='../packages/core/main.js'></script>
|
||||
<script src='../packages/interaction/main.js'></script>
|
||||
<script src='../packages/daygrid/main.js'></script>
|
||||
<script>
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var calendarEl = document.getElementById('calendar');
|
||||
|
||||
var calendar = new FullCalendar.Calendar(calendarEl, {
|
||||
plugins: [ 'interaction', 'dayGrid' ],
|
||||
header: {
|
||||
left: 'prevYear,prev,next,nextYear today',
|
||||
center: 'title',
|
||||
right: 'dayGridMonth,dayGridWeek,dayGridDay'
|
||||
},
|
||||
defaultDate: '2019-04-12',
|
||||
navLinks: true, // can click day/week names to navigate views
|
||||
editable: true,
|
||||
eventLimit: true, // allow "more" link when too many events
|
||||
events: [
|
||||
{
|
||||
title: 'All Day Event',
|
||||
start: '2019-04-01'
|
||||
},
|
||||
{
|
||||
title: 'Long Event',
|
||||
start: '2019-04-07',
|
||||
end: '2019-04-10'
|
||||
},
|
||||
{
|
||||
groupId: 999,
|
||||
title: 'Repeating Event',
|
||||
start: '2019-04-09T16:00:00'
|
||||
},
|
||||
{
|
||||
groupId: 999,
|
||||
title: 'Repeating Event',
|
||||
start: '2019-04-16T16:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Conference',
|
||||
start: '2019-04-11',
|
||||
end: '2019-04-13'
|
||||
},
|
||||
{
|
||||
title: 'Meeting',
|
||||
start: '2019-04-12T10:30:00',
|
||||
end: '2019-04-12T12:30:00'
|
||||
},
|
||||
{
|
||||
title: 'Lunch',
|
||||
start: '2019-04-12T12:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Meeting',
|
||||
start: '2019-04-12T14:30:00'
|
||||
},
|
||||
{
|
||||
title: 'Happy Hour',
|
||||
start: '2019-04-12T17:30:00'
|
||||
},
|
||||
{
|
||||
title: 'Dinner',
|
||||
start: '2019-04-12T20:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Birthday Party',
|
||||
start: '2019-04-13T07:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Click for Google',
|
||||
url: 'http://google.com/',
|
||||
start: '2019-04-28'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
calendar.render();
|
||||
});
|
||||
|
||||
</script>
|
||||
<style>
|
||||
|
||||
body {
|
||||
margin: 40px 10px;
|
||||
padding: 0;
|
||||
font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
#calendar {
|
||||
max-width: 900px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id='calendar'></div>
|
||||
|
||||
</body>
|
||||
</html>
|
103
library/fullcalendar/demos/default.html
Normal file
103
library/fullcalendar/demos/default.html
Normal file
@ -0,0 +1,103 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset='utf-8' />
|
||||
<link href='../packages/core/main.css' rel='stylesheet' />
|
||||
<link href='../packages/daygrid/main.css' rel='stylesheet' />
|
||||
<script src='../packages/core/main.js'></script>
|
||||
<script src='../packages/interaction/main.js'></script>
|
||||
<script src='../packages/daygrid/main.js'></script>
|
||||
<script>
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var calendarEl = document.getElementById('calendar');
|
||||
|
||||
var calendar = new FullCalendar.Calendar(calendarEl, {
|
||||
plugins: [ 'interaction', 'dayGrid' ],
|
||||
defaultDate: '2019-04-12',
|
||||
editable: true,
|
||||
eventLimit: true, // allow "more" link when too many events
|
||||
events: [
|
||||
{
|
||||
title: 'All Day Event',
|
||||
start: '2019-04-01'
|
||||
},
|
||||
{
|
||||
title: 'Long Event',
|
||||
start: '2019-04-07',
|
||||
end: '2019-04-10'
|
||||
},
|
||||
{
|
||||
groupId: 999,
|
||||
title: 'Repeating Event',
|
||||
start: '2019-04-09T16:00:00'
|
||||
},
|
||||
{
|
||||
groupId: 999,
|
||||
title: 'Repeating Event',
|
||||
start: '2019-04-16T16:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Conference',
|
||||
start: '2019-04-11',
|
||||
end: '2019-04-13'
|
||||
},
|
||||
{
|
||||
title: 'Meeting',
|
||||
start: '2019-04-12T10:30:00',
|
||||
end: '2019-04-12T12:30:00'
|
||||
},
|
||||
{
|
||||
title: 'Lunch',
|
||||
start: '2019-04-12T12:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Meeting',
|
||||
start: '2019-04-12T14:30:00'
|
||||
},
|
||||
{
|
||||
title: 'Happy Hour',
|
||||
start: '2019-04-12T17:30:00'
|
||||
},
|
||||
{
|
||||
title: 'Dinner',
|
||||
start: '2019-04-12T20:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Birthday Party',
|
||||
start: '2019-04-13T07:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Click for Google',
|
||||
url: 'http://google.com/',
|
||||
start: '2019-04-28'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
calendar.render();
|
||||
});
|
||||
|
||||
</script>
|
||||
<style>
|
||||
|
||||
body {
|
||||
margin: 40px 10px;
|
||||
padding: 0;
|
||||
font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
#calendar {
|
||||
max-width: 900px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id='calendar'></div>
|
||||
|
||||
</body>
|
||||
</html>
|
75
library/fullcalendar/demos/external-dragging-2cals.html
Normal file
75
library/fullcalendar/demos/external-dragging-2cals.html
Normal file
@ -0,0 +1,75 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset='utf-8' />
|
||||
<link href='../packages/core/main.css' rel='stylesheet' />
|
||||
<link href='../packages/daygrid/main.css' rel='stylesheet' />
|
||||
<script src='../packages/core/main.js'></script>
|
||||
<script src='../packages/interaction/main.js'></script>
|
||||
<script src='../packages/daygrid/main.js'></script>
|
||||
<script>
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var srcCalendarEl = document.getElementById('source-calendar');
|
||||
var destCalendarEl = document.getElementById('destination-calendar');
|
||||
|
||||
var srcCalendar = new FullCalendar.Calendar(srcCalendarEl, {
|
||||
plugins: [ 'interaction', 'dayGrid' ],
|
||||
editable: true,
|
||||
defaultDate: '2019-04-12',
|
||||
events: [
|
||||
{
|
||||
title: 'event1',
|
||||
start: '2019-04-11T10:00:00',
|
||||
end: '2019-04-11T16:00:00'
|
||||
},
|
||||
{
|
||||
title: 'event2',
|
||||
start: '2019-04-13T10:00:00',
|
||||
end: '2019-04-13T16:00:00'
|
||||
}
|
||||
],
|
||||
eventLeave: function(info) {
|
||||
console.log('event left!', info.event);
|
||||
}
|
||||
});
|
||||
|
||||
var destCalendar = new FullCalendar.Calendar(destCalendarEl, {
|
||||
plugins: [ 'interaction', 'dayGrid' ],
|
||||
defaultDate: '2019-04-12',
|
||||
editable: true,
|
||||
droppable: true, // will let it receive events!
|
||||
eventReceive: function(info) {
|
||||
console.log('event received!', info.event);
|
||||
}
|
||||
});
|
||||
|
||||
srcCalendar.render();
|
||||
destCalendar.render();
|
||||
});
|
||||
|
||||
</script>
|
||||
<style>
|
||||
|
||||
body {
|
||||
margin: 20px 0 0 20px;
|
||||
font-size: 14px;
|
||||
font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
|
||||
}
|
||||
|
||||
#source-calendar,
|
||||
#destination-calendar {
|
||||
float: left;
|
||||
width: 600px;
|
||||
margin: 0 20px 20px 0;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id='source-calendar'></div>
|
||||
<div id='destination-calendar'></div>
|
||||
|
||||
</body>
|
||||
</html>
|
149
library/fullcalendar/demos/external-dragging-builtin.html
Normal file
149
library/fullcalendar/demos/external-dragging-builtin.html
Normal file
@ -0,0 +1,149 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset='utf-8' />
|
||||
<link href='../packages/core/main.css' rel='stylesheet' />
|
||||
<link href='../packages/daygrid/main.css' rel='stylesheet' />
|
||||
<link href='../packages/timegrid/main.css' rel='stylesheet' />
|
||||
<link href='../packages/list/main.css' rel='stylesheet' />
|
||||
<script src='../packages/core/main.js'></script>
|
||||
<script src='../packages/interaction/main.js'></script>
|
||||
<script src='../packages/daygrid/main.js'></script>
|
||||
<script src='../packages/timegrid/main.js'></script>
|
||||
<script src='../packages/list/main.js'></script>
|
||||
<script>
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var Calendar = FullCalendar.Calendar;
|
||||
var Draggable = FullCalendarInteraction.Draggable
|
||||
|
||||
/* initialize the external events
|
||||
-----------------------------------------------------------------*/
|
||||
|
||||
var containerEl = document.getElementById('external-events-list');
|
||||
new Draggable(containerEl, {
|
||||
itemSelector: '.fc-event',
|
||||
eventData: function(eventEl) {
|
||||
return {
|
||||
title: eventEl.innerText.trim()
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
//// the individual way to do it
|
||||
// var containerEl = document.getElementById('external-events-list');
|
||||
// var eventEls = Array.prototype.slice.call(
|
||||
// containerEl.querySelectorAll('.fc-event')
|
||||
// );
|
||||
// eventEls.forEach(function(eventEl) {
|
||||
// new Draggable(eventEl, {
|
||||
// eventData: {
|
||||
// title: eventEl.innerText.trim(),
|
||||
// }
|
||||
// });
|
||||
// });
|
||||
|
||||
/* initialize the calendar
|
||||
-----------------------------------------------------------------*/
|
||||
|
||||
var calendarEl = document.getElementById('calendar');
|
||||
var calendar = new Calendar(calendarEl, {
|
||||
plugins: [ 'interaction', 'dayGrid', 'timeGrid', 'list' ],
|
||||
header: {
|
||||
left: 'prev,next today',
|
||||
center: 'title',
|
||||
right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
|
||||
},
|
||||
editable: true,
|
||||
droppable: true, // this allows things to be dropped onto the calendar
|
||||
drop: function(arg) {
|
||||
// is the "remove after drop" checkbox checked?
|
||||
if (document.getElementById('drop-remove').checked) {
|
||||
// if so, remove the element from the "Draggable Events" list
|
||||
arg.draggedEl.parentNode.removeChild(arg.draggedEl);
|
||||
}
|
||||
}
|
||||
});
|
||||
calendar.render();
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
<style>
|
||||
|
||||
body {
|
||||
margin-top: 40px;
|
||||
font-size: 14px;
|
||||
font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
|
||||
}
|
||||
|
||||
#wrap {
|
||||
width: 1100px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
#external-events {
|
||||
float: left;
|
||||
width: 150px;
|
||||
padding: 0 10px;
|
||||
border: 1px solid #ccc;
|
||||
background: #eee;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
#external-events h4 {
|
||||
font-size: 16px;
|
||||
margin-top: 0;
|
||||
padding-top: 1em;
|
||||
}
|
||||
|
||||
#external-events .fc-event {
|
||||
margin: 10px 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#external-events p {
|
||||
margin: 1.5em 0;
|
||||
font-size: 11px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
#external-events p input {
|
||||
margin: 0;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#calendar {
|
||||
float: right;
|
||||
width: 900px;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id='wrap'>
|
||||
|
||||
<div id='external-events'>
|
||||
<h4>Draggable Events</h4>
|
||||
|
||||
<div id='external-events-list'>
|
||||
<div class='fc-event'>My Event 1</div>
|
||||
<div class='fc-event'>My Event 2</div>
|
||||
<div class='fc-event'>My Event 3</div>
|
||||
<div class='fc-event'>My Event 4</div>
|
||||
<div class='fc-event'>My Event 5</div>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
<input type='checkbox' id='drop-remove' />
|
||||
<label for='drop-remove'>remove after drop</label>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id='calendar'></div>
|
||||
|
||||
<div style='clear:both'></div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
129
library/fullcalendar/demos/full-height.html
Normal file
129
library/fullcalendar/demos/full-height.html
Normal file
@ -0,0 +1,129 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset='utf-8' />
|
||||
<link href='../packages/core/main.css' rel='stylesheet' />
|
||||
<link href='../packages/daygrid/main.css' rel='stylesheet' />
|
||||
<link href='../packages/timegrid/main.css' rel='stylesheet' />
|
||||
<link href='../packages/list/main.css' rel='stylesheet' />
|
||||
<script src='../packages/core/main.js'></script>
|
||||
<script src='../packages/interaction/main.js'></script>
|
||||
<script src='../packages/daygrid/main.js'></script>
|
||||
<script src='../packages/timegrid/main.js'></script>
|
||||
<script src='../packages/list/main.js'></script>
|
||||
<script>
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var calendarEl = document.getElementById('calendar');
|
||||
|
||||
var calendar = new FullCalendar.Calendar(calendarEl, {
|
||||
plugins: [ 'interaction', 'dayGrid', 'timeGrid', 'list' ],
|
||||
height: 'parent',
|
||||
header: {
|
||||
left: 'prev,next today',
|
||||
center: 'title',
|
||||
right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
|
||||
},
|
||||
defaultView: 'dayGridMonth',
|
||||
defaultDate: '2019-04-12',
|
||||
navLinks: true, // can click day/week names to navigate views
|
||||
editable: true,
|
||||
eventLimit: true, // allow "more" link when too many events
|
||||
events: [
|
||||
{
|
||||
title: 'All Day Event',
|
||||
start: '2019-04-01',
|
||||
},
|
||||
{
|
||||
title: 'Long Event',
|
||||
start: '2019-04-07',
|
||||
end: '2019-04-10'
|
||||
},
|
||||
{
|
||||
groupId: 999,
|
||||
title: 'Repeating Event',
|
||||
start: '2019-04-09T16:00:00'
|
||||
},
|
||||
{
|
||||
groupId: 999,
|
||||
title: 'Repeating Event',
|
||||
start: '2019-04-16T16:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Conference',
|
||||
start: '2019-04-11',
|
||||
end: '2019-04-13'
|
||||
},
|
||||
{
|
||||
title: 'Meeting',
|
||||
start: '2019-04-12T10:30:00',
|
||||
end: '2019-04-12T12:30:00'
|
||||
},
|
||||
{
|
||||
title: 'Lunch',
|
||||
start: '2019-04-12T12:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Meeting',
|
||||
start: '2019-04-12T14:30:00'
|
||||
},
|
||||
{
|
||||
title: 'Happy Hour',
|
||||
start: '2019-04-12T17:30:00'
|
||||
},
|
||||
{
|
||||
title: 'Dinner',
|
||||
start: '2019-04-12T20:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Birthday Party',
|
||||
start: '2019-04-13T07:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Click for Google',
|
||||
url: 'http://google.com/',
|
||||
start: '2019-04-28'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
calendar.render();
|
||||
});
|
||||
|
||||
</script>
|
||||
<style>
|
||||
|
||||
html, body {
|
||||
overflow: hidden; /* don't do scrollbars */
|
||||
font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
#calendar-container {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
.fc-header-toolbar {
|
||||
/*
|
||||
the calendar will be butting up against the edges,
|
||||
but let's scoot in the header's buttons
|
||||
*/
|
||||
padding-top: 1em;
|
||||
padding-left: 1em;
|
||||
padding-right: 1em;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id='calendar-container'>
|
||||
<div id='calendar'></div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
86
library/fullcalendar/demos/google-calendar.html
Normal file
86
library/fullcalendar/demos/google-calendar.html
Normal file
@ -0,0 +1,86 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset='utf-8' />
|
||||
<link href='../packages/core/main.css' rel='stylesheet' />
|
||||
<link href='../packages/daygrid/main.css' rel='stylesheet' />
|
||||
<link href='../packages/list/main.css' rel='stylesheet' />
|
||||
<script src='../packages/core/main.js'></script>
|
||||
<script src='../packages/interaction/main.js'></script>
|
||||
<script src='../packages/daygrid/main.js'></script>
|
||||
<script src='../packages/list/main.js'></script>
|
||||
<script src='../packages/google-calendar/main.js'></script>
|
||||
<script>
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var calendarEl = document.getElementById('calendar');
|
||||
|
||||
var calendar = new FullCalendar.Calendar(calendarEl, {
|
||||
|
||||
plugins: [ 'interaction', 'dayGrid', 'list', 'googleCalendar' ],
|
||||
|
||||
header: {
|
||||
left: 'prev,next today',
|
||||
center: 'title',
|
||||
right: 'dayGridMonth,listYear'
|
||||
},
|
||||
|
||||
displayEventTime: false, // don't show the time column in list view
|
||||
|
||||
// THIS KEY WON'T WORK IN PRODUCTION!!!
|
||||
// To make your own Google API key, follow the directions here:
|
||||
// http://fullcalendar.io/docs/google_calendar/
|
||||
googleCalendarApiKey: 'AIzaSyDcnW6WejpTOCffshGDDb4neIrXVUA1EAE',
|
||||
|
||||
// US Holidays
|
||||
events: 'en.usa#holiday@group.v.calendar.google.com',
|
||||
|
||||
eventClick: function(arg) {
|
||||
// opens events in a popup window
|
||||
window.open(arg.event.url, 'google-calendar-event', 'width=700,height=600');
|
||||
|
||||
arg.jsEvent.preventDefault() // don't navigate in main tab
|
||||
},
|
||||
|
||||
loading: function(bool) {
|
||||
document.getElementById('loading').style.display =
|
||||
bool ? 'block' : 'none';
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
calendar.render();
|
||||
});
|
||||
|
||||
</script>
|
||||
<style>
|
||||
|
||||
body {
|
||||
margin: 40px 10px;
|
||||
padding: 0;
|
||||
font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
#loading {
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
right: 10px;
|
||||
}
|
||||
|
||||
#calendar {
|
||||
max-width: 900px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id='loading'>loading...</div>
|
||||
|
||||
<div id='calendar'></div>
|
||||
|
||||
</body>
|
||||
</html>
|
141
library/fullcalendar/demos/js/theme-chooser.js
Normal file
141
library/fullcalendar/demos/js/theme-chooser.js
Normal file
@ -0,0 +1,141 @@
|
||||
|
||||
function initThemeChooser(settings) {
|
||||
var isInitialized = false;
|
||||
var currentThemeSystem; // don't set this directly. use setThemeSystem
|
||||
var currentStylesheetEl;
|
||||
var loadingEl = document.getElementById('loading');
|
||||
var systemSelectEl = document.querySelector('#theme-system-selector select');
|
||||
var themeSelectWrapEls = Array.prototype.slice.call( // convert to real array
|
||||
document.querySelectorAll('.selector[data-theme-system]')
|
||||
);
|
||||
|
||||
systemSelectEl.addEventListener('change', function() {
|
||||
setThemeSystem(this.value);
|
||||
});
|
||||
|
||||
setThemeSystem(systemSelectEl.value);
|
||||
|
||||
themeSelectWrapEls.forEach(function(themeSelectWrapEl) {
|
||||
var themeSelectEl = themeSelectWrapEl.querySelector('select');
|
||||
|
||||
themeSelectWrapEl.addEventListener('change', function() {
|
||||
setTheme(
|
||||
currentThemeSystem,
|
||||
themeSelectEl.options[themeSelectEl.selectedIndex].value
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
function setThemeSystem(themeSystem) {
|
||||
var selectedTheme;
|
||||
|
||||
currentThemeSystem = themeSystem;
|
||||
|
||||
themeSelectWrapEls.forEach(function(themeSelectWrapEl) {
|
||||
var themeSelectEl = themeSelectWrapEl.querySelector('select');
|
||||
|
||||
if (themeSelectWrapEl.getAttribute('data-theme-system') === themeSystem) {
|
||||
selectedTheme = themeSelectEl.options[themeSelectEl.selectedIndex].value;
|
||||
themeSelectWrapEl.style.display = 'inline-block';
|
||||
} else {
|
||||
themeSelectWrapEl.style.display = 'none';
|
||||
}
|
||||
});
|
||||
|
||||
setTheme(themeSystem, selectedTheme);
|
||||
}
|
||||
|
||||
|
||||
function setTheme(themeSystem, themeName) {
|
||||
var stylesheetUrl = generateStylesheetUrl(themeSystem, themeName);
|
||||
var stylesheetEl;
|
||||
|
||||
function done() {
|
||||
if (!isInitialized) {
|
||||
isInitialized = true;
|
||||
settings.init(themeSystem);
|
||||
}
|
||||
else {
|
||||
settings.change(themeSystem);
|
||||
}
|
||||
|
||||
showCredits(themeSystem, themeName);
|
||||
}
|
||||
|
||||
if (stylesheetUrl) {
|
||||
stylesheetEl = document.createElement('link');
|
||||
stylesheetEl.setAttribute('rel', 'stylesheet');
|
||||
stylesheetEl.setAttribute('href', stylesheetUrl);
|
||||
document.querySelector('head').appendChild(stylesheetEl);
|
||||
|
||||
loadingEl.style.display = 'inline';
|
||||
|
||||
whenStylesheetLoaded(stylesheetEl, function() {
|
||||
if (currentStylesheetEl) {
|
||||
currentStylesheetEl.parentNode.removeChild(currentStylesheetEl);
|
||||
}
|
||||
currentStylesheetEl = stylesheetEl;
|
||||
loadingEl.style.display = 'none';
|
||||
done();
|
||||
});
|
||||
} else {
|
||||
if (currentStylesheetEl) {
|
||||
currentStylesheetEl.parentNode.removeChild(currentStylesheetEl);
|
||||
currentStylesheetEl = null
|
||||
}
|
||||
done();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function generateStylesheetUrl(themeSystem, themeName) {
|
||||
if (themeSystem === 'bootstrap') {
|
||||
if (themeName) {
|
||||
return 'https://bootswatch.com/4/' + themeName + '/bootstrap.min.css';
|
||||
}
|
||||
else { // the default bootstrap theme
|
||||
return 'https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function showCredits(themeSystem, themeName) {
|
||||
var creditId;
|
||||
|
||||
if (themeSystem.match('bootstrap')) {
|
||||
if (themeName) {
|
||||
creditId = 'bootstrap-custom';
|
||||
}
|
||||
else {
|
||||
creditId = 'bootstrap-standard';
|
||||
}
|
||||
}
|
||||
|
||||
Array.prototype.slice.call( // convert to real array
|
||||
document.querySelectorAll('.credits')
|
||||
).forEach(function(creditEl) {
|
||||
if (creditEl.getAttribute('data-credit-id') === creditId) {
|
||||
creditEl.style.display = 'block';
|
||||
} else {
|
||||
creditEl.style.display = 'none';
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
function whenStylesheetLoaded(linkNode, callback) {
|
||||
var isReady = false;
|
||||
|
||||
function ready() {
|
||||
if (!isReady) { // avoid double-call
|
||||
isReady = true;
|
||||
callback();
|
||||
}
|
||||
}
|
||||
|
||||
linkNode.onload = ready; // does not work cross-browser
|
||||
setTimeout(ready, 2000); // max wait. also handles browsers that don't support onload
|
||||
}
|
||||
}
|
93
library/fullcalendar/demos/json.html
Normal file
93
library/fullcalendar/demos/json.html
Normal file
@ -0,0 +1,93 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset='utf-8' />
|
||||
<link href='../packages/core/main.css' rel='stylesheet' />
|
||||
<link href='../packages/daygrid/main.css' rel='stylesheet' />
|
||||
<link href='../packages/timegrid/main.css' rel='stylesheet' />
|
||||
<link href='../packages/list/main.css' rel='stylesheet' />
|
||||
<script src='../packages/core/main.js'></script>
|
||||
<script src='../packages/interaction/main.js'></script>
|
||||
<script src='../packages/daygrid/main.js'></script>
|
||||
<script src='../packages/timegrid/main.js'></script>
|
||||
<script src='../packages/list/main.js'></script>
|
||||
<script>
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var calendarEl = document.getElementById('calendar');
|
||||
|
||||
var calendar = new FullCalendar.Calendar(calendarEl, {
|
||||
plugins: [ 'interaction', 'dayGrid', 'timeGrid', 'list' ],
|
||||
header: {
|
||||
left: 'prev,next today',
|
||||
center: 'title',
|
||||
right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
|
||||
},
|
||||
defaultDate: '2019-04-12',
|
||||
editable: true,
|
||||
navLinks: true, // can click day/week names to navigate views
|
||||
eventLimit: true, // allow "more" link when too many events
|
||||
events: {
|
||||
url: 'php/get-events.php',
|
||||
failure: function() {
|
||||
document.getElementById('script-warning').style.display = 'block'
|
||||
}
|
||||
},
|
||||
loading: function(bool) {
|
||||
document.getElementById('loading').style.display =
|
||||
bool ? 'block' : 'none';
|
||||
}
|
||||
});
|
||||
|
||||
calendar.render();
|
||||
});
|
||||
|
||||
</script>
|
||||
<style>
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
#script-warning {
|
||||
display: none;
|
||||
background: #eee;
|
||||
border-bottom: 1px solid #ddd;
|
||||
padding: 0 10px;
|
||||
line-height: 40px;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
font-size: 12px;
|
||||
color: red;
|
||||
}
|
||||
|
||||
#loading {
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
right: 10px;
|
||||
}
|
||||
|
||||
#calendar {
|
||||
max-width: 900px;
|
||||
margin: 40px auto;
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id='script-warning'>
|
||||
<code>php/get-events.php</code> must be running.
|
||||
</div>
|
||||
|
||||
<div id='loading'>loading...</div>
|
||||
|
||||
<div id='calendar'></div>
|
||||
|
||||
</body>
|
||||
</html>
|
56
library/fullcalendar/demos/json/events.json
Normal file
56
library/fullcalendar/demos/json/events.json
Normal file
@ -0,0 +1,56 @@
|
||||
[
|
||||
{
|
||||
"title": "All Day Event",
|
||||
"start": "2019-04-01"
|
||||
},
|
||||
{
|
||||
"title": "Long Event",
|
||||
"start": "2019-04-07",
|
||||
"end": "2019-04-10"
|
||||
},
|
||||
{
|
||||
"id": "999",
|
||||
"title": "Repeating Event",
|
||||
"start": "2019-04-09T16:00:00-05:00"
|
||||
},
|
||||
{
|
||||
"id": "999",
|
||||
"title": "Repeating Event",
|
||||
"start": "2019-04-16T16:00:00-05:00"
|
||||
},
|
||||
{
|
||||
"title": "Conference",
|
||||
"start": "2019-04-11",
|
||||
"end": "2019-04-13"
|
||||
},
|
||||
{
|
||||
"title": "Meeting",
|
||||
"start": "2019-04-12T10:30:00-05:00",
|
||||
"end": "2019-04-12T12:30:00-05:00"
|
||||
},
|
||||
{
|
||||
"title": "Lunch",
|
||||
"start": "2019-04-12T12:00:00-05:00"
|
||||
},
|
||||
{
|
||||
"title": "Meeting",
|
||||
"start": "2019-04-12T14:30:00-05:00"
|
||||
},
|
||||
{
|
||||
"title": "Happy Hour",
|
||||
"start": "2019-04-12T17:30:00-05:00"
|
||||
},
|
||||
{
|
||||
"title": "Dinner",
|
||||
"start": "2019-04-12T20:00:00"
|
||||
},
|
||||
{
|
||||
"title": "Birthday Party",
|
||||
"start": "2019-04-13T07:00:00-05:00"
|
||||
},
|
||||
{
|
||||
"title": "Click for Google",
|
||||
"url": "http://google.com/",
|
||||
"start": "2019-04-28"
|
||||
}
|
||||
]
|
118
library/fullcalendar/demos/list-views.html
Normal file
118
library/fullcalendar/demos/list-views.html
Normal file
@ -0,0 +1,118 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset='utf-8' />
|
||||
<link href='../packages/core/main.css' rel='stylesheet' />
|
||||
<link href='../packages/list/main.css' rel='stylesheet' />
|
||||
<script src='../packages/core/main.js'></script>
|
||||
<script src='../packages/list/main.js'></script>
|
||||
<script>
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var calendarEl = document.getElementById('calendar');
|
||||
|
||||
var calendar = new FullCalendar.Calendar(calendarEl, {
|
||||
plugins: [ 'list' ],
|
||||
|
||||
header: {
|
||||
left: 'prev,next today',
|
||||
center: 'title',
|
||||
right: 'listDay,listWeek,dayGridMonth'
|
||||
},
|
||||
|
||||
// customize the button names,
|
||||
// otherwise they'd all just say "list"
|
||||
views: {
|
||||
listDay: { buttonText: 'list day' },
|
||||
listWeek: { buttonText: 'list week' }
|
||||
},
|
||||
|
||||
defaultView: 'listWeek',
|
||||
defaultDate: '2019-04-12',
|
||||
navLinks: true, // can click day/week names to navigate views
|
||||
editable: true,
|
||||
eventLimit: true, // allow "more" link when too many events
|
||||
events: [
|
||||
{
|
||||
title: 'All Day Event',
|
||||
start: '2019-04-01'
|
||||
},
|
||||
{
|
||||
title: 'Long Event',
|
||||
start: '2019-04-07',
|
||||
end: '2019-04-10'
|
||||
},
|
||||
{
|
||||
groupId: 999,
|
||||
title: 'Repeating Event',
|
||||
start: '2019-04-09T16:00:00'
|
||||
},
|
||||
{
|
||||
groupId: 999,
|
||||
title: 'Repeating Event',
|
||||
start: '2019-04-16T16:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Conference',
|
||||
start: '2019-04-11',
|
||||
end: '2019-04-13'
|
||||
},
|
||||
{
|
||||
title: 'Meeting',
|
||||
start: '2019-04-12T10:30:00',
|
||||
end: '2019-04-12T12:30:00'
|
||||
},
|
||||
{
|
||||
title: 'Lunch',
|
||||
start: '2019-04-12T12:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Meeting',
|
||||
start: '2019-04-12T14:30:00'
|
||||
},
|
||||
{
|
||||
title: 'Happy Hour',
|
||||
start: '2019-04-12T17:30:00'
|
||||
},
|
||||
{
|
||||
title: 'Dinner',
|
||||
start: '2019-04-12T20:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Birthday Party',
|
||||
start: '2019-04-13T07:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Click for Google',
|
||||
url: 'http://google.com/',
|
||||
start: '2019-04-28'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
calendar.render();
|
||||
});
|
||||
|
||||
</script>
|
||||
<style>
|
||||
|
||||
body {
|
||||
margin: 40px 10px;
|
||||
padding: 0;
|
||||
font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
#calendar {
|
||||
max-width: 900px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id='calendar'></div>
|
||||
|
||||
</body>
|
||||
</html>
|
152
library/fullcalendar/demos/locales.html
Normal file
152
library/fullcalendar/demos/locales.html
Normal file
@ -0,0 +1,152 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset='utf-8' />
|
||||
<link href='../packages/core/main.css' rel='stylesheet' />
|
||||
<link href='../packages/daygrid/main.css' rel='stylesheet' />
|
||||
<link href='../packages/timegrid/main.css' rel='stylesheet' />
|
||||
<link href='../packages/list/main.css' rel='stylesheet' />
|
||||
<script src='../packages/core/main.js'></script>
|
||||
<script src='../packages/core/locales-all.js'></script>
|
||||
<script src='../packages/interaction/main.js'></script>
|
||||
<script src='../packages/daygrid/main.js'></script>
|
||||
<script src='../packages/timegrid/main.js'></script>
|
||||
<script src='../packages/list/main.js'></script>
|
||||
<script>
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var initialLocaleCode = 'en';
|
||||
var localeSelectorEl = document.getElementById('locale-selector');
|
||||
var calendarEl = document.getElementById('calendar');
|
||||
|
||||
var calendar = new FullCalendar.Calendar(calendarEl, {
|
||||
plugins: [ 'interaction', 'dayGrid', 'timeGrid', 'list' ],
|
||||
header: {
|
||||
left: 'prev,next today',
|
||||
center: 'title',
|
||||
right: 'dayGridMonth,timeGridWeek,timeGridDay,listMonth'
|
||||
},
|
||||
defaultDate: '2019-04-12',
|
||||
locale: initialLocaleCode,
|
||||
buttonIcons: false, // show the prev/next text
|
||||
weekNumbers: true,
|
||||
navLinks: true, // can click day/week names to navigate views
|
||||
editable: true,
|
||||
eventLimit: true, // allow "more" link when too many events
|
||||
events: [
|
||||
{
|
||||
title: 'All Day Event',
|
||||
start: '2019-04-01'
|
||||
},
|
||||
{
|
||||
title: 'Long Event',
|
||||
start: '2019-04-07',
|
||||
end: '2019-04-10'
|
||||
},
|
||||
{
|
||||
groupId: 999,
|
||||
title: 'Repeating Event',
|
||||
start: '2019-04-09T16:00:00'
|
||||
},
|
||||
{
|
||||
groupId: 999,
|
||||
title: 'Repeating Event',
|
||||
start: '2019-04-16T16:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Conference',
|
||||
start: '2019-04-11',
|
||||
end: '2019-04-13'
|
||||
},
|
||||
{
|
||||
title: 'Meeting',
|
||||
start: '2019-04-12T10:30:00',
|
||||
end: '2019-04-12T12:30:00'
|
||||
},
|
||||
{
|
||||
title: 'Lunch',
|
||||
start: '2019-04-12T12:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Meeting',
|
||||
start: '2019-04-12T14:30:00'
|
||||
},
|
||||
{
|
||||
title: 'Happy Hour',
|
||||
start: '2019-04-12T17:30:00'
|
||||
},
|
||||
{
|
||||
title: 'Dinner',
|
||||
start: '2019-04-12T20:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Birthday Party',
|
||||
start: '2019-04-13T07:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Click for Google',
|
||||
url: 'http://google.com/',
|
||||
start: '2019-04-28'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
calendar.render();
|
||||
|
||||
// build the locale selector's options
|
||||
calendar.getAvailableLocaleCodes().forEach(function(localeCode) {
|
||||
var optionEl = document.createElement('option');
|
||||
optionEl.value = localeCode;
|
||||
optionEl.selected = localeCode == initialLocaleCode;
|
||||
optionEl.innerText = localeCode;
|
||||
localeSelectorEl.appendChild(optionEl);
|
||||
});
|
||||
|
||||
// when the selected option changes, dynamically change the calendar option
|
||||
localeSelectorEl.addEventListener('change', function() {
|
||||
if (this.value) {
|
||||
calendar.setOption('locale', this.value);
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
<style>
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
#top {
|
||||
background: #eee;
|
||||
border-bottom: 1px solid #ddd;
|
||||
padding: 0 10px;
|
||||
line-height: 40px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
#calendar {
|
||||
max-width: 900px;
|
||||
margin: 40px auto;
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id='top'>
|
||||
|
||||
Locales:
|
||||
<select id='locale-selector'></select>
|
||||
|
||||
</div>
|
||||
|
||||
<div id='calendar'></div>
|
||||
|
||||
</body>
|
||||
</html>
|
50
library/fullcalendar/demos/php/get-events.php
Normal file
50
library/fullcalendar/demos/php/get-events.php
Normal file
@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
// This script reads event data from a JSON file and outputs those events which are within the range
|
||||
// supplied by the "start" and "end" GET parameters.
|
||||
//
|
||||
// An optional "timeZone" GET parameter will force all ISO8601 date stings to a given timeZone.
|
||||
//
|
||||
// Requires PHP 5.2.0 or higher.
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
// Require our Event class and datetime utilities
|
||||
require dirname(__FILE__) . '/utils.php';
|
||||
|
||||
// Short-circuit if the client did not give us a date range.
|
||||
if (!isset($_GET['start']) || !isset($_GET['end'])) {
|
||||
die("Please provide a date range.");
|
||||
}
|
||||
|
||||
// Parse the start/end parameters.
|
||||
// These are assumed to be ISO8601 strings with no time nor timeZone, like "2013-12-29".
|
||||
// Since no timeZone will be present, they will parsed as UTC.
|
||||
$range_start = parseDateTime($_GET['start']);
|
||||
$range_end = parseDateTime($_GET['end']);
|
||||
|
||||
// Parse the timeZone parameter if it is present.
|
||||
$timeZone = null;
|
||||
if (isset($_GET['timeZone'])) {
|
||||
$timeZone = new DateTimeZone($_GET['timeZone']);
|
||||
}
|
||||
|
||||
// Read and parse our events JSON file into an array of event data arrays.
|
||||
$json = file_get_contents(dirname(__FILE__) . '/../json/events.json');
|
||||
$input_arrays = json_decode($json, true);
|
||||
|
||||
// Accumulate an output array of event data arrays.
|
||||
$output_arrays = array();
|
||||
foreach ($input_arrays as $array) {
|
||||
|
||||
// Convert the input array into a useful Event object
|
||||
$event = new Event($array, $timeZone);
|
||||
|
||||
// If the event is in-bounds, add it to the output
|
||||
if ($event->isWithinDayRange($range_start, $range_end)) {
|
||||
$output_arrays[] = $event->toArray();
|
||||
}
|
||||
}
|
||||
|
||||
// Send JSON to the client.
|
||||
echo json_encode($output_arrays);
|
9
library/fullcalendar/demos/php/get-time-zones.php
Normal file
9
library/fullcalendar/demos/php/get-time-zones.php
Normal file
@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
// This script outputs a JSON array of all timezones (like "America/Chicago") that PHP supports.
|
||||
//
|
||||
// Requires PHP 5.2.0 or higher.
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
echo json_encode(DateTimeZone::listIdentifiers());
|
130
library/fullcalendar/demos/php/utils.php
Normal file
130
library/fullcalendar/demos/php/utils.php
Normal file
@ -0,0 +1,130 @@
|
||||
<?php
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
// Utilities for our event-fetching scripts.
|
||||
//
|
||||
// Requires PHP 5.2.0 or higher.
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
// PHP will fatal error if we attempt to use the DateTime class without this being set.
|
||||
date_default_timezone_set('UTC');
|
||||
|
||||
|
||||
class Event {
|
||||
|
||||
// Tests whether the given ISO8601 string has a time-of-day or not
|
||||
const ALL_DAY_REGEX = '/^\d{4}-\d\d-\d\d$/'; // matches strings like "2013-12-29"
|
||||
|
||||
public $title;
|
||||
public $allDay; // a boolean
|
||||
public $start; // a DateTime
|
||||
public $end; // a DateTime, or null
|
||||
public $properties = array(); // an array of other misc properties
|
||||
|
||||
|
||||
// Constructs an Event object from the given array of key=>values.
|
||||
// You can optionally force the timeZone of the parsed dates.
|
||||
public function __construct($array, $timeZone=null) {
|
||||
|
||||
$this->title = $array['title'];
|
||||
|
||||
if (isset($array['allDay'])) {
|
||||
// allDay has been explicitly specified
|
||||
$this->allDay = (bool)$array['allDay'];
|
||||
}
|
||||
else {
|
||||
// Guess allDay based off of ISO8601 date strings
|
||||
$this->allDay = preg_match(self::ALL_DAY_REGEX, $array['start']) &&
|
||||
(!isset($array['end']) || preg_match(self::ALL_DAY_REGEX, $array['end']));
|
||||
}
|
||||
|
||||
if ($this->allDay) {
|
||||
// If dates are allDay, we want to parse them in UTC to avoid DST issues.
|
||||
$timeZone = null;
|
||||
}
|
||||
|
||||
// Parse dates
|
||||
$this->start = parseDateTime($array['start'], $timeZone);
|
||||
$this->end = isset($array['end']) ? parseDateTime($array['end'], $timeZone) : null;
|
||||
|
||||
// Record misc properties
|
||||
foreach ($array as $name => $value) {
|
||||
if (!in_array($name, array('title', 'allDay', 'start', 'end'))) {
|
||||
$this->properties[$name] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Returns whether the date range of our event intersects with the given all-day range.
|
||||
// $rangeStart and $rangeEnd are assumed to be dates in UTC with 00:00:00 time.
|
||||
public function isWithinDayRange($rangeStart, $rangeEnd) {
|
||||
|
||||
// Normalize our event's dates for comparison with the all-day range.
|
||||
$eventStart = stripTime($this->start);
|
||||
|
||||
if (isset($this->end)) {
|
||||
$eventEnd = stripTime($this->end); // normalize
|
||||
}
|
||||
else {
|
||||
$eventEnd = $eventStart; // consider this a zero-duration event
|
||||
}
|
||||
|
||||
// Check if the two whole-day ranges intersect.
|
||||
return $eventStart < $rangeEnd && $eventEnd >= $rangeStart;
|
||||
}
|
||||
|
||||
|
||||
// Converts this Event object back to a plain data array, to be used for generating JSON
|
||||
public function toArray() {
|
||||
|
||||
// Start with the misc properties (don't worry, PHP won't affect the original array)
|
||||
$array = $this->properties;
|
||||
|
||||
$array['title'] = $this->title;
|
||||
|
||||
// Figure out the date format. This essentially encodes allDay into the date string.
|
||||
if ($this->allDay) {
|
||||
$format = 'Y-m-d'; // output like "2013-12-29"
|
||||
}
|
||||
else {
|
||||
$format = 'c'; // full ISO8601 output, like "2013-12-29T09:00:00+08:00"
|
||||
}
|
||||
|
||||
// Serialize dates into strings
|
||||
$array['start'] = $this->start->format($format);
|
||||
if (isset($this->end)) {
|
||||
$array['end'] = $this->end->format($format);
|
||||
}
|
||||
|
||||
return $array;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Date Utilities
|
||||
//----------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
// Parses a string into a DateTime object, optionally forced into the given timeZone.
|
||||
function parseDateTime($string, $timeZone=null) {
|
||||
$date = new DateTime(
|
||||
$string,
|
||||
$timeZone ? $timeZone : new DateTimeZone('UTC')
|
||||
// Used only when the string is ambiguous.
|
||||
// Ignored if string has a timeZone offset in it.
|
||||
);
|
||||
if ($timeZone) {
|
||||
// If our timeZone was ignored above, force it.
|
||||
$date->setTimezone($timeZone);
|
||||
}
|
||||
return $date;
|
||||
}
|
||||
|
||||
|
||||
// Takes the year/month/date values of the given DateTime and converts them to a new DateTime,
|
||||
// but in UTC.
|
||||
function stripTime($datetime) {
|
||||
return new DateTime($datetime->format('Y-m-d'));
|
||||
}
|
73
library/fullcalendar/demos/rrule.html
Normal file
73
library/fullcalendar/demos/rrule.html
Normal file
@ -0,0 +1,73 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset='utf-8' />
|
||||
<link href='../packages/core/main.css' rel='stylesheet' />
|
||||
<link href='../packages/daygrid/main.css' rel='stylesheet' />
|
||||
<link href='../packages/timegrid/main.css' rel='stylesheet' />
|
||||
<link href='../packages/list/main.css' rel='stylesheet' />
|
||||
<script src='../vendor/rrule.js'></script>
|
||||
<script src='../packages/core/main.js'></script>
|
||||
<script src='../packages/interaction/main.js'></script>
|
||||
<script src='../packages/daygrid/main.js'></script>
|
||||
<script src='../packages/timegrid/main.js'></script>
|
||||
<script src='../packages/list/main.js'></script>
|
||||
<script src='../packages/rrule/main.js'></script>
|
||||
<script>
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var calendarEl = document.getElementById('calendar');
|
||||
|
||||
var calendar = new FullCalendar.Calendar(calendarEl, {
|
||||
plugins: [ 'interaction', 'dayGrid', 'timeGrid', 'list', 'rrule' ],
|
||||
header: {
|
||||
left: 'prev,next today',
|
||||
center: 'title',
|
||||
right: 'dayGridMonth,timeGridWeek,timeGridDay,listMonth'
|
||||
},
|
||||
defaultDate: '2019-04-12',
|
||||
editable: true,
|
||||
events: [
|
||||
{
|
||||
title: 'rrule event',
|
||||
rrule: {
|
||||
dtstart: '2019-04-09T13:00:00',
|
||||
// until: '2019-04-01',
|
||||
freq: 'weekly'
|
||||
},
|
||||
duration: '02:00'
|
||||
}
|
||||
],
|
||||
eventClick: function(arg) {
|
||||
if (confirm('delete event?')) {
|
||||
arg.event.remove()
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
calendar.render();
|
||||
});
|
||||
|
||||
</script>
|
||||
<style>
|
||||
|
||||
body {
|
||||
margin: 40px 10px;
|
||||
padding: 0;
|
||||
font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
#calendar {
|
||||
max-width: 900px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id='calendar'></div>
|
||||
|
||||
</body>
|
||||
</html>
|
125
library/fullcalendar/demos/selectable.html
Normal file
125
library/fullcalendar/demos/selectable.html
Normal file
@ -0,0 +1,125 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset='utf-8' />
|
||||
<link href='../packages/core/main.css' rel='stylesheet' />
|
||||
<link href='../packages/daygrid/main.css' rel='stylesheet' />
|
||||
<link href='../packages/timegrid/main.css' rel='stylesheet' />
|
||||
<script src='../packages/core/main.js'></script>
|
||||
<script src='../packages/interaction/main.js'></script>
|
||||
<script src='../packages/daygrid/main.js'></script>
|
||||
<script src='../packages/timegrid/main.js'></script>
|
||||
<script>
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var calendarEl = document.getElementById('calendar');
|
||||
|
||||
var calendar = new FullCalendar.Calendar(calendarEl, {
|
||||
plugins: [ 'interaction', 'dayGrid', 'timeGrid' ],
|
||||
header: {
|
||||
left: 'prev,next today',
|
||||
center: 'title',
|
||||
right: 'dayGridMonth,timeGridWeek,timeGridDay'
|
||||
},
|
||||
defaultDate: '2019-04-12',
|
||||
navLinks: true, // can click day/week names to navigate views
|
||||
selectable: true,
|
||||
selectMirror: true,
|
||||
select: function(arg) {
|
||||
var title = prompt('Event Title:');
|
||||
if (title) {
|
||||
calendar.addEvent({
|
||||
title: title,
|
||||
start: arg.start,
|
||||
end: arg.end,
|
||||
allDay: arg.allDay
|
||||
})
|
||||
}
|
||||
calendar.unselect()
|
||||
},
|
||||
editable: true,
|
||||
eventLimit: true, // allow "more" link when too many events
|
||||
events: [
|
||||
{
|
||||
title: 'All Day Event',
|
||||
start: '2019-04-01'
|
||||
},
|
||||
{
|
||||
title: 'Long Event',
|
||||
start: '2019-04-07',
|
||||
end: '2019-04-10'
|
||||
},
|
||||
{
|
||||
groupId: 999,
|
||||
title: 'Repeating Event',
|
||||
start: '2019-04-09T16:00:00'
|
||||
},
|
||||
{
|
||||
groupId: 999,
|
||||
title: 'Repeating Event',
|
||||
start: '2019-04-16T16:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Conference',
|
||||
start: '2019-04-11',
|
||||
end: '2019-04-13'
|
||||
},
|
||||
{
|
||||
title: 'Meeting',
|
||||
start: '2019-04-12T10:30:00',
|
||||
end: '2019-04-12T12:30:00'
|
||||
},
|
||||
{
|
||||
title: 'Lunch',
|
||||
start: '2019-04-12T12:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Meeting',
|
||||
start: '2019-04-12T14:30:00'
|
||||
},
|
||||
{
|
||||
title: 'Happy Hour',
|
||||
start: '2019-04-12T17:30:00'
|
||||
},
|
||||
{
|
||||
title: 'Dinner',
|
||||
start: '2019-04-12T20:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Birthday Party',
|
||||
start: '2019-04-13T07:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Click for Google',
|
||||
url: 'http://google.com/',
|
||||
start: '2019-04-28'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
calendar.render();
|
||||
});
|
||||
|
||||
</script>
|
||||
<style>
|
||||
|
||||
body {
|
||||
margin: 40px 10px;
|
||||
padding: 0;
|
||||
font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
#calendar {
|
||||
max-width: 900px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id='calendar'></div>
|
||||
|
||||
</body>
|
||||
</html>
|
215
library/fullcalendar/demos/themes.html
Normal file
215
library/fullcalendar/demos/themes.html
Normal file
@ -0,0 +1,215 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset='utf-8' />
|
||||
<link href='https://use.fontawesome.com/releases/v5.0.6/css/all.css' rel='stylesheet'>
|
||||
<link href='../packages/core/main.css' rel='stylesheet' />
|
||||
<link href='../packages/bootstrap/main.css' rel='stylesheet' />
|
||||
<link href='../packages/timegrid/main.css' rel='stylesheet' />
|
||||
<link href='../packages/daygrid/main.css' rel='stylesheet' />
|
||||
<link href='../packages/list/main.css' rel='stylesheet' />
|
||||
<script src='../packages/core/main.js'></script>
|
||||
<script src='../packages/interaction/main.js'></script>
|
||||
<script src='../packages/bootstrap/main.js'></script>
|
||||
<script src='../packages/daygrid/main.js'></script>
|
||||
<script src='../packages/timegrid/main.js'></script>
|
||||
<script src='../packages/list/main.js'></script>
|
||||
<script src='js/theme-chooser.js'></script>
|
||||
<script>
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var calendarEl = document.getElementById('calendar');
|
||||
var calendar;
|
||||
|
||||
initThemeChooser({
|
||||
|
||||
init: function(themeSystem) {
|
||||
calendar = new FullCalendar.Calendar(calendarEl, {
|
||||
plugins: [ 'bootstrap', 'interaction', 'dayGrid', 'timeGrid', 'list' ],
|
||||
themeSystem: themeSystem,
|
||||
header: {
|
||||
left: 'prev,next today',
|
||||
center: 'title',
|
||||
right: 'dayGridMonth,timeGridWeek,timeGridDay,listMonth'
|
||||
},
|
||||
defaultDate: '2019-04-12',
|
||||
weekNumbers: true,
|
||||
navLinks: true, // can click day/week names to navigate views
|
||||
editable: true,
|
||||
eventLimit: true, // allow "more" link when too many events
|
||||
events: [
|
||||
{
|
||||
title: 'All Day Event',
|
||||
start: '2019-04-01'
|
||||
},
|
||||
{
|
||||
title: 'Long Event',
|
||||
start: '2019-04-07',
|
||||
end: '2019-04-10'
|
||||
},
|
||||
{
|
||||
groupId: 999,
|
||||
title: 'Repeating Event',
|
||||
start: '2019-04-09T16:00:00'
|
||||
},
|
||||
{
|
||||
groupId: 999,
|
||||
title: 'Repeating Event',
|
||||
start: '2019-04-16T16:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Conference',
|
||||
start: '2019-04-11',
|
||||
end: '2019-04-13'
|
||||
},
|
||||
{
|
||||
title: 'Meeting',
|
||||
start: '2019-04-12T10:30:00',
|
||||
end: '2019-04-12T12:30:00'
|
||||
},
|
||||
{
|
||||
title: 'Lunch',
|
||||
start: '2019-04-12T12:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Meeting',
|
||||
start: '2019-04-12T14:30:00'
|
||||
},
|
||||
{
|
||||
title: 'Happy Hour',
|
||||
start: '2019-04-12T17:30:00'
|
||||
},
|
||||
{
|
||||
title: 'Dinner',
|
||||
start: '2019-04-12T20:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Birthday Party',
|
||||
start: '2019-04-13T07:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Click for Google',
|
||||
url: 'http://google.com/',
|
||||
start: '2019-04-28'
|
||||
}
|
||||
]
|
||||
});
|
||||
calendar.render();
|
||||
},
|
||||
|
||||
change: function(themeSystem) {
|
||||
calendar.setOption('themeSystem', themeSystem);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
<style>
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
#top,
|
||||
#calendar.fc-unthemed {
|
||||
font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
|
||||
}
|
||||
|
||||
#top {
|
||||
background: #eee;
|
||||
border-bottom: 1px solid #ddd;
|
||||
padding: 0 10px;
|
||||
line-height: 40px;
|
||||
font-size: 12px;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
#top .selector {
|
||||
display: inline-block;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
#top select {
|
||||
font: inherit; /* mock what Boostrap does, don't compete */
|
||||
}
|
||||
|
||||
.left { float: left }
|
||||
.right { float: right }
|
||||
.clear { clear: both }
|
||||
|
||||
#calendar {
|
||||
max-width: 900px;
|
||||
margin: 40px auto;
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id='top'>
|
||||
|
||||
<div class='left'>
|
||||
|
||||
<div id='theme-system-selector' class='selector'>
|
||||
Theme System:
|
||||
|
||||
<select>
|
||||
<option value='bootstrap' selected>Bootstrap 4</option>
|
||||
<option value='standard'>unthemed</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div data-theme-system="bootstrap" class='selector' style='display:none'>
|
||||
Theme Name:
|
||||
|
||||
<select>
|
||||
<option value='' selected>Default</option>
|
||||
<option value='cerulean'>Cerulean</option>
|
||||
<option value='cosmo'>Cosmo</option>
|
||||
<option value='cyborg'>Cyborg</option>
|
||||
<option value='darkly'>Darkly</option>
|
||||
<option value='flatly'>Flatly</option>
|
||||
<option value='journal'>Journal</option>
|
||||
<option value='litera'>Litera</option>
|
||||
<option value='lumen'>Lumen</option>
|
||||
<option value='lux'>Lux</option>
|
||||
<option value='materia'>Materia</option>
|
||||
<option value='minty'>Minty</option>
|
||||
<option value='pulse'>Pulse</option>
|
||||
<option value='sandstone'>Sandstone</option>
|
||||
<option value='simplex'>Simplex</option>
|
||||
<option value='sketchy'>Sketchy</option>
|
||||
<option value='slate'>Slate</option>
|
||||
<option value='solar'>Solar</option>
|
||||
<option value='spacelab'>Spacelab</option>
|
||||
<option value='superhero'>Superhero</option>
|
||||
<option value='united'>United</option>
|
||||
<option value='yeti'>Yeti</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<span id='loading' style='display:none'>loading theme...</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div class='right'>
|
||||
<span class='credits' data-credit-id='bootstrap-standard' style='display:none'>
|
||||
<a href='https://getbootstrap.com/docs/3.3/' target='_blank'>Theme by Bootstrap</a>
|
||||
</span>
|
||||
<span class='credits' data-credit-id='bootstrap-custom' style='display:none'>
|
||||
<a href='https://bootswatch.com/' target='_blank'>Theme by Bootswatch</a>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class='clear'></div>
|
||||
</div>
|
||||
|
||||
<div id='calendar'></div>
|
||||
|
||||
</body>
|
||||
</html>
|
145
library/fullcalendar/demos/time-zones.html
Normal file
145
library/fullcalendar/demos/time-zones.html
Normal file
@ -0,0 +1,145 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset='utf-8' />
|
||||
<link href='../packages/core/main.css' rel='stylesheet' />
|
||||
<link href='../packages/daygrid/main.css' rel='stylesheet' />
|
||||
<link href='../packages/timegrid/main.css' rel='stylesheet' />
|
||||
<link href='../packages/list/main.css' rel='stylesheet' />
|
||||
<script src='../packages/core/main.js'></script>
|
||||
<script src='../packages/interaction/main.js'></script>
|
||||
<script src='../packages/daygrid/main.js'></script>
|
||||
<script src='../packages/timegrid/main.js'></script>
|
||||
<script src='../packages/list/main.js'></script>
|
||||
<script>
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var initialTimeZone = 'local';
|
||||
var timeZoneSelectorEl = document.getElementById('time-zone-selector');
|
||||
var loadingEl = document.getElementById('loading');
|
||||
var calendarEl = document.getElementById('calendar');
|
||||
|
||||
var calendar = new FullCalendar.Calendar(calendarEl, {
|
||||
plugins: [ 'interaction', 'dayGrid', 'timeGrid', 'list' ],
|
||||
timeZone: initialTimeZone,
|
||||
header: {
|
||||
left: 'prev,next today',
|
||||
center: 'title',
|
||||
right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
|
||||
},
|
||||
defaultDate: '2019-04-12',
|
||||
navLinks: true, // can click day/week names to navigate views
|
||||
editable: true,
|
||||
selectable: true,
|
||||
eventLimit: true, // allow "more" link when too many events
|
||||
events: {
|
||||
url: 'php/get-events.php',
|
||||
failure: function() {
|
||||
document.getElementById('script-warning').style.display = 'inline'; // show
|
||||
}
|
||||
},
|
||||
loading: function(bool) {
|
||||
if (bool) {
|
||||
loadingEl.style.display = 'inline'; // show
|
||||
} else {
|
||||
loadingEl.style.display = 'none'; // hide
|
||||
}
|
||||
},
|
||||
|
||||
eventTimeFormat: { hour: 'numeric', minute: '2-digit', timeZoneName: 'short' },
|
||||
|
||||
dateClick: function(arg) {
|
||||
console.log('dateClick', calendar.formatIso(arg.date));
|
||||
},
|
||||
select: function(arg) {
|
||||
console.log('select', calendar.formatIso(arg.start), calendar.formatIso(arg.end));
|
||||
}
|
||||
});
|
||||
|
||||
calendar.render();
|
||||
|
||||
// load the list of available timezones, build the <select> options
|
||||
// it's HIGHLY recommended to use a different library for network requests, not this internal util func
|
||||
FullCalendar.requestJson('GET', 'php/get-time-zones.php', {}, function(timeZones) {
|
||||
|
||||
timeZones.forEach(function(timeZone) {
|
||||
var optionEl;
|
||||
|
||||
if (timeZone !== 'UTC') { // UTC is already in the list
|
||||
optionEl = document.createElement('option');
|
||||
optionEl.value = timeZone;
|
||||
optionEl.innerText = timeZone;
|
||||
timeZoneSelectorEl.appendChild(optionEl);
|
||||
}
|
||||
});
|
||||
}, function() {
|
||||
// TODO: handle error
|
||||
});
|
||||
|
||||
// when the timezone selector changes, dynamically change the calendar option
|
||||
timeZoneSelectorEl.addEventListener('change', function() {
|
||||
calendar.setOption('timeZone', this.value);
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
<style>
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
#top {
|
||||
background: #eee;
|
||||
border-bottom: 1px solid #ddd;
|
||||
padding: 0 10px;
|
||||
line-height: 40px;
|
||||
font-size: 12px;
|
||||
}
|
||||
.left { float: left }
|
||||
.right { float: right }
|
||||
.clear { clear: both }
|
||||
|
||||
#script-warning, #loading { display: none }
|
||||
#script-warning { font-weight: bold; color: red }
|
||||
|
||||
#calendar {
|
||||
max-width: 900px;
|
||||
margin: 40px auto;
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
.tzo {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id='top'>
|
||||
|
||||
<div class='left'>
|
||||
Timezone:
|
||||
<select id='time-zone-selector'>
|
||||
<option value='local' selected>local</option>
|
||||
<option value='UTC'>UTC</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class='right'>
|
||||
<span id='loading'>loading...</span>
|
||||
<span id='script-warning'><code>php/get-events.php</code> must be running.</span>
|
||||
</div>
|
||||
|
||||
<div class='clear'></div>
|
||||
|
||||
</div>
|
||||
|
||||
<div id='calendar'></div>
|
||||
|
||||
</body>
|
||||
</html>
|
113
library/fullcalendar/demos/timegrid-views.html
Normal file
113
library/fullcalendar/demos/timegrid-views.html
Normal file
@ -0,0 +1,113 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset='utf-8' />
|
||||
<link href='../packages/core/main.css' rel='stylesheet' />
|
||||
<link href='../packages/daygrid/main.css' rel='stylesheet' />
|
||||
<link href='../packages/timegrid/main.css' rel='stylesheet' />
|
||||
<link href='../packages/list/main.css' rel='stylesheet' />
|
||||
<script src='../packages/core/main.js'></script>
|
||||
<script src='../packages/interaction/main.js'></script>
|
||||
<script src='../packages/daygrid/main.js'></script>
|
||||
<script src='../packages/timegrid/main.js'></script>
|
||||
<script src='../packages/list/main.js'></script>
|
||||
<script>
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var calendarEl = document.getElementById('calendar');
|
||||
|
||||
var calendar = new FullCalendar.Calendar(calendarEl, {
|
||||
plugins: [ 'dayGrid', 'timeGrid', 'list', 'interaction' ],
|
||||
header: {
|
||||
left: 'prev,next today',
|
||||
center: 'title',
|
||||
right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
|
||||
},
|
||||
defaultDate: '2019-04-12',
|
||||
navLinks: true, // can click day/week names to navigate views
|
||||
editable: true,
|
||||
eventLimit: true, // allow "more" link when too many events
|
||||
events: [
|
||||
{
|
||||
title: 'All Day Event',
|
||||
start: '2019-04-01',
|
||||
},
|
||||
{
|
||||
title: 'Long Event',
|
||||
start: '2019-04-07',
|
||||
end: '2019-04-10'
|
||||
},
|
||||
{
|
||||
groupId: 999,
|
||||
title: 'Repeating Event',
|
||||
start: '2019-04-09T16:00:00'
|
||||
},
|
||||
{
|
||||
groupId: 999,
|
||||
title: 'Repeating Event',
|
||||
start: '2019-04-16T16:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Conference',
|
||||
start: '2019-04-11',
|
||||
end: '2019-04-13'
|
||||
},
|
||||
{
|
||||
title: 'Meeting',
|
||||
start: '2019-04-12T10:30:00',
|
||||
end: '2019-04-12T12:30:00'
|
||||
},
|
||||
{
|
||||
title: 'Lunch',
|
||||
start: '2019-04-12T12:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Meeting',
|
||||
start: '2019-04-12T14:30:00'
|
||||
},
|
||||
{
|
||||
title: 'Happy Hour',
|
||||
start: '2019-04-12T17:30:00'
|
||||
},
|
||||
{
|
||||
title: 'Dinner',
|
||||
start: '2019-04-12T20:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Birthday Party',
|
||||
start: '2019-04-13T07:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Click for Google',
|
||||
url: 'http://google.com/',
|
||||
start: '2019-04-28'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
calendar.render();
|
||||
});
|
||||
|
||||
</script>
|
||||
<style>
|
||||
|
||||
body {
|
||||
margin: 40px 10px;
|
||||
padding: 0;
|
||||
font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
#calendar {
|
||||
max-width: 900px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id='calendar'></div>
|
||||
|
||||
</body>
|
||||
</html>
|
118
library/fullcalendar/demos/week-numbers.html
Normal file
118
library/fullcalendar/demos/week-numbers.html
Normal file
@ -0,0 +1,118 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset='utf-8' />
|
||||
<link href='../packages/core/main.css' rel='stylesheet' />
|
||||
<link href='../packages/daygrid/main.css' rel='stylesheet' />
|
||||
<link href='../packages/timegrid/main.css' rel='stylesheet' />
|
||||
<link href='../packages/list/main.css' rel='stylesheet' />
|
||||
<script src='../packages/core/main.js'></script>
|
||||
<script src='../packages/interaction/main.js'></script>
|
||||
<script src='../packages/daygrid/main.js'></script>
|
||||
<script src='../packages/timegrid/main.js'></script>
|
||||
<script src='../packages/list/main.js'></script>
|
||||
<script>
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var calendarEl = document.getElementById('calendar');
|
||||
|
||||
var calendar = new FullCalendar.Calendar(calendarEl, {
|
||||
plugins: [ 'interaction', 'dayGrid', 'timeGrid', 'list' ],
|
||||
header: {
|
||||
left: 'prev,next today',
|
||||
center: 'title',
|
||||
right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
|
||||
},
|
||||
defaultDate: '2019-04-12',
|
||||
navLinks: true, // can click day/week names to navigate views
|
||||
|
||||
weekNumbers: true,
|
||||
weekNumbersWithinDays: true,
|
||||
weekNumberCalculation: 'ISO',
|
||||
|
||||
editable: true,
|
||||
eventLimit: true, // allow "more" link when too many events
|
||||
events: [
|
||||
{
|
||||
title: 'All Day Event',
|
||||
start: '2019-04-01'
|
||||
},
|
||||
{
|
||||
title: 'Long Event',
|
||||
start: '2019-04-07',
|
||||
end: '2019-04-10'
|
||||
},
|
||||
{
|
||||
groupId: 999,
|
||||
title: 'Repeating Event',
|
||||
start: '2019-04-09T16:00:00'
|
||||
},
|
||||
{
|
||||
groupId: 999,
|
||||
title: 'Repeating Event',
|
||||
start: '2019-04-16T16:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Conference',
|
||||
start: '2019-04-11',
|
||||
end: '2019-04-13'
|
||||
},
|
||||
{
|
||||
title: 'Meeting',
|
||||
start: '2019-04-12T10:30:00',
|
||||
end: '2019-04-12T12:30:00'
|
||||
},
|
||||
{
|
||||
title: 'Lunch',
|
||||
start: '2019-04-12T12:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Meeting',
|
||||
start: '2019-04-12T14:30:00'
|
||||
},
|
||||
{
|
||||
title: 'Happy Hour',
|
||||
start: '2019-04-12T17:30:00'
|
||||
},
|
||||
{
|
||||
title: 'Dinner',
|
||||
start: '2019-04-12T20:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Birthday Party',
|
||||
start: '2019-04-13T07:00:00'
|
||||
},
|
||||
{
|
||||
title: 'Click for Google',
|
||||
url: 'http://google.com/',
|
||||
start: '2019-04-28'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
calendar.render();
|
||||
});
|
||||
|
||||
</script>
|
||||
<style>
|
||||
|
||||
body {
|
||||
margin: 40px 10px;
|
||||
padding: 0;
|
||||
font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
#calendar {
|
||||
max-width: 900px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id='calendar'></div>
|
||||
|
||||
</body>
|
||||
</html>
|
33
library/fullcalendar/packages/bootstrap/main.css
Normal file
33
library/fullcalendar/packages/bootstrap/main.css
Normal file
@ -0,0 +1,33 @@
|
||||
/*!
|
||||
FullCalendar Bootstrap Plugin v4.0.2
|
||||
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; }
|
90
library/fullcalendar/packages/bootstrap/main.js
Normal file
90
library/fullcalendar/packages/bootstrap/main.js
Normal file
@ -0,0 +1,90 @@
|
||||
/*!
|
||||
FullCalendar Bootstrap Plugin v4.0.2
|
||||
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 });
|
||||
|
||||
}));
|
5
library/fullcalendar/packages/bootstrap/main.min.css
vendored
Normal file
5
library/fullcalendar/packages/bootstrap/main.min.css
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
/*!
|
||||
FullCalendar Bootstrap Plugin v4.0.2
|
||||
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}
|
20
library/fullcalendar/packages/bootstrap/main.min.js
vendored
Normal file
20
library/fullcalendar/packages/bootstrap/main.min.js
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
/*!
|
||||
FullCalendar Bootstrap Plugin v4.0.2
|
||||
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})});
|
1353
library/fullcalendar/packages/core/locales-all.js
Normal file
1353
library/fullcalendar/packages/core/locales-all.js
Normal file
File diff suppressed because it is too large
Load Diff
6
library/fullcalendar/packages/core/locales-all.min.js
vendored
Normal file
6
library/fullcalendar/packages/core/locales-all.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
30
library/fullcalendar/packages/core/locales/af.js
Normal file
30
library/fullcalendar/packages/core/locales/af.js
Normal file
@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.af = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var af = {
|
||||
code: "af",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Vorige",
|
||||
next: "Volgende",
|
||||
today: "Vandag",
|
||||
year: "Jaar",
|
||||
month: "Maand",
|
||||
week: "Week",
|
||||
day: "Dag",
|
||||
list: "Agenda"
|
||||
},
|
||||
allDayHtml: "Heeldag",
|
||||
eventLimitText: "Addisionele",
|
||||
noEventsMessage: "Daar is geen gebeurtenisse nie"
|
||||
};
|
||||
|
||||
return af;
|
||||
|
||||
}));
|
31
library/fullcalendar/packages/core/locales/ar-dz.js
Normal file
31
library/fullcalendar/packages/core/locales/ar-dz.js
Normal file
@ -0,0 +1,31 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-dz'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var arDz = {
|
||||
code: "ar-dz",
|
||||
week: {
|
||||
dow: 0,
|
||||
doy: 4 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
dir: 'rtl',
|
||||
buttonText: {
|
||||
prev: "السابق",
|
||||
next: "التالي",
|
||||
today: "اليوم",
|
||||
month: "شهر",
|
||||
week: "أسبوع",
|
||||
day: "يوم",
|
||||
list: "أجندة"
|
||||
},
|
||||
weekLabel: "أسبوع",
|
||||
allDayText: "اليوم كله",
|
||||
eventLimitText: "أخرى",
|
||||
noEventsMessage: "أي أحداث لعرض"
|
||||
};
|
||||
|
||||
return arDz;
|
||||
|
||||
}));
|
31
library/fullcalendar/packages/core/locales/ar-kw.js
Normal file
31
library/fullcalendar/packages/core/locales/ar-kw.js
Normal file
@ -0,0 +1,31 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-kw'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var arKw = {
|
||||
code: "ar-kw",
|
||||
week: {
|
||||
dow: 0,
|
||||
doy: 12 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
dir: 'rtl',
|
||||
buttonText: {
|
||||
prev: "السابق",
|
||||
next: "التالي",
|
||||
today: "اليوم",
|
||||
month: "شهر",
|
||||
week: "أسبوع",
|
||||
day: "يوم",
|
||||
list: "أجندة"
|
||||
},
|
||||
weekLabel: "أسبوع",
|
||||
allDayText: "اليوم كله",
|
||||
eventLimitText: "أخرى",
|
||||
noEventsMessage: "أي أحداث لعرض"
|
||||
};
|
||||
|
||||
return arKw;
|
||||
|
||||
}));
|
31
library/fullcalendar/packages/core/locales/ar-ly.js
Normal file
31
library/fullcalendar/packages/core/locales/ar-ly.js
Normal file
@ -0,0 +1,31 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-ly'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var arLy = {
|
||||
code: "ar-ly",
|
||||
week: {
|
||||
dow: 6,
|
||||
doy: 12 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
dir: 'rtl',
|
||||
buttonText: {
|
||||
prev: "السابق",
|
||||
next: "التالي",
|
||||
today: "اليوم",
|
||||
month: "شهر",
|
||||
week: "أسبوع",
|
||||
day: "يوم",
|
||||
list: "أجندة"
|
||||
},
|
||||
weekLabel: "أسبوع",
|
||||
allDayText: "اليوم كله",
|
||||
eventLimitText: "أخرى",
|
||||
noEventsMessage: "أي أحداث لعرض"
|
||||
};
|
||||
|
||||
return arLy;
|
||||
|
||||
}));
|
31
library/fullcalendar/packages/core/locales/ar-ma.js
Normal file
31
library/fullcalendar/packages/core/locales/ar-ma.js
Normal file
@ -0,0 +1,31 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-ma'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var arMa = {
|
||||
code: "ar-ma",
|
||||
week: {
|
||||
dow: 6,
|
||||
doy: 12 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
dir: 'rtl',
|
||||
buttonText: {
|
||||
prev: "السابق",
|
||||
next: "التالي",
|
||||
today: "اليوم",
|
||||
month: "شهر",
|
||||
week: "أسبوع",
|
||||
day: "يوم",
|
||||
list: "أجندة"
|
||||
},
|
||||
weekLabel: "أسبوع",
|
||||
allDayText: "اليوم كله",
|
||||
eventLimitText: "أخرى",
|
||||
noEventsMessage: "أي أحداث لعرض"
|
||||
};
|
||||
|
||||
return arMa;
|
||||
|
||||
}));
|
31
library/fullcalendar/packages/core/locales/ar-sa.js
Normal file
31
library/fullcalendar/packages/core/locales/ar-sa.js
Normal file
@ -0,0 +1,31 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-sa'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var arSa = {
|
||||
code: "ar-sa",
|
||||
week: {
|
||||
dow: 0,
|
||||
doy: 6 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
dir: 'rtl',
|
||||
buttonText: {
|
||||
prev: "السابق",
|
||||
next: "التالي",
|
||||
today: "اليوم",
|
||||
month: "شهر",
|
||||
week: "أسبوع",
|
||||
day: "يوم",
|
||||
list: "أجندة"
|
||||
},
|
||||
weekLabel: "أسبوع",
|
||||
allDayText: "اليوم كله",
|
||||
eventLimitText: "أخرى",
|
||||
noEventsMessage: "أي أحداث لعرض"
|
||||
};
|
||||
|
||||
return arSa;
|
||||
|
||||
}));
|
31
library/fullcalendar/packages/core/locales/ar-tn.js
Normal file
31
library/fullcalendar/packages/core/locales/ar-tn.js
Normal file
@ -0,0 +1,31 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-tn'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var arTn = {
|
||||
code: "ar-tn",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
dir: 'rtl',
|
||||
buttonText: {
|
||||
prev: "السابق",
|
||||
next: "التالي",
|
||||
today: "اليوم",
|
||||
month: "شهر",
|
||||
week: "أسبوع",
|
||||
day: "يوم",
|
||||
list: "أجندة"
|
||||
},
|
||||
weekLabel: "أسبوع",
|
||||
allDayText: "اليوم كله",
|
||||
eventLimitText: "أخرى",
|
||||
noEventsMessage: "أي أحداث لعرض"
|
||||
};
|
||||
|
||||
return arTn;
|
||||
|
||||
}));
|
31
library/fullcalendar/packages/core/locales/ar.js
Normal file
31
library/fullcalendar/packages/core/locales/ar.js
Normal file
@ -0,0 +1,31 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ar = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var ar = {
|
||||
code: "ar",
|
||||
week: {
|
||||
dow: 6,
|
||||
doy: 12 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
dir: 'rtl',
|
||||
buttonText: {
|
||||
prev: "السابق",
|
||||
next: "التالي",
|
||||
today: "اليوم",
|
||||
month: "شهر",
|
||||
week: "أسبوع",
|
||||
day: "يوم",
|
||||
list: "أجندة"
|
||||
},
|
||||
weekLabel: "أسبوع",
|
||||
allDayText: "اليوم كله",
|
||||
eventLimitText: "أخرى",
|
||||
noEventsMessage: "أي أحداث لعرض"
|
||||
};
|
||||
|
||||
return ar;
|
||||
|
||||
}));
|
31
library/fullcalendar/packages/core/locales/bg.js
Normal file
31
library/fullcalendar/packages/core/locales/bg.js
Normal file
@ -0,0 +1,31 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.bg = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var bg = {
|
||||
code: "bg",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 7 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "назад",
|
||||
next: "напред",
|
||||
today: "днес",
|
||||
month: "Месец",
|
||||
week: "Седмица",
|
||||
day: "Ден",
|
||||
list: "График"
|
||||
},
|
||||
allDayText: "Цял ден",
|
||||
eventLimitText: function (n) {
|
||||
return "+още " + n;
|
||||
},
|
||||
noEventsMessage: "Няма събития за показване"
|
||||
};
|
||||
|
||||
return bg;
|
||||
|
||||
}));
|
32
library/fullcalendar/packages/core/locales/bs.js
Normal file
32
library/fullcalendar/packages/core/locales/bs.js
Normal file
@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.bs = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var bs = {
|
||||
code: "bs",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 7 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Prošli",
|
||||
next: "Sljedeći",
|
||||
today: "Danas",
|
||||
month: "Mjesec",
|
||||
week: "Sedmica",
|
||||
day: "Dan",
|
||||
list: "Raspored"
|
||||
},
|
||||
weekLabel: "Sed",
|
||||
allDayText: "Cijeli dan",
|
||||
eventLimitText: function (n) {
|
||||
return "+ još " + n;
|
||||
},
|
||||
noEventsMessage: "Nema događaja za prikazivanje"
|
||||
};
|
||||
|
||||
return bs;
|
||||
|
||||
}));
|
30
library/fullcalendar/packages/core/locales/ca.js
Normal file
30
library/fullcalendar/packages/core/locales/ca.js
Normal file
@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ca = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var ca = {
|
||||
code: "ca",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Anterior",
|
||||
next: "Següent",
|
||||
today: "Avui",
|
||||
month: "Mes",
|
||||
week: "Setmana",
|
||||
day: "Dia",
|
||||
list: "Agenda"
|
||||
},
|
||||
weekLabel: "Set",
|
||||
allDayText: "Tot el dia",
|
||||
eventLimitText: "més",
|
||||
noEventsMessage: "No hi ha esdeveniments per mostrar"
|
||||
};
|
||||
|
||||
return ca;
|
||||
|
||||
}));
|
32
library/fullcalendar/packages/core/locales/cs.js
Normal file
32
library/fullcalendar/packages/core/locales/cs.js
Normal file
@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.cs = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var cs = {
|
||||
code: "cs",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Dříve",
|
||||
next: "Později",
|
||||
today: "Nyní",
|
||||
month: "Měsíc",
|
||||
week: "Týden",
|
||||
day: "Den",
|
||||
list: "Agenda"
|
||||
},
|
||||
weekLabel: "Týd",
|
||||
allDayText: "Celý den",
|
||||
eventLimitText: function (n) {
|
||||
return "+další: " + n;
|
||||
},
|
||||
noEventsMessage: "Žádné akce k zobrazení"
|
||||
};
|
||||
|
||||
return cs;
|
||||
|
||||
}));
|
30
library/fullcalendar/packages/core/locales/da.js
Normal file
30
library/fullcalendar/packages/core/locales/da.js
Normal file
@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.da = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var da = {
|
||||
code: "da",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Forrige",
|
||||
next: "Næste",
|
||||
today: "Idag",
|
||||
month: "Måned",
|
||||
week: "Uge",
|
||||
day: "Dag",
|
||||
list: "Agenda"
|
||||
},
|
||||
weekLabel: "Uge",
|
||||
allDayText: "Hele dagen",
|
||||
eventLimitText: "flere",
|
||||
noEventsMessage: "Ingen arrangementer at vise"
|
||||
};
|
||||
|
||||
return da;
|
||||
|
||||
}));
|
33
library/fullcalendar/packages/core/locales/de.js
Normal file
33
library/fullcalendar/packages/core/locales/de.js
Normal file
@ -0,0 +1,33 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.de = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var de = {
|
||||
code: "de",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Zurück",
|
||||
next: "Vor",
|
||||
today: "Heute",
|
||||
year: "Jahr",
|
||||
month: "Monat",
|
||||
week: "Woche",
|
||||
day: "Tag",
|
||||
list: "Terminübersicht"
|
||||
},
|
||||
weekLabel: "KW",
|
||||
allDayText: "Ganztägig",
|
||||
eventLimitText: function (n) {
|
||||
return "+ weitere " + n;
|
||||
},
|
||||
noEventsMessage: "Keine Ereignisse anzuzeigen"
|
||||
};
|
||||
|
||||
return de;
|
||||
|
||||
}));
|
30
library/fullcalendar/packages/core/locales/el.js
Normal file
30
library/fullcalendar/packages/core/locales/el.js
Normal file
@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.el = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var el = {
|
||||
code: "el",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4st is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Προηγούμενος",
|
||||
next: "Επόμενος",
|
||||
today: "Σήμερα",
|
||||
month: "Μήνας",
|
||||
week: "Εβδομάδα",
|
||||
day: "Ημέρα",
|
||||
list: "Ατζέντα"
|
||||
},
|
||||
weekLabel: "Εβδ",
|
||||
allDayText: "Ολοήμερο",
|
||||
eventLimitText: "περισσότερα",
|
||||
noEventsMessage: "Δεν υπάρχουν γεγονότα για να εμφανιστεί"
|
||||
};
|
||||
|
||||
return el;
|
||||
|
||||
}));
|
17
library/fullcalendar/packages/core/locales/en-au.js
Normal file
17
library/fullcalendar/packages/core/locales/en-au.js
Normal file
@ -0,0 +1,17 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['en-au'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var enAu = {
|
||||
code: "en-au",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
}
|
||||
};
|
||||
|
||||
return enAu;
|
||||
|
||||
}));
|
17
library/fullcalendar/packages/core/locales/en-gb.js
Normal file
17
library/fullcalendar/packages/core/locales/en-gb.js
Normal file
@ -0,0 +1,17 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['en-gb'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var enGb = {
|
||||
code: "en-gb",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
}
|
||||
};
|
||||
|
||||
return enGb;
|
||||
|
||||
}));
|
17
library/fullcalendar/packages/core/locales/en-nz.js
Normal file
17
library/fullcalendar/packages/core/locales/en-nz.js
Normal file
@ -0,0 +1,17 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['en-nz'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var enNz = {
|
||||
code: "en-nz",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
}
|
||||
};
|
||||
|
||||
return enNz;
|
||||
|
||||
}));
|
30
library/fullcalendar/packages/core/locales/es-us.js
Normal file
30
library/fullcalendar/packages/core/locales/es-us.js
Normal file
@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['es-us'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var esUs = {
|
||||
code: "es",
|
||||
week: {
|
||||
dow: 0,
|
||||
doy: 6 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Ant",
|
||||
next: "Sig",
|
||||
today: "Hoy",
|
||||
month: "Mes",
|
||||
week: "Semana",
|
||||
day: "Día",
|
||||
list: "Agenda"
|
||||
},
|
||||
weekLabel: "Sm",
|
||||
allDayHtml: "Todo<br/>el día",
|
||||
eventLimitText: "más",
|
||||
noEventsMessage: "No hay eventos para mostrar"
|
||||
};
|
||||
|
||||
return esUs;
|
||||
|
||||
}));
|
30
library/fullcalendar/packages/core/locales/es.js
Normal file
30
library/fullcalendar/packages/core/locales/es.js
Normal file
@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.es = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var es = {
|
||||
code: "es",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Ant",
|
||||
next: "Sig",
|
||||
today: "Hoy",
|
||||
month: "Mes",
|
||||
week: "Semana",
|
||||
day: "Día",
|
||||
list: "Agenda"
|
||||
},
|
||||
weekLabel: "Sm",
|
||||
allDayHtml: "Todo<br/>el día",
|
||||
eventLimitText: "más",
|
||||
noEventsMessage: "No hay eventos para mostrar"
|
||||
};
|
||||
|
||||
return es;
|
||||
|
||||
}));
|
32
library/fullcalendar/packages/core/locales/et.js
Normal file
32
library/fullcalendar/packages/core/locales/et.js
Normal file
@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.et = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var et = {
|
||||
code: "et",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Eelnev",
|
||||
next: "Järgnev",
|
||||
today: "Täna",
|
||||
month: "Kuu",
|
||||
week: "Nädal",
|
||||
day: "Päev",
|
||||
list: "Päevakord"
|
||||
},
|
||||
weekLabel: "näd",
|
||||
allDayText: "Kogu päev",
|
||||
eventLimitText: function (n) {
|
||||
return "+ veel " + n;
|
||||
},
|
||||
noEventsMessage: "Kuvamiseks puuduvad sündmused"
|
||||
};
|
||||
|
||||
return et;
|
||||
|
||||
}));
|
30
library/fullcalendar/packages/core/locales/eu.js
Normal file
30
library/fullcalendar/packages/core/locales/eu.js
Normal file
@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.eu = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var eu = {
|
||||
code: "eu",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 7 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Aur",
|
||||
next: "Hur",
|
||||
today: "Gaur",
|
||||
month: "Hilabetea",
|
||||
week: "Astea",
|
||||
day: "Eguna",
|
||||
list: "Agenda"
|
||||
},
|
||||
weekLabel: "As",
|
||||
allDayHtml: "Egun<br/>osoa",
|
||||
eventLimitText: "gehiago",
|
||||
noEventsMessage: "Ez dago ekitaldirik erakusteko"
|
||||
};
|
||||
|
||||
return eu;
|
||||
|
||||
}));
|
33
library/fullcalendar/packages/core/locales/fa.js
Normal file
33
library/fullcalendar/packages/core/locales/fa.js
Normal file
@ -0,0 +1,33 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.fa = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var fa = {
|
||||
code: "fa",
|
||||
week: {
|
||||
dow: 6,
|
||||
doy: 12 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
dir: 'rtl',
|
||||
buttonText: {
|
||||
prev: "قبلی",
|
||||
next: "بعدی",
|
||||
today: "امروز",
|
||||
month: "ماه",
|
||||
week: "هفته",
|
||||
day: "روز",
|
||||
list: "برنامه"
|
||||
},
|
||||
weekLabel: "هف",
|
||||
allDayText: "تمام روز",
|
||||
eventLimitText: function (n) {
|
||||
return "بیش از " + n;
|
||||
},
|
||||
noEventsMessage: "هیچ رویدادی به نمایش"
|
||||
};
|
||||
|
||||
return fa;
|
||||
|
||||
}));
|
30
library/fullcalendar/packages/core/locales/fi.js
Normal file
30
library/fullcalendar/packages/core/locales/fi.js
Normal file
@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.fi = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var fi = {
|
||||
code: "fi",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Edellinen",
|
||||
next: "Seuraava",
|
||||
today: "Tänään",
|
||||
month: "Kuukausi",
|
||||
week: "Viikko",
|
||||
day: "Päivä",
|
||||
list: "Tapahtumat"
|
||||
},
|
||||
weekLabel: "Vk",
|
||||
allDayText: "Koko päivä",
|
||||
eventLimitText: "lisää",
|
||||
noEventsMessage: "Ei näytettäviä tapahtumia"
|
||||
};
|
||||
|
||||
return fi;
|
||||
|
||||
}));
|
27
library/fullcalendar/packages/core/locales/fr-ca.js
Normal file
27
library/fullcalendar/packages/core/locales/fr-ca.js
Normal file
@ -0,0 +1,27 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['fr-ca'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var frCa = {
|
||||
code: "fr",
|
||||
buttonText: {
|
||||
prev: "Précédent",
|
||||
next: "Suivant",
|
||||
today: "Aujourd'hui",
|
||||
year: "Année",
|
||||
month: "Mois",
|
||||
week: "Semaine",
|
||||
day: "Jour",
|
||||
list: "Mon planning"
|
||||
},
|
||||
weekLabel: "Sem.",
|
||||
allDayHtml: "Toute la<br/>journée",
|
||||
eventLimitText: "en plus",
|
||||
noEventsMessage: "Aucun événement à afficher"
|
||||
};
|
||||
|
||||
return frCa;
|
||||
|
||||
}));
|
31
library/fullcalendar/packages/core/locales/fr-ch.js
Normal file
31
library/fullcalendar/packages/core/locales/fr-ch.js
Normal file
@ -0,0 +1,31 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['fr-ch'] = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var frCh = {
|
||||
code: "fr-ch",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Précédent",
|
||||
next: "Suivant",
|
||||
today: "Courant",
|
||||
year: "Année",
|
||||
month: "Mois",
|
||||
week: "Semaine",
|
||||
day: "Jour",
|
||||
list: "Mon planning"
|
||||
},
|
||||
weekLabel: "Sm",
|
||||
allDayHtml: "Toute la<br/>journée",
|
||||
eventLimitText: "en plus",
|
||||
noEventsMessage: "Aucun événement à afficher"
|
||||
};
|
||||
|
||||
return frCh;
|
||||
|
||||
}));
|
31
library/fullcalendar/packages/core/locales/fr.js
Normal file
31
library/fullcalendar/packages/core/locales/fr.js
Normal file
@ -0,0 +1,31 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.fr = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var fr = {
|
||||
code: "fr",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Précédent",
|
||||
next: "Suivant",
|
||||
today: "Aujourd'hui",
|
||||
year: "Année",
|
||||
month: "Mois",
|
||||
week: "Semaine",
|
||||
day: "Jour",
|
||||
list: "Mon planning"
|
||||
},
|
||||
weekLabel: "Sem.",
|
||||
allDayHtml: "Toute la<br/>journée",
|
||||
eventLimitText: "en plus",
|
||||
noEventsMessage: "Aucun événement à afficher"
|
||||
};
|
||||
|
||||
return fr;
|
||||
|
||||
}));
|
30
library/fullcalendar/packages/core/locales/gl.js
Normal file
30
library/fullcalendar/packages/core/locales/gl.js
Normal file
@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.gl = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var gl = {
|
||||
code: "gl",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Ant",
|
||||
next: "Seg",
|
||||
today: "Hoxe",
|
||||
month: "Mes",
|
||||
week: "Semana",
|
||||
day: "Día",
|
||||
list: "Axenda"
|
||||
},
|
||||
weekLabel: "Sm",
|
||||
allDayHtml: "Todo<br/>o día",
|
||||
eventLimitText: "máis",
|
||||
noEventsMessage: "Non hai eventos para amosar"
|
||||
};
|
||||
|
||||
return gl;
|
||||
|
||||
}));
|
27
library/fullcalendar/packages/core/locales/he.js
Normal file
27
library/fullcalendar/packages/core/locales/he.js
Normal file
@ -0,0 +1,27 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.he = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var he = {
|
||||
code: "he",
|
||||
dir: 'rtl',
|
||||
buttonText: {
|
||||
prev: "הקודם",
|
||||
next: "הבא",
|
||||
today: "היום",
|
||||
month: "חודש",
|
||||
week: "שבוע",
|
||||
day: "יום",
|
||||
list: "סדר יום"
|
||||
},
|
||||
allDayText: "כל היום",
|
||||
eventLimitText: "אחר",
|
||||
noEventsMessage: "אין אירועים להצגה",
|
||||
weekLabel: "שבוע"
|
||||
};
|
||||
|
||||
return he;
|
||||
|
||||
}));
|
32
library/fullcalendar/packages/core/locales/hi.js
Normal file
32
library/fullcalendar/packages/core/locales/hi.js
Normal file
@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.hi = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var hi = {
|
||||
code: "hi",
|
||||
week: {
|
||||
dow: 0,
|
||||
doy: 6 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "पिछला",
|
||||
next: "अगला",
|
||||
today: "आज",
|
||||
month: "महीना",
|
||||
week: "सप्ताह",
|
||||
day: "दिन",
|
||||
list: "कार्यसूची"
|
||||
},
|
||||
weekLabel: "हफ्ता",
|
||||
allDayText: "सभी दिन",
|
||||
eventLimitText: function (n) {
|
||||
return "+अधिक " + n;
|
||||
},
|
||||
noEventsMessage: "कोई घटनाओं को प्रदर्शित करने के लिए"
|
||||
};
|
||||
|
||||
return hi;
|
||||
|
||||
}));
|
32
library/fullcalendar/packages/core/locales/hr.js
Normal file
32
library/fullcalendar/packages/core/locales/hr.js
Normal file
@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.hr = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var hr = {
|
||||
code: "hr",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 7 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Prijašnji",
|
||||
next: "Sljedeći",
|
||||
today: "Danas",
|
||||
month: "Mjesec",
|
||||
week: "Tjedan",
|
||||
day: "Dan",
|
||||
list: "Raspored"
|
||||
},
|
||||
weekLabel: "Tje",
|
||||
allDayText: "Cijeli dan",
|
||||
eventLimitText: function (n) {
|
||||
return "+ još " + n;
|
||||
},
|
||||
noEventsMessage: "Nema događaja za prikaz"
|
||||
};
|
||||
|
||||
return hr;
|
||||
|
||||
}));
|
30
library/fullcalendar/packages/core/locales/hu.js
Normal file
30
library/fullcalendar/packages/core/locales/hu.js
Normal file
@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.hu = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var hu = {
|
||||
code: "hu",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "vissza",
|
||||
next: "előre",
|
||||
today: "ma",
|
||||
month: "Hónap",
|
||||
week: "Hét",
|
||||
day: "Nap",
|
||||
list: "Napló"
|
||||
},
|
||||
weekLabel: "Hét",
|
||||
allDayText: "Egész nap",
|
||||
eventLimitText: "további",
|
||||
noEventsMessage: "Nincs megjeleníthető esemény"
|
||||
};
|
||||
|
||||
return hu;
|
||||
|
||||
}));
|
30
library/fullcalendar/packages/core/locales/id.js
Normal file
30
library/fullcalendar/packages/core/locales/id.js
Normal file
@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.id = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var id = {
|
||||
code: "id",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 7 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "mundur",
|
||||
next: "maju",
|
||||
today: "hari ini",
|
||||
month: "Bulan",
|
||||
week: "Minggu",
|
||||
day: "Hari",
|
||||
list: "Agenda"
|
||||
},
|
||||
weekLabel: "Mg",
|
||||
allDayHtml: "Sehari<br/>penuh",
|
||||
eventLimitText: "lebih",
|
||||
noEventsMessage: "Tidak ada acara untuk ditampilkan"
|
||||
};
|
||||
|
||||
return id;
|
||||
|
||||
}));
|
30
library/fullcalendar/packages/core/locales/is.js
Normal file
30
library/fullcalendar/packages/core/locales/is.js
Normal file
@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.is = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var is = {
|
||||
code: "is",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Fyrri",
|
||||
next: "Næsti",
|
||||
today: "Í dag",
|
||||
month: "Mánuður",
|
||||
week: "Vika",
|
||||
day: "Dagur",
|
||||
list: "Dagskrá"
|
||||
},
|
||||
weekLabel: "Vika",
|
||||
allDayHtml: "Allan<br/>daginn",
|
||||
eventLimitText: "meira",
|
||||
noEventsMessage: "Engir viðburðir til að sýna"
|
||||
};
|
||||
|
||||
return is;
|
||||
|
||||
}));
|
32
library/fullcalendar/packages/core/locales/it.js
Normal file
32
library/fullcalendar/packages/core/locales/it.js
Normal file
@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.it = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var it = {
|
||||
code: "it",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Prec",
|
||||
next: "Succ",
|
||||
today: "Oggi",
|
||||
month: "Mese",
|
||||
week: "Settimana",
|
||||
day: "Giorno",
|
||||
list: "Agenda"
|
||||
},
|
||||
weekLabel: "Sm",
|
||||
allDayHtml: "Tutto il<br/>giorno",
|
||||
eventLimitText: function (n) {
|
||||
return "+altri " + n;
|
||||
},
|
||||
noEventsMessage: "Non ci sono eventi da visualizzare"
|
||||
};
|
||||
|
||||
return it;
|
||||
|
||||
}));
|
28
library/fullcalendar/packages/core/locales/ja.js
Normal file
28
library/fullcalendar/packages/core/locales/ja.js
Normal file
@ -0,0 +1,28 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ja = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var ja = {
|
||||
code: "ja",
|
||||
buttonText: {
|
||||
prev: "前",
|
||||
next: "次",
|
||||
today: "今日",
|
||||
month: "月",
|
||||
week: "週",
|
||||
day: "日",
|
||||
list: "予定リスト"
|
||||
},
|
||||
weekLabel: "週",
|
||||
allDayText: "終日",
|
||||
eventLimitText: function (n) {
|
||||
return "他 " + n + " 件";
|
||||
},
|
||||
noEventsMessage: "表示する予定はありません"
|
||||
};
|
||||
|
||||
return ja;
|
||||
|
||||
}));
|
32
library/fullcalendar/packages/core/locales/ka.js
Normal file
32
library/fullcalendar/packages/core/locales/ka.js
Normal file
@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ka = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var ka = {
|
||||
code: "ka",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 7
|
||||
},
|
||||
buttonText: {
|
||||
prev: "წინა",
|
||||
next: "შემდეგი",
|
||||
today: "დღეს",
|
||||
month: "თვე",
|
||||
week: "კვირა",
|
||||
day: "დღე",
|
||||
list: "დღის წესრიგი"
|
||||
},
|
||||
weekLabel: "კვ",
|
||||
allDayText: "მთელი დღე",
|
||||
eventLimitText: function (n) {
|
||||
return "+ კიდევ " + n;
|
||||
},
|
||||
noEventsMessage: "ღონისძიებები არ არის"
|
||||
};
|
||||
|
||||
return ka;
|
||||
|
||||
}));
|
32
library/fullcalendar/packages/core/locales/kk.js
Normal file
32
library/fullcalendar/packages/core/locales/kk.js
Normal file
@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.kk = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var kk = {
|
||||
code: "kk",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 7 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Алдыңғы",
|
||||
next: "Келесі",
|
||||
today: "Бүгін",
|
||||
month: "Ай",
|
||||
week: "Апта",
|
||||
day: "Күн",
|
||||
list: "Күн тәртібі"
|
||||
},
|
||||
weekLabel: "Не",
|
||||
allDayText: "Күні бойы",
|
||||
eventLimitText: function (n) {
|
||||
return "+ тағы " + n;
|
||||
},
|
||||
noEventsMessage: "Көрсету үшін оқиғалар жоқ"
|
||||
};
|
||||
|
||||
return kk;
|
||||
|
||||
}));
|
26
library/fullcalendar/packages/core/locales/ko.js
Normal file
26
library/fullcalendar/packages/core/locales/ko.js
Normal file
@ -0,0 +1,26 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ko = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var ko = {
|
||||
code: "ko",
|
||||
buttonText: {
|
||||
prev: "이전달",
|
||||
next: "다음달",
|
||||
today: "오늘",
|
||||
month: "월",
|
||||
week: "주",
|
||||
day: "일",
|
||||
list: "일정목록"
|
||||
},
|
||||
weekLabel: "주",
|
||||
allDayText: "종일",
|
||||
eventLimitText: "개",
|
||||
noEventsMessage: "일정이 없습니다"
|
||||
};
|
||||
|
||||
return ko;
|
||||
|
||||
}));
|
30
library/fullcalendar/packages/core/locales/lb.js
Normal file
30
library/fullcalendar/packages/core/locales/lb.js
Normal file
@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.lb = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var lb = {
|
||||
code: "lb",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Zréck",
|
||||
next: "Weider",
|
||||
today: "Haut",
|
||||
month: "Mount",
|
||||
week: "Woch",
|
||||
day: "Dag",
|
||||
list: "Terminiwwersiicht"
|
||||
},
|
||||
weekLabel: "W",
|
||||
allDayText: "Ganzen Dag",
|
||||
eventLimitText: "méi",
|
||||
noEventsMessage: "Nee Evenementer ze affichéieren"
|
||||
};
|
||||
|
||||
return lb;
|
||||
|
||||
}));
|
30
library/fullcalendar/packages/core/locales/lt.js
Normal file
30
library/fullcalendar/packages/core/locales/lt.js
Normal file
@ -0,0 +1,30 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.lt = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var lt = {
|
||||
code: "lt",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Atgal",
|
||||
next: "Pirmyn",
|
||||
today: "Šiandien",
|
||||
month: "Mėnuo",
|
||||
week: "Savaitė",
|
||||
day: "Diena",
|
||||
list: "Darbotvarkė"
|
||||
},
|
||||
weekLabel: "SAV",
|
||||
allDayText: "Visą dieną",
|
||||
eventLimitText: "daugiau",
|
||||
noEventsMessage: "Nėra įvykių rodyti"
|
||||
};
|
||||
|
||||
return lt;
|
||||
|
||||
}));
|
32
library/fullcalendar/packages/core/locales/lv.js
Normal file
32
library/fullcalendar/packages/core/locales/lv.js
Normal file
@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.lv = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var lv = {
|
||||
code: "lv",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Iepr.",
|
||||
next: "Nāk.",
|
||||
today: "Šodien",
|
||||
month: "Mēnesis",
|
||||
week: "Nedēļa",
|
||||
day: "Diena",
|
||||
list: "Dienas kārtība"
|
||||
},
|
||||
weekLabel: "Ned.",
|
||||
allDayText: "Visu dienu",
|
||||
eventLimitText: function (n) {
|
||||
return "+vēl " + n;
|
||||
},
|
||||
noEventsMessage: "Nav notikumu"
|
||||
};
|
||||
|
||||
return lv;
|
||||
|
||||
}));
|
28
library/fullcalendar/packages/core/locales/mk.js
Normal file
28
library/fullcalendar/packages/core/locales/mk.js
Normal file
@ -0,0 +1,28 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.mk = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var mk = {
|
||||
code: "mk",
|
||||
buttonText: {
|
||||
prev: "претходно",
|
||||
next: "следно",
|
||||
today: "Денес",
|
||||
month: "Месец",
|
||||
week: "Недела",
|
||||
day: "Ден",
|
||||
list: "График"
|
||||
},
|
||||
weekLabel: "Сед",
|
||||
allDayText: "Цел ден",
|
||||
eventLimitText: function (n) {
|
||||
return "+повеќе " + n;
|
||||
},
|
||||
noEventsMessage: "Нема настани за прикажување"
|
||||
};
|
||||
|
||||
return mk;
|
||||
|
||||
}));
|
32
library/fullcalendar/packages/core/locales/ms.js
Normal file
32
library/fullcalendar/packages/core/locales/ms.js
Normal file
@ -0,0 +1,32 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ms = factory()));
|
||||
}(this, function () { 'use strict';
|
||||
|
||||
var ms = {
|
||||
code: "ms",
|
||||
week: {
|
||||
dow: 1,
|
||||
doy: 7 // The week that contains Jan 1st is the first week of the year.
|
||||
},
|
||||
buttonText: {
|
||||
prev: "Sebelum",
|
||||
next: "Selepas",
|
||||
today: "hari ini",
|
||||
month: "Bulan",
|
||||
week: "Minggu",
|
||||
day: "Hari",
|
||||
list: "Agenda"
|
||||
},
|
||||
weekLabel: "Mg",
|
||||
allDayText: "Sepanjang hari",
|
||||
eventLimitText: function (n) {
|
||||
return "masih ada " + n + " acara";
|
||||
},
|
||||
noEventsMessage: "Tiada peristiwa untuk dipaparkan"
|
||||
};
|
||||
|
||||
return ms;
|
||||
|
||||
}));
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user