From df4137baee2fa3e3448603a0e3c8c74d722adb2c Mon Sep 17 00:00:00 2001
From: Ralf Becker
Date: Tue, 20 Jul 2021 09:34:59 +0200
Subject: [PATCH 01/30] * Filemanager/VFS: when creating a new file as root eg.
via (docker exec) filemanager/cli.php do NOT create files unreadable by
webserver
---
api/src/Vfs/Sqlfs/StreamWrapper.php | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/api/src/Vfs/Sqlfs/StreamWrapper.php b/api/src/Vfs/Sqlfs/StreamWrapper.php
index ac93cd527f..a7c62e71b9 100644
--- a/api/src/Vfs/Sqlfs/StreamWrapper.php
+++ b/api/src/Vfs/Sqlfs/StreamWrapper.php
@@ -254,10 +254,11 @@ class StreamWrapper extends Api\Db\Pdo implements Vfs\StreamWrapperIface
{
$umaskbefore = umask();
if (self::LOG_LEVEL > 1) error_log(__METHOD__." about to call mkdir for $fs_dir # Present UMASK:".decoct($umaskbefore)." called from:".function_backtrace());
- self::mkdir_recursive($fs_dir,0700,true);
+ // if running as root eg. via (docker exec) filemanager/cli.php do NOT create dirs not readable by webserver
+ self::mkdir_recursive($fs_dir,function_exists('posix_getuid') && !posix_getuid() ? 0777 : 0700,true);
}
}
- // check if opend file is a directory
+ // check if opened file is a directory
elseif($stat && ($stat['mode'] & self::MODE_DIR) == self::MODE_DIR)
{
if (self::LOG_LEVEL) error_log(__METHOD__."($url,$mode,$options) Is a directory!");
@@ -308,6 +309,11 @@ class StreamWrapper extends Api\Db\Pdo implements Vfs\StreamWrapperIface
if ($this->operation == self::STORE2FS)
{
if (self::LOG_LEVEL > 1) error_log(__METHOD__." fopen (may create a directory? mkdir) ($this->opened_fs_id,$mode,$options)");
+ // if creating a new file as root eg. via (docker exec) filemanager/cli.php do NOT create files unreadable by webserver
+ if ($new_file && function_exists('posix_getuid') && !posix_getuid())
+ {
+ umask(0666);
+ }
if (!($this->opened_stream = fopen(self::_fs_path($this->opened_fs_id),$mode)) && $new_file)
{
// delete db entry again, if we are not able to open a new(!) file
From b95f9e72209ffbe42ef72baecbcdfb3247fa4019 Mon Sep 17 00:00:00 2001
From: nathan
Date: Tue, 20 Jul 2021 14:23:21 -0600
Subject: [PATCH 02/30] Reset after every job
---
api/src/Asyncservice.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/api/src/Asyncservice.php b/api/src/Asyncservice.php
index d169f0c786..ade79ab21d 100644
--- a/api/src/Asyncservice.php
+++ b/api/src/Asyncservice.php
@@ -425,7 +425,7 @@ class Asyncservice
{
// checking / setting up egw_info/user
//
- if ($GLOBALS['egw_info']['user']['account_id'] != $job['account_id'])
+ //if ($GLOBALS['egw_info']['user']['account_id'] != $job['account_id'])
{
// run notifications, before changing account_id of enviroment
Link::run_notifies();
From 9540ac5414a79862dd9ee81a4f6dcfe287389f3b Mon Sep 17 00:00:00 2001
From: nathan
Date: Tue, 20 Jul 2021 15:05:26 -0600
Subject: [PATCH 03/30] Ignore maps & minified js
---
.gitignore | 2 ++
1 file changed, 2 insertions(+)
diff --git a/.gitignore b/.gitignore
index 038d787df2..6ff21d917d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -65,6 +65,8 @@ status/
smallpart/
swoolepush/
webauthn/
+*/js/*.map
+*/js/app.min.js
addressbook/js/app.js
admin/js/app.js
api/js/etemplate/*.js
From 93068dcfccec1c31d319cdebdff5f77f892dab2b Mon Sep 17 00:00:00 2001
From: Ralf Becker
Date: Thu, 22 Jul 2021 09:08:33 +0200
Subject: [PATCH 04/30] need to call Vfs\StreamWrapper::init_static() after
setting Vfs::$user Vfs::$user should be protected and moved to Vfs\Base plus
a getter and setter method added for public access, as after setting it in
21.1+, Api\Vfs\StreamWrapper::init_static() need to be called to set the
default user context!
---
api/src/Vfs.php | 17 +++++++++++------
api/src/Vfs/StreamWrapper.php | 26 +++++++++++++++++++++-----
2 files changed, 32 insertions(+), 11 deletions(-)
diff --git a/api/src/Vfs.php b/api/src/Vfs.php
index 7db81a9198..3337ba424c 100644
--- a/api/src/Vfs.php
+++ b/api/src/Vfs.php
@@ -82,7 +82,10 @@ class Vfs extends Vfs\Base
*/
static $is_root = false;
/**
- * Current user id, in case we ever change if away from $GLOBALS['egw_info']['user']['account_id']
+ * Current Vfs user id, set from $GLOBALS['egw_info']['user']['account_id'] by self::init_static()
+ *
+ * Should be protected and moved to Vfs\Base plus a getter and setter method added for public access,
+ * as after setting it in 21.1+, Api\Vfs\StreamWrapper::init_static() need to be called to set the default user context!
*
* @var int
*/
@@ -749,22 +752,22 @@ class Vfs extends Vfs\Base
* @return boolean
* @todo deprecated or even remove $user parameter and code
*/
- static function check_access($path, $check, $stat=null, $user=null)
+ static function check_access($path, $check, $stat=null, int $user=null)
{
static $vfs = null;
- if (is_null($stat) && $user && $user != self::$user)
+ if (is_null($stat) && $user && $user !== self::$user)
{
static $path_user_stat = array();
$backup_user = self::$user;
self::$user = $user;
+ Vfs\StreamWrapper::init_static();
+ self::clearstatcache($path);
if (!isset($path_user_stat[$path]) || !isset($path_user_stat[$path][$user]))
{
- self::clearstatcache($path);
-
- if (!isset($vfs)) $vfs = new Vfs\StreamWrapper();
+ $vfs = new Vfs\StreamWrapper();
$path_user_stat[$path][$user] = $vfs->url_stat($path, 0);
self::clearstatcache($path); // we need to clear the stat-cache after the call too, as the next call might be the regular user again!
@@ -786,6 +789,8 @@ class Vfs extends Vfs\Base
$ret = false; // no access, if we can not stat the file
}
self::$user = $backup_user;
+ Vfs\StreamWrapper::init_static();
+ $vfs = null;
// we need to clear stat-cache again, after restoring original user, as eg. eACL is stored in session
self::clearstatcache($path);
diff --git a/api/src/Vfs/StreamWrapper.php b/api/src/Vfs/StreamWrapper.php
index f666751eb9..acf8690b74 100644
--- a/api/src/Vfs/StreamWrapper.php
+++ b/api/src/Vfs/StreamWrapper.php
@@ -972,6 +972,7 @@ class StreamWrapper extends Base implements StreamWrapperIface
/**
* Init our static properties and register this wrapper
*
+ * Must be called when Vfs::$user is changed!
*/
static function init_static()
{
@@ -984,16 +985,31 @@ class StreamWrapper extends Base implements StreamWrapperIface
{
self::$fstab = $fstab;
}
- if (!empty($GLOBALS['egw_info']['user']['preferences']['common']['vfs_fstab']) &&
- is_array($GLOBALS['egw_info']['user']['preferences']['common']['vfs_fstab']))
+
+ // get the user Vfs is currently using, might be different from $GLOBALS['egw_info']['user']['account_id']
+ if (!isset(Vfs::$user))
{
- self::$fstab += $GLOBALS['egw_info']['user']['preferences']['common']['vfs_fstab'];
+ Vfs::init_static();
+ }
+ if (Vfs::$user != $GLOBALS['egw_info']['user']['account_id'])
+ {
+ $prefs = new Api\Preferences(Vfs::$user);
+ $vfs_fstab = $prefs->data['common']['vfs_fstab'];
+ }
+ else
+ {
+ $vfs_fstab = $GLOBALS['egw_info']['user']['preferences']['common']['vfs_fstab'];
+ }
+ if (!empty($vfs_fstab) && is_array($vfs_fstab))
+ {
+ self::$fstab += $vfs_fstab;
}
// set default context for our schema ('vfs') with current user
- if (!($context = stream_context_get_options(stream_context_get_default())) || empty($context[self::SCHEME]['user']))
+ if (!($context = stream_context_get_options(stream_context_get_default())) || empty($context[self::SCHEME]['user']) ||
+ $context[self::SCHEME]['user'] !== (int)Vfs::$user)
{
- $context[self::SCHEME]['user'] = (int)$GLOBALS['egw_info']['user']['account_id'];
+ $context[self::SCHEME]['user'] = (int)Vfs::$user;
stream_context_set_default($context);
}
}
From 4240f4cf0123933c12f934cd8f1cfbe977478dcb Mon Sep 17 00:00:00 2001
From: Ralf Becker
Date: Fri, 23 Jul 2021 08:09:49 +0200
Subject: [PATCH 05/30] Changelog for 21.1.20210723
---
api/setup/setup.inc.php | 2 +-
doc/rpm-build/debian.changes | 11 +++++++++++
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/api/setup/setup.inc.php b/api/setup/setup.inc.php
index c5b86b0e12..b169d6feeb 100644
--- a/api/setup/setup.inc.php
+++ b/api/setup/setup.inc.php
@@ -14,7 +14,7 @@ $setup_info['api']['title'] = 'EGroupware API';
$setup_info['api']['version'] = '21.1';
$setup_info['api']['versions']['current_header'] = '1.29';
// maintenance release in sync with changelog in doc/rpm-build/debian.changes
-$setup_info['api']['versions']['maintenance_release'] = '21.1.20210629';
+$setup_info['api']['versions']['maintenance_release'] = '21.1.20210723';
$setup_info['api']['enable'] = 3;
$setup_info['api']['app_order'] = 1;
$setup_info['api']['license'] = 'GPL';
diff --git a/doc/rpm-build/debian.changes b/doc/rpm-build/debian.changes
index 7b88f613d3..26d1ca19ea 100644
--- a/doc/rpm-build/debian.changes
+++ b/doc/rpm-build/debian.changes
@@ -1,3 +1,14 @@
+egroupware-docker (21.1.20210723) hardy; urgency=low
+
+ * Security Update: all 21.1 users should upgrade ASAP, 20.1 and below is not affected
+ * Filemanager/VFS: when creating a new file as root eg. via (docker exec) filemanager/cli.php do NOT create files unreadable by webserver
+ * Collabora: Fix editing files in mounted share
+ * Kanban/PostgreSQL: fix installation of example board under PostgreSQL
+ * smallPART/PostgreSQL: fix multiple SQL errors
+ * smallPART/PostgreSQL: fix installation under PostgreSQL
+
+ -- Ralf Becker Fri, 23 Jul 2021 08:09:49 +0200
+
egroupware-docker (21.1.20210629) hardy; urgency=low
* Mail/Admin: fix not working mail wizard
From a7923576efb162b6f014058b3050d5057941921a Mon Sep 17 00:00:00 2001
From: Ralf Becker
Date: Fri, 23 Jul 2021 09:49:18 +0200
Subject: [PATCH 06/30] try fixing not displayed custome type and status icons
in CRM view
---
infolog/templates/default/index.xet | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/infolog/templates/default/index.xet b/infolog/templates/default/index.xet
index d2713c7165..6c1c87953b 100644
--- a/infolog/templates/default/index.xet
+++ b/infolog/templates/default/index.xet
@@ -75,8 +75,8 @@
-
-
+
+
From d02a9d5b8670c54afb0dceb300b53fba678a8ce0 Mon Sep 17 00:00:00 2001
From: Ralf Becker
Date: Fri, 23 Jul 2021 22:46:13 +0200
Subject: [PATCH 07/30] replace fxp/composer-asset-plugin with
asset-packagist.org to install bower and npm assets supposed to work with
composer > 1.8.7
---
composer.json | 13 ++++++++-----
composer.lock | 2 +-
2 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/composer.json b/composer.json
index 96a2d22afa..196af528a9 100644
--- a/composer.json
+++ b/composer.json
@@ -38,9 +38,13 @@
"issuses": "https://my.egroupware.org"
},
"repositories": [
- {
- "type": "pear",
- "url": "https://pear.horde.org"
+ {
+ "type": "composer",
+ "url": "https://asset-packagist.org"
+ },
+ {
+ "type": "pear",
+ "url": "https://pear.horde.org"
},
{
"type": "vcs",
@@ -77,7 +81,6 @@
"egroupware/collabora": "self.version",
"egroupware/guzzlestream": "dev-master",
"egroupware/icalendar": "^2.1.9",
- "egroupware/imap-client": "^2.30.2",
"egroupware/magicsuggest": "^2.1",
"egroupware/news_admin": "self.version",
"egroupware/openid": "self.version",
@@ -90,11 +93,11 @@
"egroupware/tracker": "self.version",
"egroupware/webdav": "dev-master",
"egroupware/z-push-dev": "^2.5",
- "fxp/composer-asset-plugin": "^1.2.2",
"giggsey/libphonenumber-for-php": "^8.12",
"npm-asset/as-jqplot": "1.0.*",
"npm-asset/gridster": "0.5.*",
"oomphinc/composer-installers-extender": "^1.1",
+ "pear-pear.horde.org/horde_imap_client": "^2.30.3",
"pear-pear.horde.org/horde_compress": "^2.0.8",
"pear-pear.horde.org/horde_crypt": "^2.7.9",
"pear-pear.horde.org/horde_mail": "^2.1.2",
diff --git a/composer.lock b/composer.lock
index 5b59baf1c3..7484faaeaf 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "a4ca48486896136c2dc9b1c1dfa79846",
+ "content-hash": "3f243434358f300d4fda0859f4e4b0e9",
"packages": [
{
"name": "adldap2/adldap2",
From 93c390139bf67d763a06fe47dab768fbe0de1ff7 Mon Sep 17 00:00:00 2001
From: Hadi Nategh
Date: Mon, 26 Jul 2021 10:10:30 +0200
Subject: [PATCH 08/30] Fix error TypeError: Cannot read property 'length' of
undefined
---
api/js/etemplate/et2_widget_taglist.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/api/js/etemplate/et2_widget_taglist.ts b/api/js/etemplate/et2_widget_taglist.ts
index 5a91785e6b..b29c261105 100644
--- a/api/js/etemplate/et2_widget_taglist.ts
+++ b/api/js/etemplate/et2_widget_taglist.ts
@@ -638,7 +638,7 @@ export class et2_taglist extends et2_selectbox implements et2_IResizeable
});
// if value has already been set, re-set it by it's id(s)
- if (this.options.select_options.length && this.options.value.length) {
+ if (this.options.select_options.length && this.options.value?.length) {
this.set_value(this.options.value.map((v) => v.id));
}
}
From 4cd2d665d7fed405312161efec602a7ce8fe555f Mon Sep 17 00:00:00 2001
From: Hadi Nategh
Date: Mon, 26 Jul 2021 14:52:01 +0200
Subject: [PATCH 09/30] Fix broken opening a contact in mobile theme
---
addressbook/js/app.ts | 3 +++
1 file changed, 3 insertions(+)
diff --git a/addressbook/js/app.ts b/addressbook/js/app.ts
index 9097a4c92b..aaab7ae9a4 100644
--- a/addressbook/js/app.ts
+++ b/addressbook/js/app.ts
@@ -1528,6 +1528,9 @@ class AddressbookApp extends EgwApp
*/
private videoconference_isUserOnline(_action, _selected)
{
+ // ATM we're not supporting status in mobile theme
+ if (egwIsMobile()) return false;
+
let list = app.status ? app.status.getEntireList() : {};
for (let sel in _selected)
{
From 4fe8fd51549733c5e6cfd4fbd6f6a06987779968 Mon Sep 17 00:00:00 2001
From: Hadi Nategh
Date: Tue, 27 Jul 2021 12:38:37 +0200
Subject: [PATCH 10/30] Fix default value for mail's contact label preference
---
mail/inc/class.mail_hooks.inc.php | 39 ++++++++++++++++---------------
1 file changed, 20 insertions(+), 19 deletions(-)
diff --git a/mail/inc/class.mail_hooks.inc.php b/mail/inc/class.mail_hooks.inc.php
index 1ab0d1fb09..add5ec6761 100644
--- a/mail/inc/class.mail_hooks.inc.php
+++ b/mail/inc/class.mail_hooks.inc.php
@@ -176,6 +176,24 @@ class mail_hooks
'always_display' => lang('always show html emails'),
);
+ $contactLabelOptions = array (
+ 'n_prefix' => array (
+ 'id' => 'n_prefix',
+ 'label' => lang('Prefix'),
+ ),
+ 'n_given' => array (
+ 'id' => 'n_given',
+ 'label' => lang('First name')
+ ),
+ 'n_family' => array(
+ 'id' => 'n_family',
+ 'label' => lang('Last name')
+ ),
+ 'org_name' => array(
+ 'id' => 'org_name',
+ 'label' => lang('Organisation')
+ )
+ );
// otherwise we get warnings during setup
if (!is_array($folderList)) $folderList = array();
@@ -457,29 +475,12 @@ class mail_hooks
'label' => 'Contact label',
'help' => 'Defines what to show as contact label for added contact into To/Cc/Bcc when composing an email. Default is firstname lastname and empty means include eveything available.',
'name' => 'contactLabel',
- 'values' => '',
+ 'values' => $contactLabelOptions,
'attributes' => array(
'allowFreeEntries' => false,
'editModeEnabled' => false,
'autocomplete_url' => ' ',
- 'select_options' => array (
- 'n_prefix' => array (
- 'id' => 'n_prefix',
- 'label' => lang('Prefix'),
- ),
- 'n_given' => array (
- 'id' => 'n_given',
- 'label' => lang('First name')
- ),
- 'n_family' => array(
- 'id' => 'n_family',
- 'label' => lang('Last name')
- ),
- 'org_name' => array(
- 'id' => 'org_name',
- 'label' => lang('Organisation')
- )
- )
+ 'select_options' => $contactLabelOptions
),
'default' => ['n_given','n_family']
)
From eae9c97caa962e9746c2064d83e996bb0e8f3fa5 Mon Sep 17 00:00:00 2001
From: Ralf Becker
Date: Wed, 28 Jul 2021 09:03:33 +0200
Subject: [PATCH 11/30] update composer to 1.10.22, as we no longer use
fxp/composer-asset-plugin still cant use Composer v2, as Horde is a no longer
supported PEAR repo :(
---
doc/docker/development/Dockerfile | 2 +-
doc/docker/fpm/Dockerfile | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/doc/docker/development/Dockerfile b/doc/docker/development/Dockerfile
index c5352b3daf..fc62584e29 100644
--- a/doc/docker/development/Dockerfile
+++ b/doc/docker/development/Dockerfile
@@ -64,7 +64,7 @@ else \
RESULT=$?; \
fi; \
rm composer-setup.php; \
-composer.phar self-update 1.8.6; \
+composer.phar self-update 1.10.22; \
exit $RESULT' \
# disable certificate checks for LDAP as most LDAP and AD servers have no "valid" cert
&& echo "TLS_REQCERT never" >> /etc/ldap/ldap.conf
diff --git a/doc/docker/fpm/Dockerfile b/doc/docker/fpm/Dockerfile
index dc6f39b65d..8ba24b726f 100644
--- a/doc/docker/fpm/Dockerfile
+++ b/doc/docker/fpm/Dockerfile
@@ -69,7 +69,7 @@ fi; \
rm composer-setup.php; \
exit $RESULT' \
# build EGroupware
- && composer.phar self-update 1.8.6 \
+ && composer.phar self-update 1.10.22 \
&& cd /usr/share \
&& [ $PHP_VERSION = "8.0" ] && COMPOSER_EXTRA=--ignore-platform-reqs || true \
&& composer.phar create-project $COMPOSER_EXTRA --prefer-dist --no-scripts --no-dev egroupware/egroupware:$VERSION \
From 5f7bafd0302cac534da613033e1713d4da82135f Mon Sep 17 00:00:00 2001
From: Ralf Becker
Date: Fri, 30 Jul 2021 15:21:58 +0200
Subject: [PATCH 12/30] allow to explicit register callbacks for the
broadcasted push messages
egw.registerPush(Function)
The callback should have a bound context, if it requires one!
---
api/js/jsapi/egw_jsonq.js | 35 +++++++++++++++++++++++++++++++++++
api/js/jsapi/egw_message.js | 3 +++
2 files changed, 38 insertions(+)
diff --git a/api/js/jsapi/egw_jsonq.js b/api/js/jsapi/egw_jsonq.js
index 880fd25c41..0d59c40134 100644
--- a/api/js/jsapi/egw_jsonq.js
+++ b/api/js/jsapi/egw_jsonq.js
@@ -20,6 +20,13 @@ egw.extend('jsonq', egw.MODULE_GLOBAL, function()
{
"use strict";
+ /**
+ * Explicit registered push callbacks
+ *
+ * @type {Function[]}
+ */
+ let push_callbacks = [];
+
/**
* Queued json requests (objects with attributes menuaction, parameters, context, callback, sender and callbeforesend)
*
@@ -149,6 +156,34 @@ egw.extend('jsonq', egw.MODULE_GLOBAL, function()
}, 100);
}
return uid;
+ },
+
+ /**
+ * Register a callback to receive push broadcasts eg. in a popup or iframe
+ *
+ * It's also used internally by egw_message's push method to dispatch to the registered callbacks.
+ *
+ * @param {Function|PushData} data callback (with bound context) or PushData to dispatch to callbacks
+ */
+ registerPush: function(data)
+ {
+ if (typeof data === "function")
+ {
+ push_callbacks.push(data);
+ }
+ else
+ {
+ for (let n in push_callbacks)
+ {
+ try {
+ push_callbacks[n].call(this, data);
+ }
+ // if we get an exception, we assume the callback is no longer available and remove it
+ catch (ex) {
+ push_callbacks.splice(n, 1);
+ }
+ }
+ }
}
};
diff --git a/api/js/jsapi/egw_message.js b/api/js/jsapi/egw_message.js
index 9dce3e6be9..aef3ad74fb 100644
--- a/api/js/jsapi/egw_message.js
+++ b/api/js/jsapi/egw_message.js
@@ -459,6 +459,9 @@ egw.extend('message', egw.MODULE_WND_LOCAL, function(_app, _wnd)
app_obj.push(pushData);
}
}
+
+ // call the global registered push callbacks
+ this.registerPush(pushData);
}
};
From 8f93a7f7c6e7809494bf3b9fca4e2a42d492ab85 Mon Sep 17 00:00:00 2001
From: Ralf Becker
Date: Tue, 3 Aug 2021 18:53:05 +0200
Subject: [PATCH 13/30] * Setup: support uninstalling automatic installed apps
(no more reinstalling next update)
---
api/src/Egw/Applications.php | 7 +++-
setup/applications.php | 3 ++
setup/inc/class.setup.inc.php | 56 ++++++++++++++++++-------
setup/inc/class.setup_detection.inc.php | 2 +-
setup/inc/class.setup_process.inc.php | 6 +--
5 files changed, 54 insertions(+), 20 deletions(-)
diff --git a/api/src/Egw/Applications.php b/api/src/Egw/Applications.php
index 8e3cf96bf4..d789ebd99a 100755
--- a/api/src/Egw/Applications.php
+++ b/api/src/Egw/Applications.php
@@ -71,15 +71,18 @@ class Applications
}
/**
- * populate array with a list of installed apps
+ * Populate array with a list of installed apps
*
+ * egw_applications.app_enabled = -1 is NOT installed, but an uninstalled autoinstall app!
+ *
+ * @return array[]
*/
function read_installed_apps()
{
$GLOBALS['egw_info']['apps'] = Api\Cache::getInstance(__CLASS__, 'apps', function()
{
$apps = array();
- foreach($this->db->select($this->table_name,'*',false,__LINE__,__FILE__,false,'ORDER BY app_order ASC') as $row)
+ foreach($this->db->select($this->table_name,'*', ['app_enabled != -1'],__LINE__,__FILE__,false,'ORDER BY app_order ASC') as $row)
{
$apps[$row['app_name']] = Array(
'title' => $row['app_name'],
diff --git a/setup/applications.php b/setup/applications.php
index 634dae54e2..954cc53ce8 100644
--- a/setup/applications.php
+++ b/setup/applications.php
@@ -226,6 +226,9 @@ if (!empty($detail = $_GET['detail']))
{
switch($key)
{
+ case 'autoinstall':
+ $val = json_encode($val);
+ break;
case 'title':
continue 2;
case 'tables':
diff --git a/setup/inc/class.setup.inc.php b/setup/inc/class.setup.inc.php
index e31c85c1ff..0fbe3d8413 100644
--- a/setup/inc/class.setup.inc.php
+++ b/setup/inc/class.setup.inc.php
@@ -516,16 +516,17 @@ class setup
),False,__LINE__,__FILE__);
}
try {
- $this->db->insert($this->applications_table,array(
- 'app_name' => $appname,
- 'app_enabled' => $enable,
- 'app_order' => $setup_info[$appname]['app_order'],
- 'app_tables' => (string)$tables, // app_tables is NOT NULL
- 'app_version' => $setup_info[$appname]['version'],
- 'app_index' => $setup_info[$appname]['index'],
- 'app_icon' => $setup_info[$appname]['icon'],
- 'app_icon_app' => $setup_info[$appname]['icon_app'],
- ),False,__LINE__,__FILE__);
+ $this->db->insert($this->applications_table, [
+ 'app_enabled' => $enable,
+ 'app_order' => $setup_info[$appname]['app_order'],
+ 'app_tables' => (string)$tables, // app_tables is NOT NULL
+ 'app_version' => $setup_info[$appname]['version'],
+ 'app_index' => $setup_info[$appname]['index'],
+ 'app_icon' => $setup_info[$appname]['icon'],
+ 'app_icon_app' => $setup_info[$appname]['icon_app'],
+ ], [
+ 'app_name' => $appname,
+ ], __LINE__, __FILE__);
}
catch (Api\Db\Exception\InvalidSql $e)
{
@@ -548,7 +549,7 @@ class setup
* Check if an application has info in the db
*
* @param $appname Application 'name' with a matching $setup_info[$appname] array slice
- * @param $enabled optional, set to False to not enable this app
+ * @return boolean|null null: autoinstalled app which got uninstalled
*/
function app_registered($appname)
{
@@ -563,13 +564,13 @@ class setup
// _debug_array($setup_info[$appname]);
}
- if ($this->db->select($this->applications_table,'COUNT(*)',array('app_name' => $appname),__LINE__,__FILE__)->fetchColumn())
+ if (($enabled = $this->db->select($this->applications_table, 'app_enabled', ['app_name' => $appname], __LINE__,__FILE__)->fetchColumn()) !== false)
{
if(@$GLOBALS['DEBUG'])
{
echo '... app previously registered.';
}
- return True;
+ return $enabled <= -1 ? null : true;
}
if(@$GLOBALS['DEBUG'])
{
@@ -676,10 +677,35 @@ class setup
$this->db->delete(Api\Config::TABLE, array('config_app'=>$appname),__LINE__,__FILE__);
}
//echo 'DELETING application: ' . $appname;
- $this->db->delete($this->applications_table,array('app_name'=>$appname),__LINE__,__FILE__);
+
+ // when uninstalling an autoinstall app, we must mark it deleted in the DB, otherwise it will install again the next update
+ if (file_exists($file = EGW_SERVER_ROOT.'/'.$appname.'/setup/setup.inc.php'))
+ {
+ $setup_info = [];
+ include($file);
+ }
+ if (!empty($setup_info[$appname]['autoinstall']) && $setup_info[$appname]['autoinstall'] === true)
+ {
+ $this->db->update($this->applications_table, [
+ 'app_enabled' => -1,
+ 'app_tables' => '',
+ 'app_version' => 'uninstalled',
+ 'app_index' => null,
+ ], [
+ 'app_name' => $appname,
+ ], __LINE__, __FILE__);
+ }
+ else
+ {
+ $this->db->delete($this->applications_table, ['app_name' => $appname], __LINE__, __FILE__);
+ }
Api\Egw\Applications::invalidate();
+ // unregister hooks, before removing links
+ unset($GLOBALS['egw_info']['apps'][$appname]);
+ Api\Hooks::read(true);
+
// Remove links to the app
Link::unlink(0, $appname);
}
@@ -1219,6 +1245,8 @@ class setup
{
static $table_names = False;
+ if(!is_object($this->db)) $this->loaddb();
+
if (!$table_names || $force_refresh) $table_names = $this->db->table_names();
if (!$table_names) return false;
diff --git a/setup/inc/class.setup_detection.inc.php b/setup/inc/class.setup_detection.inc.php
index 2132310211..cda523d231 100755
--- a/setup/inc/class.setup_detection.inc.php
+++ b/setup/inc/class.setup_detection.inc.php
@@ -62,7 +62,7 @@ class setup_detection
/* one of these tables exists. checking for post/pre beta version */
if($GLOBALS['egw_setup']->applications_table != 'applications')
{
- foreach($GLOBALS['egw_setup']->db->select($GLOBALS['egw_setup']->applications_table,'*',false,__LINE__,__FILE__) as $row)
+ foreach($GLOBALS['egw_setup']->db->select($GLOBALS['egw_setup']->applications_table, '*', 'app_enabled != -1', __LINE__, __FILE__) as $row)
{
$app = $row['app_name'];
if (!isset($setup_info[$app])) // app source no longer there
diff --git a/setup/inc/class.setup_process.inc.php b/setup/inc/class.setup_process.inc.php
index 3377e847c0..74988baa9b 100755
--- a/setup/inc/class.setup_process.inc.php
+++ b/setup/inc/class.setup_process.inc.php
@@ -618,10 +618,10 @@ class setup_process
foreach($setup_info as $appname => &$appdata)
{
// check if app is NOT installed
- if(!$GLOBALS['egw_setup']->app_registered($appname))
+ if (!($registered = $GLOBALS['egw_setup']->app_registered($appname)))
{
- // check if app wants to be automatically installed on update to version x or allways
- if (isset($appdata['autoinstall']) && ($appdata['autoinstall'] === true ||
+ // check if app wants to be automatically installed on update to version x or always (unless uninstalled prior)
+ if (isset($appdata['autoinstall']) && ($appdata['autoinstall'] === true && $registered !== null ||
$appdata['autoinstall'] === $this->api_version_target))
{
$info_c = $this->current(array($appname => $appdata), $DEBUG);
From 6c0aed651f0e8e6d726b8fb3e4c90060d7b59128 Mon Sep 17 00:00:00 2001
From: nathan
Date: Mon, 9 Aug 2021 13:44:43 -0600
Subject: [PATCH 14/30] Api: Add some extra parameters to
Merge::merge_entries() so overridding classes can still use the parent
method, passing in IDs & merge object
---
api/src/Storage/Merge.php | 29 ++++++++++++++++++++++++-----
1 file changed, 24 insertions(+), 5 deletions(-)
diff --git a/api/src/Storage/Merge.php b/api/src/Storage/Merge.php
index 3cf3b840e5..8734fa1c32 100644
--- a/api/src/Storage/Merge.php
+++ b/api/src/Storage/Merge.php
@@ -2333,14 +2333,19 @@ abstract class Merge
/**
* Merge the selected IDs into the given document, save it to the VFS, then
* either open it in the editor or have the browser download the file.
+ *
+ * @param String[]|null $ids Allows extending classes to process IDs in their own way. Leave null to pull from request.
+ * @param Merge|null $document_merge Already instantiated Merge object to do the merge.
+ * @throws Api\Exception
+ * @throws Api\Exception\AssertionFailed
*/
- public static function merge_entries()
+ public static function merge_entries(array $ids = null, Merge &$document_merge = null)
{
- if (class_exists($_REQUEST['merge']) && is_subclass_of($_REQUEST['merge'], 'EGroupware\\Api\\Storage\\Merge'))
+ if (is_null($document_merge) && class_exists($_REQUEST['merge']) && is_subclass_of($_REQUEST['merge'], 'EGroupware\\Api\\Storage\\Merge'))
{
$document_merge = new $_REQUEST['merge']();
}
- else
+ elseif (is_null($document_merge))
{
$document_merge = new Api\Contacts\Merge();
}
@@ -2351,13 +2356,16 @@ abstract class Merge
return;
}
- $ids = is_string($_REQUEST['id']) && strpos($_REQUEST['id'],'[') === FALSE ? explode(',',$_REQUEST['id']) : json_decode($_REQUEST['id'],true);
+ if(is_null(($ids)))
+ {
+ $ids = is_string($_REQUEST['id']) && strpos($_REQUEST['id'], '[') === FALSE ? explode(',', $_REQUEST['id']) : json_decode($_REQUEST['id'], true);
+ }
if($_REQUEST['select_all'] === 'true')
{
$ids = self::get_all_ids($document_merge);
}
- $filename = '';
+ $filename = $document_merge->get_filename($_REQUEST['document']);
$result = $document_merge->merge_file($_REQUEST['document'], $ids, $filename, '', $header);
if(!is_file($result) || !is_readable($result))
@@ -2412,6 +2420,17 @@ abstract class Merge
}
}
+ /**
+ * Generate a filename for the merged file
+ *
+ * Default is just the name of the template
+ * @return string
+ */
+ protected function get_filename($document) : string
+ {
+ return '';
+ }
+
/**
* Get all ids for when they try to do 'Select All', then merge into document
*
From 168d3856200ed4957674375a14d370121bba838d Mon Sep 17 00:00:00 2001
From: Ralf Becker
Date: Tue, 10 Aug 2021 10:39:44 +0200
Subject: [PATCH 15/30] update pear/archive_tar to 1.4.14 to fix upstream
security problem also disable evtl. installed old asert plugin
---
composer.json | 3 +++
composer.lock | 44 ++++++++++++++++++++++++--------------------
2 files changed, 27 insertions(+), 20 deletions(-)
diff --git a/composer.json b/composer.json
index 196af528a9..ec50a93992 100644
--- a/composer.json
+++ b/composer.json
@@ -55,6 +55,9 @@
"platform": {
"php": "7.3"
},
+ "fxp-asset": {
+ "enabled": false
+ },
"sort-packages": true
},
"require": {
diff --git a/composer.lock b/composer.lock
index 7484faaeaf..24850fef95 100644
--- a/composer.lock
+++ b/composer.lock
@@ -213,8 +213,7 @@
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/fengyuanchen/cropper/zipball/30c58b29ee21010e17e58ebab165fbd84285c685",
- "reference": "30c58b29ee21010e17e58ebab165fbd84285c685",
- "shasum": ""
+ "reference": "30c58b29ee21010e17e58ebab165fbd84285c685"
},
"type": "bower-asset-library",
"extra": {
@@ -271,8 +270,7 @@
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/rtfpessoa/diff2html/zipball/4c15a9ca93e50c78f8d02e37273076994888d499",
- "reference": "4c15a9ca93e50c78f8d02e37273076994888d499",
- "shasum": ""
+ "reference": "4c15a9ca93e50c78f8d02e37273076994888d499"
},
"type": "bower-asset-library"
},
@@ -287,8 +285,7 @@
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ftlabs/fastclick/zipball/9977a916739360ad4ffd7aa19b0016bf375e934b",
- "reference": "9977a916739360ad4ffd7aa19b0016bf375e934b",
- "shasum": ""
+ "reference": "9977a916739360ad4ffd7aa19b0016bf375e934b"
},
"type": "bower-asset-library",
"extra": {
@@ -314,8 +311,7 @@
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/jquery/jquery-dist/zipball/5e89585e0121e72ff47de177c5ef604f3089a53d",
- "reference": "5e89585e0121e72ff47de177c5ef604f3089a53d",
- "shasum": ""
+ "reference": "5e89585e0121e72ff47de177c5ef604f3089a53d"
},
"type": "bower-asset-library",
"extra": {
@@ -345,8 +341,7 @@
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/mattbryson/TouchSwipe-Jquery-Plugin/zipball/f0d71bf645779358e1458e212102c5d59b7702ec",
- "reference": "f0d71bf645779358e1458e212102c5d59b7702ec",
- "shasum": ""
+ "reference": "f0d71bf645779358e1458e212102c5d59b7702ec"
},
"type": "bower-asset-library",
"extra": {
@@ -364,8 +359,7 @@
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/components/jqueryui/zipball/396781474d936959061271505f506b78398fe6a2",
- "reference": "396781474d936959061271505f506b78398fe6a2",
- "shasum": ""
+ "reference": "396781474d936959061271505f506b78398fe6a2"
},
"require": {
"bower-asset/jquery": ">=1.6"
@@ -2600,8 +2594,7 @@
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/jquery/jquery/zipball/f852e631ba85af7da4ad7594785e122504e7b233",
- "reference": "f852e631ba85af7da4ad7594785e122504e7b233",
- "shasum": ""
+ "reference": "f852e631ba85af7da4ad7594785e122504e7b233"
},
"require-dev": {
"npm-asset/archiver": "~0.4.2",
@@ -3530,16 +3523,16 @@
},
{
"name": "pear/archive_tar",
- "version": "1.4.13",
+ "version": "1.4.14",
"source": {
"type": "git",
"url": "https://github.com/pear/Archive_Tar.git",
- "reference": "2b87b41178cc6d4ad3cba678a46a1cae49786011"
+ "reference": "4d761c5334c790e45ef3245f0864b8955c562caa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/2b87b41178cc6d4ad3cba678a46a1cae49786011",
- "reference": "2b87b41178cc6d4ad3cba678a46a1cae49786011",
+ "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/4d761c5334c790e45ef3245f0864b8955c562caa",
+ "reference": "4d761c5334c790e45ef3245f0864b8955c562caa",
"shasum": ""
},
"require": {
@@ -3592,7 +3585,17 @@
"archive",
"tar"
],
- "time": "2021-02-16T10:50:50+00:00"
+ "funding": [
+ {
+ "url": "https://github.com/mrook",
+ "type": "github"
+ },
+ {
+ "url": "https://www.patreon.com/michielrook",
+ "type": "patreon"
+ }
+ ],
+ "time": "2021-07-20T13:53:39+00:00"
},
{
"name": "pear/auth_sasl",
@@ -10794,5 +10797,6 @@
"platform-dev": [],
"platform-overrides": {
"php": "7.3"
- }
+ },
+ "plugin-api-version": "1.1.0"
}
From 1f2e2390d3d5585bb3b6e9ece6f590254c8d7f32 Mon Sep 17 00:00:00 2001
From: Ralf Becker
Date: Tue, 10 Aug 2021 12:07:08 +0200
Subject: [PATCH 16/30] Fix installation instructions and wiki links
---
README.md | 31 ++++++++++++++++++-------------
1 file changed, 18 insertions(+), 13 deletions(-)
diff --git a/README.md b/README.md
index 3714e16120..8fce8e01f6 100644
--- a/README.md
+++ b/README.md
@@ -1,24 +1,29 @@
# EGroupware
-| Branch | Status | Tools | Usage |
-| ------ | ------ | ----- | ----- |
-| master | [![Build Status](https://travis-ci.org/EGroupware/egroupware.svg?branch=master)](https://travis-ci.org/EGroupware/egroupware) | | runs unit-tests after each commit |
-| 20.1 | [![Build Status](https://travis-ci.org/EGroupware/egroupware.svg?branch=20.1)](https://travis-ci.org/EGroupware/egroupware) | [![Scrutinizer CI](https://scrutinizer-ci.com/images/logo.png) scrutinizer](https://scrutinizer-ci.com/g/EGroupware/egroupware/) | runs static analysis on our codebase |
-| 19.1 | [![Build Status](https://travis-ci.org/EGroupware/egroupware.svg?branch=19.1)](https://travis-ci.org/EGroupware/egroupware) | | manual testing with unusual browser versions or platforms |
-### Default and prefered installation method for EGroupware is via your package manager:
+| Tools | Usage |
+| ----- | ----- |
+| | runs unit-tests after each commit |
+| [![Scrutinizer CI](https://scrutinizer-ci.com/images/logo.png) scrutinizer](https://scrutinizer-ci.com/g/EGroupware/egroupware/) | runs static analysis on our codebase |
+| | manual testing with unusual browser versions or platforms |
- https://software.opensuse.org/download.html?project=server%3AeGroupWare&package=egroupware-epl
+### Default and prefered installation method for EGroupware is via your Linux package manager:
-### Installing EGroupware 20.1 via Docker:
-EGroupware 20.1 can be installed via Docker, in fact the DEB/RPM packages also does that. Instructions on how to run EGroupware in Docker are in [doc/docker](https://github.com/EGroupware/egroupware/tree/20.1/doc/docker) subdirectory.
+* [Installation & Update instructions](https://github.com/EGroupware/egroupware/wiki/Installation-using-egroupware-docker-RPM-DEB-package)
+* [Distribution specific instructions](https://github.com/EGroupware/egroupware/wiki/Distribution-specific-instructions)
-### Installing EGroupware 19.1 via Docker:
-EGroupware 19.1 can be installed via Docker, in fact the DEB/RPM packages also does that. Instructions on how to run EGroupware in Docker are in [doc/docker](https://github.com/EGroupware/egroupware/tree/19.1/doc/docker) subdirectory.
+> Every other method (including a developer installation by cloning the repo) is way more complicated AND does not include all features, as part's of EGroupware are running in different containers, eg. the push-server!
+### Installing EGroupware 21.1 via Docker for non-Linux environments or not supported Linux distros:
+EGroupware 21.1 can be installed via Docker, in fact the DEB/RPM packages also does that. Instructions on how to run EGroupware in Docker are in our [Wiki](https://github.com/EGroupware/egroupware/wiki/Docker-compose-installation) and in [doc/docker](https://github.com/EGroupware/egroupware/tree/21.1/doc/docker) subdirectory.
-### Installing EGroupware development version:
+### Installing EGroupware development version via Docker:
+* this is the prefered developer installation, as it contains eg. a push-server container
+* https://github.com/EGroupware/egroupware/tree/master/doc/docker/development
+
+### Deprecated EGroupware development installation:
* install composer.phar from https://getcomposer.org/download/
-* optional: for minified JavaScript and CSS install nodejs and grunt
+* for JavaScript dependencies and build install nodejs and npm
+* optional: for minified CSS install grunt
```
apt/yum/zypper install nodejs
npm install -g grunt-cli
From cd4dbd7b05b7118b6b271b7d2e115ff62c4b4c79 Mon Sep 17 00:00:00 2001
From: Ralf Becker
Date: Tue, 10 Aug 2021 14:25:27 +0200
Subject: [PATCH 17/30] finally removing fxp/composer-asset-plugin (required
via egroupware/projectmanager)
---
composer.json | 2 +-
composer.lock | 61 +--------------------------------------------------
2 files changed, 2 insertions(+), 61 deletions(-)
diff --git a/composer.json b/composer.json
index ec50a93992..5560096aeb 100644
--- a/composer.json
+++ b/composer.json
@@ -100,9 +100,9 @@
"npm-asset/as-jqplot": "1.0.*",
"npm-asset/gridster": "0.5.*",
"oomphinc/composer-installers-extender": "^1.1",
- "pear-pear.horde.org/horde_imap_client": "^2.30.3",
"pear-pear.horde.org/horde_compress": "^2.0.8",
"pear-pear.horde.org/horde_crypt": "^2.7.9",
+ "pear-pear.horde.org/horde_imap_client": "^2.30.3",
"pear-pear.horde.org/horde_mail": "^2.1.2",
"pear-pear.horde.org/horde_managesieve": "^1.0.2",
"pear-pear.horde.org/horde_mapi": "^1.0.9",
diff --git a/composer.lock b/composer.lock
index 24850fef95..d7cebdb09e 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "3f243434358f300d4fda0859f4e4b0e9",
+ "content-hash": "ecdc3fddca0c9dcad5155d7aad711dab",
"packages": [
{
"name": "adldap2/adldap2",
@@ -1710,65 +1710,6 @@
],
"time": "2021-02-12T00:02:00+00:00"
},
- {
- "name": "fxp/composer-asset-plugin",
- "version": "v1.4.5",
- "source": {
- "type": "git",
- "url": "https://github.com/fxpio/composer-asset-plugin.git",
- "reference": "6d5cfd0a4f4c3e167d2048eb8f5347309a6bbe10"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/fxpio/composer-asset-plugin/zipball/6d5cfd0a4f4c3e167d2048eb8f5347309a6bbe10",
- "reference": "6d5cfd0a4f4c3e167d2048eb8f5347309a6bbe10",
- "shasum": ""
- },
- "require": {
- "composer-plugin-api": "^1.0",
- "php": ">=5.3.3"
- },
- "require-dev": {
- "composer/composer": "^1.6.0"
- },
- "type": "composer-plugin",
- "extra": {
- "class": "Fxp\\Composer\\AssetPlugin\\FxpAssetPlugin",
- "branch-alias": {
- "dev-master": "1.4-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Fxp\\Composer\\AssetPlugin\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "François Pluchino",
- "email": "francois.pluchino@gmail.com"
- }
- ],
- "description": "NPM/Bower Dependency Manager for Composer",
- "homepage": "https://github.com/fxpio/composer-asset-plugin",
- "keywords": [
- "asset",
- "bower",
- "composer",
- "dependency manager",
- "nodejs",
- "npm",
- "package"
- ],
- "time": "2019-05-01T11:47:39+00:00"
- },
{
"name": "gettext/gettext",
"version": "v4.8.2",
From fdef749794d6afefc7b5bc4f9c93dbcf18aaa50b Mon Sep 17 00:00:00 2001
From: Ralf Becker
Date: Wed, 11 Aug 2021 15:38:06 +0200
Subject: [PATCH 18/30] update jquery-ui to 1.12.1
---
composer.json | 2 +-
composer.lock | 30 +++++++++++++-----------------
doc/ldif2sql.php | 36 ++++++++++++++++++++++++++++++++++++
3 files changed, 50 insertions(+), 18 deletions(-)
create mode 100755 doc/ldif2sql.php
diff --git a/composer.json b/composer.json
index 5560096aeb..1c9b8ea706 100644
--- a/composer.json
+++ b/composer.json
@@ -77,7 +77,7 @@
"bower-asset/fastclick": "1.0.*",
"bower-asset/jquery": "^1.12.4",
"bower-asset/jquery-touchswipe": "1.6.*",
- "bower-asset/jquery-ui": "=1.11.2",
+ "bower-asset/jquery-ui": "=1.12.1",
"egroupware/activesync": "self.version",
"egroupware/adodb-php": "self.version",
"egroupware/bookmarks": "self.version",
diff --git a/composer.lock b/composer.lock
index d7cebdb09e..52b1282068 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "ecdc3fddca0c9dcad5155d7aad711dab",
+ "content-hash": "239bd7fe0d55cfccca0e0ce18c8a7503",
"packages": [
{
"name": "adldap2/adldap2",
@@ -350,27 +350,24 @@
},
{
"name": "bower-asset/jquery-ui",
- "version": "1.11.2",
+ "version": "1.12.1",
"source": {
"type": "git",
"url": "https://github.com/components/jqueryui.git",
- "reference": "396781474d936959061271505f506b78398fe6a2"
+ "reference": "44ecf3794cc56b65954cc19737234a3119d036cc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/components/jqueryui/zipball/396781474d936959061271505f506b78398fe6a2",
- "reference": "396781474d936959061271505f506b78398fe6a2"
+ "url": "https://api.github.com/repos/components/jqueryui/zipball/44ecf3794cc56b65954cc19737234a3119d036cc",
+ "reference": "44ecf3794cc56b65954cc19737234a3119d036cc"
},
"require": {
"bower-asset/jquery": ">=1.6"
},
- "type": "bower-asset-library",
- "extra": {
- "bower-asset-main": [
- "jquery-ui.js"
- ],
- "bower-asset-ignore": []
- }
+ "type": "bower-asset",
+ "license": [
+ "MIT"
+ ]
},
{
"name": "celtic/lti",
@@ -1291,16 +1288,15 @@
"source": {
"type": "git",
"url": "https://github.com/EGroupware/projectmanager.git",
- "reference": "94d182778b2fc04c68c51e295259fa2c09548de3"
+ "reference": "74f9be3b29e9ece0f68201158863aa058443939a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/EGroupware/projectmanager/zipball/94d182778b2fc04c68c51e295259fa2c09548de3",
- "reference": "94d182778b2fc04c68c51e295259fa2c09548de3",
+ "url": "https://api.github.com/repos/EGroupware/projectmanager/zipball/74f9be3b29e9ece0f68201158863aa058443939a",
+ "reference": "74f9be3b29e9ece0f68201158863aa058443939a",
"shasum": ""
},
"require": {
- "fxp/composer-asset-plugin": "^1.2.2",
"npm-asset/dhtmlx-gantt": "~6.2"
},
"type": "egroupware-app",
@@ -1324,7 +1320,7 @@
],
"description": "EGroupware project-management application",
"homepage": "https://www.egroupware.org/",
- "time": "2021-03-30T17:20:21+00:00"
+ "time": "2021-08-10T22:59:19+00:00"
},
{
"name": "egroupware/registration",
diff --git a/doc/ldif2sql.php b/doc/ldif2sql.php
new file mode 100755
index 0000000000..744e7bb832
--- /dev/null
+++ b/doc/ldif2sql.php
@@ -0,0 +1,36 @@
+#!/usr/bin/env php
+
Date: Thu, 29 Jul 2021 14:57:10 +0200
Subject: [PATCH 19/30] Remove tab-and-hold jquery plugin and use native touch
events to implement something similar
---
api/js/egw_action/egw_action_popup.js | 37 +++++++++++++++++++--------
1 file changed, 26 insertions(+), 11 deletions(-)
diff --git a/api/js/egw_action/egw_action_popup.js b/api/js/egw_action/egw_action_popup.js
index 3bbf29537b..0d7afaab8e 100644
--- a/api/js/egw_action/egw_action_popup.js
+++ b/api/js/egw_action/egw_action_popup.js
@@ -12,14 +12,12 @@
/*egw:uses
vendor.bower-asset.jquery.dist.jquery;
egw_menu;
- /api/js/jquery/jquery-tap-and-hold/jquery.tapandhold.js;
*/
import {egwAction, egwActionImplementation, egwActionObject} from './egw_action.js';
import {egwFnct} from './egw_action_common.js';
import {egwMenu, _egw_active_menu} from "./egw_menu.js";
import {EGW_KEY_ENTER, EGW_KEY_MENU} from "./egw_action_constants.js";
-import "../jquery/jquery-tap-and-hold/jquery.tapandhold.js";
if (typeof window._egwActionClasses == "undefined")
window._egwActionClasses = {};
@@ -280,7 +278,32 @@ export function egwPopupActionImplementation()
return false;
};
+ ai._handleTapHold = function (_node, _callback)
+ {
+ let holdTimer = 600;
+ let maxDistanceAllowed = 40;
+ let tapTimeout = null;
+ let startx = 0;
+ let starty = 0;
+ _node.addEventListener('touchstart', function(e){
+ tapTimeout = setTimeout(function(event){
+ _callback(e);
+ }, holdTimer);
+ startx = (e.changedTouches) ? e.changedTouches[0].pageX: e.pageX;
+ starty = (e.changedTouches) ? e.changedTouches[0].pageY: e.pageY;
+ });
+ _node.addEventListener('touchend', function(){
+ clearTimeout(tapTimeout);
+ });
+ _node.addEventListener('touchmove', function(_event){
+ if (tapTimeout == null) return;
+ let e = _event.originalEvent;
+ let x = (e.changedTouches) ? e.changedTouches[0].pageX: e.pageX;
+ let y = (e.changedTouches) ? e.changedTouches[0].pageY: e.pageY;
+ if (Math.sqrt((x-startx)*(x-startx) + (y-starty)+(y-starty)) > maxDistanceAllowed) clearTimeout(tapTimeout);
+ });
+ }
/**
* Registers the handler for the context menu
*
@@ -292,14 +315,6 @@ export function egwPopupActionImplementation()
ai._registerContext = function(_node, _callback, _context)
{
var contextHandler = function(e) {
- if(egwIsMobile())
- {
- if (e.originalEvent.which == 3)
- {
- // Enable onhold trigger till we define a better handler for tree contextmenu
- // return;
- }
- }
//Obtain the event object
if (!e)
@@ -327,7 +342,7 @@ export function egwPopupActionImplementation()
};
// Safari still needs the taphold to trigger contextmenu
// Chrome has default event on touch and hold which acts like right click
- jQuery(_node).bind('taphold', contextHandler);
+ this._handleTapHold(_node, contextHandler);
jQuery(_node).on('contextmenu', contextHandler);
};
From af7b1a0fe04cc27cbb0965afedd6eec6584e1d55 Mon Sep 17 00:00:00 2001
From: Hadi Nategh
Date: Thu, 29 Jul 2021 15:10:12 +0200
Subject: [PATCH 20/30] Remove the tap-and-hold files
---
api/js/jquery/jquery-tap-and-hold/README.txt | 19 ---
.../examples/example1.html | 17 ---
.../jquery-tap-and-hold/jquery.tapandhold.js | 136 ------------------
3 files changed, 172 deletions(-)
delete mode 100644 api/js/jquery/jquery-tap-and-hold/README.txt
delete mode 100644 api/js/jquery/jquery-tap-and-hold/examples/example1.html
delete mode 100644 api/js/jquery/jquery-tap-and-hold/jquery.tapandhold.js
diff --git a/api/js/jquery/jquery-tap-and-hold/README.txt b/api/js/jquery/jquery-tap-and-hold/README.txt
deleted file mode 100644
index 8f30cea8ed..0000000000
--- a/api/js/jquery/jquery-tap-and-hold/README.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-jQuery - Tap and Hold
-=====================
-
- This jQuery plugin lets you detect a tap and hold event on touch interfaces.
-
-How to use it?
-
- 1) Add the jQuery Tap and Hold plugin into your HTML
-
-
-
- 2) Bind a tap and hold handler function to the tap and hold event of an element.
-
- $("#myDiv").bind("taphold", function(event){
- alert("This is a tap and hold!");
- });
-
-You can check a working example in examples/example1.html
-
diff --git a/api/js/jquery/jquery-tap-and-hold/examples/example1.html b/api/js/jquery/jquery-tap-and-hold/examples/example1.html
deleted file mode 100644
index 731038c825..0000000000
--- a/api/js/jquery/jquery-tap-and-hold/examples/example1.html
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
- jQuery - Tap and Hold
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/api/js/jquery/jquery-tap-and-hold/jquery.tapandhold.js b/api/js/jquery/jquery-tap-and-hold/jquery.tapandhold.js
deleted file mode 100644
index b70041d557..0000000000
--- a/api/js/jquery/jquery-tap-and-hold/jquery.tapandhold.js
+++ /dev/null
@@ -1,136 +0,0 @@
-/**
- * Copyright (c) 2011 Zauber S.A.
- *
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @author Guido Marucci Blas - guido@zaubersoftware.com
- * @description Adds a handler for a custom event 'taphold' that handles a
- * tap and hold on touch interfaces.
- */
-(function($) {
- var TAP_AND_HOLD_TRIGGER_TIMER = 600;
- var MAX_DISTANCE_ALLOWED_IN_TAP_AND_HOLD_EVENT = 40;
- var TOUCHSTART = "touchstart";
- var TOUCHEND = "touchend";
- var TOUCHMOVE = "touchmove";
-
- // For debugging only
- // var TOUCHSTART = "mousedown";
- // var TOUCHEND = "mouseup";
- // var TOUCHMOVE = "mousemove";
-
- var tapAndHoldTimer = null;
-
- function calculateEuclideanDistance(x1, y1, x2, y2) {
- var diffX = (x2 - x1);
- var diffY = (y2 - y1);
- return Math.sqrt((diffX * diffX) + (diffY * diffY));
- };
-
- function onTouchStart(event) {
- var e = event.originalEvent;
-
- // Only start detector if and only if one finger is over the widget
- if (!e.touches || (e.targetTouches.length === 1 && e.touches.length === 1)) {
- startTapAndHoldDetector.call(this, event)
- var element = $(this);
- element.bind(TOUCHMOVE, onTouchMove);
- element.bind(TOUCHEND, onTouchEnd);
- } else {
- stopTapAndHoldDetector.call(this);
- }
- };
-
- function onTouchMove(event) {
- if (tapAndHoldTimer == null) {
- return;
- }
-
- var e = event.originalEvent;
- var x = (e.changedTouches) ? e.changedTouches[0].pageX: e.pageX;
- var y = (e.changedTouches) ? e.changedTouches[0].pageY: e.pageY;
-
- var tapAndHoldPoint = $(this).data("taphold.point");
- var euclideanDistance = calculateEuclideanDistance(tapAndHoldPoint.x, tapAndHoldPoint.y, x, y);
-
- if (euclideanDistance > MAX_DISTANCE_ALLOWED_IN_TAP_AND_HOLD_EVENT) {
- stopTapAndHoldDetector.call(this);
- }
- };
-
- function onTouchEnd(event) {
- stopTapAndHoldDetector.call(this);
- };
-
- function onTapAndHold(event) {
- clear.call(this);
- $(this).data("taphold.handler").call(this, event);
- };
-
- function clear() {
- tapAndHoldTimer = null;
- $(this).unbind(TOUCHMOVE, onTouchMove);
- $(this).unbind(TOUCHEND, onTouchEnd);
- };
-
- function startTapAndHoldDetector(event) {
- if (tapAndHoldTimer != null) {
- return;
- }
- var self = this;
- tapAndHoldTimer = setTimeout(function(){
- onTapAndHold.call(self, event)
- }, TAP_AND_HOLD_TRIGGER_TIMER);
-
- // Stores tap x & y
- var e = event.originalEvent;
- var tapAndHoldPoint = {};
- tapAndHoldPoint.x = (e.changedTouches) ? e.changedTouches[0].pageX: e.pageX;
- tapAndHoldPoint.y = (e.changedTouches) ? e.changedTouches[0].pageY: e.pageY;
- $(this).data("taphold.point", tapAndHoldPoint);
- };
-
- function stopTapAndHoldDetector() {
- clearTimeout(tapAndHoldTimer);
- clear.call(this);
- };
-
- $.event.special["taphold"] = {
- setup: function() {
-
- },
-
- add: function(handleObj) {
- $(this).data("taphold.handler", handleObj.handler);
- if (handleObj.data) {
- $(this).bind(TOUCHSTART, handleObj.data, onTouchStart);
- } else {
- $(this).bind(TOUCHSTART, onTouchStart);
- }
- },
-
- remove: function(handleObj) {
- stopTapAndHoldDetector.call(this);
- if (handleObj.data) {
- $(this).unbind(TOUCHSTART, handleObj.data, onTouchStart);
- } else {
- $(this).unbind(TOUCHSTART, onTouchStart);
- }
- },
-
- teardown: function() {
-
- }
- };
-
-})(jQuery);
From a63416f6d64d3165cf81f22adbbfd8ba9733adb4 Mon Sep 17 00:00:00 2001
From: Hadi Nategh
Date: Mon, 2 Aug 2021 15:36:52 +0200
Subject: [PATCH 21/30] Get fw sidebox sortable items working with sortablejs
and removes the jquery.sortable
---
api/js/framework/fw_desktop.js | 57 +++++-----------------------------
package-lock.json | 16 +++++++++-
package.json | 3 +-
3 files changed, 25 insertions(+), 51 deletions(-)
diff --git a/api/js/framework/fw_desktop.js b/api/js/framework/fw_desktop.js
index cbe4fbe234..0a4221d673 100644
--- a/api/js/framework/fw_desktop.js
+++ b/api/js/framework/fw_desktop.js
@@ -25,7 +25,7 @@ import './fw_browser.js';
import './fw_ui.js';
import './fw_classes.js';
import '../jsapi/egw_inheritance.js';
-
+import "sortablejs/Sortable.min.js";
/**
*
* @param {DOMWindow} window
@@ -48,31 +48,15 @@ import '../jsapi/egw_inheritance.js';
init: function()
{
this._super.apply(this,arguments);
-
+ let self = this;
this.setBottomLine(this.parent.entries);
- //Make the base Div sortable. Set all elements with the style "egw_fw_ui_sidemenu_entry_header"
- //as handle
- if(jQuery(this.elemDiv).data('uiSortable'))
- {
- jQuery(this.elemDiv).sortable("destroy");
- }
- jQuery(this.elemDiv).sortable({
- handle: ".egw_fw_ui_sidemenu_entry_header",
- distance: 15,
- start: function(event, ui)
- {
- var parent = ui.item.context._parent;
- parent.isDraged = true;
- parent.parent.startDrag.call(parent.parent);
+
+ Sortable.create(this.elemDiv,{
+ onSort: function (evt) {
+ self.parent.isDraged = true;
+ self.parent.refreshSort();
},
- stop: function(event, ui)
- {
- var parent = ui.item.context._parent;
- parent.parent.stopDrag.call(parent.parent);
- parent.parent.refreshSort.call(parent.parent);
- },
- opacity: 0.7,
- axis: 'y'
+ direction: 'vertical'
});
},
@@ -107,31 +91,6 @@ import '../jsapi/egw_inheritance.js';
this._super.apply(this,arguments);
this.sortCallback = _sortCallback;
},
- /**
- *
- * @returns {undefined}
- */
- startDrag: function()
- {
- if (this.activeEntry)
- {
- jQuery(this.activeEntry.marker).show();
- jQuery(this.elemDiv).sortable("refresh");
- }
- },
-
- /**
- *
- * @returns {undefined}
- */
- stopDrag: function()
- {
- if (this.activeEntry)
- {
- jQuery(this.activeEntry.marker).hide();
- jQuery(this.elemDiv).sortable("refresh");
- }
- },
/**
* Called by the sidemenu elements whenever they were sorted. An array containing
diff --git a/package-lock.json b/package-lock.json
index c36d023484..bcfcdff54b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,7 +12,8 @@
"carbon-components": "^10.37.0",
"carbon-web-components": "^1.14.1",
"lit-element": "^2.5.1",
- "lit-html": "^1.4.1"
+ "lit-html": "^1.4.1",
+ "sortablejs": "^1.14.0"
},
"devDependencies": {
"@babel/core": "^7.14.6",
@@ -31,6 +32,9 @@
"rollup-plugin-terser": "^7.0.2",
"terser": "^4.8.0",
"typescript": "^3.9.7"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
"node_modules/@babel/code-frame": {
@@ -2994,6 +2998,11 @@
"is-arrayish": "^0.3.1"
}
},
+ "node_modules/sortablejs": {
+ "version": "1.14.0",
+ "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz",
+ "integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w=="
+ },
"node_modules/source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
@@ -5704,6 +5713,11 @@
"is-arrayish": "^0.3.1"
}
},
+ "sortablejs": {
+ "version": "1.14.0",
+ "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz",
+ "integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w=="
+ },
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
diff --git a/package.json b/package.json
index 56ddc5b4d5..468845934b 100644
--- a/package.json
+++ b/package.json
@@ -48,7 +48,8 @@
"carbon-components": "^10.37.0",
"carbon-web-components": "^1.14.1",
"lit-element": "^2.5.1",
- "lit-html": "^1.4.1"
+ "lit-html": "^1.4.1",
+ "sortablejs": "^1.14.0"
},
"engines": {
"node": ">=14.0.0"
From 5777ebeb7597e4a9ee3856bb6f9052f34ba0bd91 Mon Sep 17 00:00:00 2001
From: Hadi Nategh
Date: Tue, 3 Aug 2021 15:59:22 +0200
Subject: [PATCH 22/30] Get et2_grid sortable working with sortablejs
---
api/js/etemplate/et2_widget_grid.ts | 89 ++++++++++++++---------------
1 file changed, 44 insertions(+), 45 deletions(-)
diff --git a/api/js/etemplate/et2_widget_grid.ts b/api/js/etemplate/et2_widget_grid.ts
index f265f5bbce..19b2e9d1d1 100644
--- a/api/js/etemplate/et2_widget_grid.ts
+++ b/api/js/etemplate/et2_widget_grid.ts
@@ -117,6 +117,7 @@ export class et2_grid extends et2_DOMWidget implements et2_IDetachedDOM, et2_IAl
private wrapper = null;
private lastRowNode: null;
+ private sortablejs : Sortable = null;
/**
* Constructor
*
@@ -943,56 +944,54 @@ export class et2_grid extends et2_DOMWidget implements et2_IDetachedDOM, et2_IAl
*/
set_sortable(sortable: boolean | Function)
{
- const $node = jQuery(this.getDOMNode());
- if(!sortable)
+ const self = this;
+ let tbody = this.getDOMNode().getElementsByTagName('tbody')[0];
+
+ if(!sortable && this.sortablejs)
{
- $node.sortable("destroy");
+ this.sortablejs.destroy();
return;
}
- // Make sure rows have IDs, so sortable has something to return
- jQuery('tr', this.tbody).each(function(index) {
- const $this = jQuery(this);
-
- // Header does not participate in sorting
- if($this.hasClass('th')) return;
-
- // If row doesn't have an ID, assign the index as ID
- if(!$this.attr("id")) $this.attr("id", index);
- });
-
- const self = this;
-
- // Set up sortable
- $node.sortable({
- // Header does not participate in sorting
- items: "> tbody > tr:not(.th)",
- distance: 15,
- cancel: this.options.sortable_cancel,
- placeholder: this.options.sortable_placeholder,
- containment: this.options.sortable_containment,
- connectWith: this.options.sortable_connectWith,
- update: function(event, ui) {
- self.egw().json(sortable,[
- self.getInstanceManager().etemplate_exec_id,
- $node.sortable("toArray"),
- self.id],
- null,
- self,
- true
- ).sendRequest();
- },
- receive: function (event, ui) {
- if (typeof self.sortable_recieveCallback == 'function') {
- self.sortable_recieveCallback.call(self, event, ui, self.id);
- }
- },
- start: function (event, ui) {
- if (typeof self.options.sortable_startCallback == 'function') {
- self.options.sortable_startCallback.call(self, event, ui, self.id);
- }
+ for (let i =0; i < tbody.children.length; i++)
+ {
+ if (!tbody.children[i].classList.contains('th') && !tbody.children[i].id)
+ {
+ tbody.children[i].setAttribute('id', i.toString());
}
- });
+ }
+
+
+ //todo: fix the sortable import statement
+ import('../../../node_modules/sortablejs/Sortable.min.js').then(function(){
+ this.sortablejs = new Sortable(tbody,{
+ group: this.options.sortable_connectWith,
+ draggable: "tr:not(.th)",
+ filter: this.options.sortable_cancel,
+ ghostClass: this.options.sortable_placeholder,
+ dataIdAttr: 'id',
+ onAdd:function (event) {
+ if (typeof self.options.sortable_recieveCallback == 'function') {
+ self.options.sortable_recieveCallback.call(self, event, this, self.id);
+ }
+ },
+ onStart: function (event, ui) {
+ if (typeof self.options.sortable_startCallback == 'function') {
+ self.options.sortable_startCallback.call(self, event, this, self.id);
+ }
+ },
+ onSort: function (event) {
+ self.egw().json(sortable,[
+ self.getInstanceManager().etemplate_exec_id,
+ self.sortablejs.toArray(),
+ self.id],
+ null,
+ self,
+ true
+ ).sendRequest();
+ },
+ });
+ }.bind(this));
}
/**
From 572908e3004c189159ca1dc75e89759b5dad9549 Mon Sep 17 00:00:00 2001
From: Hadi Nategh
Date: Wed, 4 Aug 2021 11:26:57 +0200
Subject: [PATCH 23/30] Get favorites list sorting working with Sortablejs
---
api/js/etemplate/et2_widget_favorites.ts | 34 +++++++++++++-----------
api/js/jsapi/egw_app.ts | 33 ++++++++---------------
2 files changed, 30 insertions(+), 37 deletions(-)
diff --git a/api/js/etemplate/et2_widget_favorites.ts b/api/js/etemplate/et2_widget_favorites.ts
index e4a304c017..844a148138 100644
--- a/api/js/etemplate/et2_widget_favorites.ts
+++ b/api/js/etemplate/et2_widget_favorites.ts
@@ -177,21 +177,25 @@ export class et2_favorites extends et2_dropdown_button implements et2_INextmatch
}
};
- //Add Sortable handler to nm fav. menu
- jQuery(this.menu).sortable({
-
- items:'li:not([data-id$="add"])',
- placeholder:'ui-fav-sortable-placeholder',
- delay: 250, //(millisecond) delay before the sorting should start
- update: function ()
- {
- self.favSortedList = jQuery(this).sortable('toArray', {attribute:'data-id'});
-
- self.egw().set_preference(self.options.app,'fav_sort_pref',self.favSortedList);
-
- sideBoxDOMNodeSort(self.favSortedList);
- }
- });
+ //todo (@todo-jquery-ui): replace the import statement
+ /**
+ * todo (@todo-jquery-ui): the sorting does not work at the moment becuase of jquery-ui menu being used in order to create dropdown
+ * buttons menu. Once we replace the et2_widget_dropdown_button with web component this should be adapted
+ * and working again.
+ **/
+ import('../../../node_modules/sortablejs/Sortable.min.js').then(function(){
+ let sortablejs = Sortable.create(this.menu[0], {
+ ghostClass: 'ui-fav-sortable-placeholder',
+ draggable: 'li:not([data-id$="add"])',
+ delay: 25,
+ dataIdAttr:'data-id',
+ onSort: function(event){
+ self.favSortedList = sortablejs.toArray();
+ self.egw.set_preference(self.options.app,'fav_sort_pref', self.favSortedList );
+ sideBoxDOMNodeSort(self.favSortedList);
+ }
+ });
+ }.bind(this));
// Add a listener on the delete to remove
this.menu.on("click","div.ui-icon-trash", app[self.options.app], function() {
diff --git a/api/js/jsapi/egw_app.ts b/api/js/jsapi/egw_app.ts
index 0e425e4cbd..ff796750c3 100644
--- a/api/js/jsapi/egw_app.ts
+++ b/api/js/jsapi/egw_app.ts
@@ -781,32 +781,21 @@ export abstract class EgwApp
})
.addClass("ui-helper-clearfix");
- //Add Sortable handler to sideBox fav. menu
- jQuery('ul','#favorite_sidebox_'+this.appname).sortable({
- items:'li:not([data-id$="add"])',
- placeholder:'ui-fav-sortable-placeholder',
- delay:250, //(millisecond) delay before the sorting should start
- helper: function(event, item : any) {
- // We'll need to know which app this is for
- item.attr('data-appname',self.appname);
- // Create custom helper so it can be dragged to Home
- var h_parent = item.parent().parent().clone();
- h_parent.find('li').not('[data-id="'+item.attr('data-id')+'"]').remove();
- h_parent.appendTo('body');
- return h_parent;
- },
- // @ts-ignore
- refreshPositions: true,
- update: function (event, ui)
- {
- // @ts-ignore
- var favSortedList = jQuery(this).sortable('toArray', {attribute:'data-id'});
-
+ //todo (@todo-jquery-ui): replace the import statement
+ import('../../../node_modules/sortablejs/Sortable.min.js').then(function(){
+ let el = document.getElementById('favorite_sidebox_'+this.appname).getElementsByTagName('ul')[0];
+ let sortablejs = Sortable.create(el, {
+ ghostClass: 'ui-fav-sortable-placeholder',
+ draggable: 'li:not([data-id$="add"])',
+ delay: 25,
+ dataIdAttr:'data-id',
+ onSort: function(event){
+ let favSortedList = sortablejs.toArray();
self.egw.set_preference(self.appname,'fav_sort_pref',favSortedList);
-
self._refresh_fav_nm();
}
});
+ }.bind(this));
// Bind favorite de-select
var egw_fw = egw_getFramework();
From af2a2a016e005ffbe17e91746555683a0c6ca88e Mon Sep 17 00:00:00 2001
From: Hadi Nategh
Date: Wed, 4 Aug 2021 11:50:43 +0200
Subject: [PATCH 24/30] Fix broken widget tree actions because of unexpected
DOM Element object
---
api/js/egw_action/egw_action_popup.js | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/api/js/egw_action/egw_action_popup.js b/api/js/egw_action/egw_action_popup.js
index 0d7afaab8e..a697f317b9 100644
--- a/api/js/egw_action/egw_action_popup.js
+++ b/api/js/egw_action/egw_action_popup.js
@@ -285,6 +285,13 @@ export function egwPopupActionImplementation()
let tapTimeout = null;
let startx = 0;
let starty = 0;
+
+ //TODO (todo-jquery): ATM we need to convert the possible given jquery dom node object into DOM Element, this
+ // should be no longer neccessary after removing jQuery nodes.
+ if (_node instanceof jQuery)
+ {
+ _node = _node[0];
+ }
_node.addEventListener('touchstart', function(e){
tapTimeout = setTimeout(function(event){
From 8743bf64b08fff56e07b330ec9dfa03bc7282f1c Mon Sep 17 00:00:00 2001
From: Hadi Nategh
Date: Wed, 4 Aug 2021 14:48:02 +0200
Subject: [PATCH 25/30] Replace nm column jquery-ui sorting with sortablejs
---
api/js/etemplate/et2_extension_nextmatch.ts | 37 ++++++++-------------
api/js/etemplate/et2_widget_grid.ts | 2 +-
2 files changed, 14 insertions(+), 25 deletions(-)
diff --git a/api/js/etemplate/et2_extension_nextmatch.ts b/api/js/etemplate/et2_extension_nextmatch.ts
index f62c874693..a69622ff3d 100644
--- a/api/js/etemplate/et2_extension_nextmatch.ts
+++ b/api/js/etemplate/et2_extension_nextmatch.ts
@@ -2078,30 +2078,19 @@ export class et2_nextmatch extends et2_DOMWidget implements et2_IResizeable, et2
self.selectPopup = null;
};
const $select = jQuery(select.getDOMNode());
- $select.find('.ui-multiselect-checkboxes').sortable({
- placeholder:'ui-fav-sortable-placeholder',
- items:'li[class^="selcolumn_sortable_col"]',
- cancel: 'li[class^="selcolumn_sortable_#"]',
- cursor: "move",
- tolerance: "pointer",
- axis: 'y',
- containment: "parent",
- delay: 250, //(millisecond) delay before the sorting should start
- beforeStop: function(event, ui) {
- jQuery('li[class^="selcolumn_sortable_#"]', this).css({
- opacity: 1
- });
- },
- start: function(event, ui){
- jQuery('li[class^="selcolumn_sortable_#"]', this).css({
- opacity: 0.5
- });
- },
- sort: function (event, ui)
- {
- jQuery( this ).sortable("refreshPositions" );
- }
- });
+
+ //todo (todo-jquery-ui): fix the sortable import statement
+ import('../../../node_modules/sortablejs/Sortable.min.js').then(function(){
+ let sortablejs = Sortable.create(select.getDOMNode().getElementsByClassName('ui-multiselect-checkboxes')[0], {
+ ghostClass: 'ui-fav-sortable-placeholder',
+ draggable: 'li[class^="selcolumn_sortable_col"]',
+ filter: 'li[class^="selcolumn_sortable_#"]',
+ direction: 'vertical',
+ delay: 25,
+
+ });
+ }.bind(this));
+
$select.disableSelection();
$select.find('li[class^="selcolumn_sortable_"]').each(function(i,v){
// @ts-ignore
diff --git a/api/js/etemplate/et2_widget_grid.ts b/api/js/etemplate/et2_widget_grid.ts
index 19b2e9d1d1..0ef49a4b9d 100644
--- a/api/js/etemplate/et2_widget_grid.ts
+++ b/api/js/etemplate/et2_widget_grid.ts
@@ -962,7 +962,7 @@ export class et2_grid extends et2_DOMWidget implements et2_IDetachedDOM, et2_IAl
}
- //todo: fix the sortable import statement
+ //todo (todo-jquery-ui): fix the sortable import statement
import('../../../node_modules/sortablejs/Sortable.min.js').then(function(){
this.sortablejs = new Sortable(tbody,{
group: this.options.sortable_connectWith,
From 23c27659fc70cd5a06c2ca00dd0dab59c6052d74 Mon Sep 17 00:00:00 2001
From: Hadi Nategh
Date: Wed, 4 Aug 2021 16:49:44 +0200
Subject: [PATCH 26/30] Fix broken styling of sidebox app lists
---
api/js/framework/fw_desktop.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/api/js/framework/fw_desktop.js b/api/js/framework/fw_desktop.js
index 0a4221d673..4326852ec7 100644
--- a/api/js/framework/fw_desktop.js
+++ b/api/js/framework/fw_desktop.js
@@ -51,6 +51,7 @@ import "sortablejs/Sortable.min.js";
let self = this;
this.setBottomLine(this.parent.entries);
+ this.elemDiv.classList.add('ui-sortable')
Sortable.create(this.elemDiv,{
onSort: function (evt) {
self.parent.isDraged = true;
From 72699fad30ad76b85ecc3459303ecb7d009dfe6d Mon Sep 17 00:00:00 2001
From: Ralf Becker
Date: Wed, 11 Aug 2021 19:28:01 +0200
Subject: [PATCH 27/30] fix ESM module import (no currly brackets) as suggested
by Guy Bedford
---
api/js/etemplate/et2_extension_nextmatch.ts | 19 +++----
api/js/etemplate/et2_widget_favorites.ts | 26 +++++----
api/js/etemplate/et2_widget_grid.ts | 59 ++++++++++-----------
api/js/jsapi/egw_app.ts | 28 +++++-----
4 files changed, 61 insertions(+), 71 deletions(-)
diff --git a/api/js/etemplate/et2_extension_nextmatch.ts b/api/js/etemplate/et2_extension_nextmatch.ts
index a69622ff3d..66acfc7be1 100644
--- a/api/js/etemplate/et2_extension_nextmatch.ts
+++ b/api/js/etemplate/et2_extension_nextmatch.ts
@@ -67,6 +67,7 @@ import {et2_template} from "./et2_widget_template";
import {egw} from "../jsapi/egw_global";
import {et2_compileLegacyJS} from "./et2_core_legacyJSFunctions";
import {egwIsMobile} from "../egw_action/egw_action_common.js";
+import Sortable from 'sortablejs/modular/sortable.complete.esm.js';
//import {et2_selectAccount} from "./et2_widget_SelectAccount";
@@ -2079,17 +2080,13 @@ export class et2_nextmatch extends et2_DOMWidget implements et2_IResizeable, et2
};
const $select = jQuery(select.getDOMNode());
- //todo (todo-jquery-ui): fix the sortable import statement
- import('../../../node_modules/sortablejs/Sortable.min.js').then(function(){
- let sortablejs = Sortable.create(select.getDOMNode().getElementsByClassName('ui-multiselect-checkboxes')[0], {
- ghostClass: 'ui-fav-sortable-placeholder',
- draggable: 'li[class^="selcolumn_sortable_col"]',
- filter: 'li[class^="selcolumn_sortable_#"]',
- direction: 'vertical',
- delay: 25,
-
- });
- }.bind(this));
+ let sortablejs = Sortable.create(select.getDOMNode().getElementsByClassName('ui-multiselect-checkboxes')[0], {
+ ghostClass: 'ui-fav-sortable-placeholder',
+ draggable: 'li[class^="selcolumn_sortable_col"]',
+ filter: 'li[class^="selcolumn_sortable_#"]',
+ direction: 'vertical',
+ delay: 25,
+ });
$select.disableSelection();
$select.find('li[class^="selcolumn_sortable_"]').each(function(i,v){
diff --git a/api/js/etemplate/et2_widget_favorites.ts b/api/js/etemplate/et2_widget_favorites.ts
index 844a148138..2a993e65d8 100644
--- a/api/js/etemplate/et2_widget_favorites.ts
+++ b/api/js/etemplate/et2_widget_favorites.ts
@@ -19,6 +19,7 @@ import {et2_INextmatchHeader} from "./et2_extension_nextmatch";
import {et2_dropdown_button} from "./et2_widget_dropdown_button";
import {ClassWithAttributes} from "./et2_core_inheritance";
import {egw, egw_getFramework} from "../jsapi/egw_global";
+import Sortable from 'sortablejs/modular/sortable.complete.esm.js';
/**
* Favorites widget, designed for use with a nextmatch widget
@@ -177,25 +178,22 @@ export class et2_favorites extends et2_dropdown_button implements et2_INextmatch
}
};
- //todo (@todo-jquery-ui): replace the import statement
/**
* todo (@todo-jquery-ui): the sorting does not work at the moment becuase of jquery-ui menu being used in order to create dropdown
* buttons menu. Once we replace the et2_widget_dropdown_button with web component this should be adapted
* and working again.
**/
- import('../../../node_modules/sortablejs/Sortable.min.js').then(function(){
- let sortablejs = Sortable.create(this.menu[0], {
- ghostClass: 'ui-fav-sortable-placeholder',
- draggable: 'li:not([data-id$="add"])',
- delay: 25,
- dataIdAttr:'data-id',
- onSort: function(event){
- self.favSortedList = sortablejs.toArray();
- self.egw.set_preference(self.options.app,'fav_sort_pref', self.favSortedList );
- sideBoxDOMNodeSort(self.favSortedList);
- }
- });
- }.bind(this));
+ let sortablejs = Sortable.create(this.menu[0], {
+ ghostClass: 'ui-fav-sortable-placeholder',
+ draggable: 'li:not([data-id$="add"])',
+ delay: 25,
+ dataIdAttr:'data-id',
+ onSort: function(event){
+ self.favSortedList = sortablejs.toArray();
+ self.egw.set_preference(self.options.app,'fav_sort_pref', self.favSortedList );
+ sideBoxDOMNodeSort(self.favSortedList);
+ }
+ });
// Add a listener on the delete to remove
this.menu.on("click","div.ui-icon-trash", app[self.options.app], function() {
diff --git a/api/js/etemplate/et2_widget_grid.ts b/api/js/etemplate/et2_widget_grid.ts
index 0ef49a4b9d..7c15e5f2c1 100644
--- a/api/js/etemplate/et2_widget_grid.ts
+++ b/api/js/etemplate/et2_widget_grid.ts
@@ -23,6 +23,7 @@ import {et2_action_object_impl, et2_DOMWidget} from "./et2_core_DOMWidget";
import {egw_getAppObjectManager, egwActionObject} from '../egw_action/egw_action.js';
import {et2_directChildrenByTagName, et2_filteredNodeIterator, et2_readAttrWithDefault} from "./et2_core_xml";
import {egw} from "../jsapi/egw_global";
+import Sortable from 'sortablejs/modular/sortable.complete.esm.js';
/**
@@ -961,37 +962,33 @@ export class et2_grid extends et2_DOMWidget implements et2_IDetachedDOM, et2_IAl
}
}
-
- //todo (todo-jquery-ui): fix the sortable import statement
- import('../../../node_modules/sortablejs/Sortable.min.js').then(function(){
- this.sortablejs = new Sortable(tbody,{
- group: this.options.sortable_connectWith,
- draggable: "tr:not(.th)",
- filter: this.options.sortable_cancel,
- ghostClass: this.options.sortable_placeholder,
- dataIdAttr: 'id',
- onAdd:function (event) {
- if (typeof self.options.sortable_recieveCallback == 'function') {
- self.options.sortable_recieveCallback.call(self, event, this, self.id);
- }
- },
- onStart: function (event, ui) {
- if (typeof self.options.sortable_startCallback == 'function') {
- self.options.sortable_startCallback.call(self, event, this, self.id);
- }
- },
- onSort: function (event) {
- self.egw().json(sortable,[
- self.getInstanceManager().etemplate_exec_id,
- self.sortablejs.toArray(),
- self.id],
- null,
- self,
- true
- ).sendRequest();
- },
- });
- }.bind(this));
+ this.sortablejs = new Sortable(tbody,{
+ group: this.options.sortable_connectWith,
+ draggable: "tr:not(.th)",
+ filter: this.options.sortable_cancel,
+ ghostClass: this.options.sortable_placeholder,
+ dataIdAttr: 'id',
+ onAdd:function (event) {
+ if (typeof self.options.sortable_recieveCallback == 'function') {
+ self.options.sortable_recieveCallback.call(self, event, this, self.id);
+ }
+ },
+ onStart: function (event, ui) {
+ if (typeof self.options.sortable_startCallback == 'function') {
+ self.options.sortable_startCallback.call(self, event, this, self.id);
+ }
+ },
+ onSort: function (event) {
+ self.egw().json(sortable,[
+ self.getInstanceManager().etemplate_exec_id,
+ self.sortablejs.toArray(),
+ self.id],
+ null,
+ self,
+ true
+ ).sendRequest();
+ },
+ });
}
/**
diff --git a/api/js/jsapi/egw_app.ts b/api/js/jsapi/egw_app.ts
index ff796750c3..b3f0836375 100644
--- a/api/js/jsapi/egw_app.ts
+++ b/api/js/jsapi/egw_app.ts
@@ -17,6 +17,7 @@ import {et2_dialog} from "../etemplate/et2_widget_dialog";
import {et2_createWidget} from "../etemplate/et2_core_widget";
import {et2_favorites} from "../etemplate/et2_widget_favorites";
import type {IegwAppLocal} from "./egw_global";
+import Sortable from 'sortablejs/modular/sortable.complete.esm.js';
/**
* Type for push-message
@@ -781,21 +782,18 @@ export abstract class EgwApp
})
.addClass("ui-helper-clearfix");
- //todo (@todo-jquery-ui): replace the import statement
- import('../../../node_modules/sortablejs/Sortable.min.js').then(function(){
- let el = document.getElementById('favorite_sidebox_'+this.appname).getElementsByTagName('ul')[0];
- let sortablejs = Sortable.create(el, {
- ghostClass: 'ui-fav-sortable-placeholder',
- draggable: 'li:not([data-id$="add"])',
- delay: 25,
- dataIdAttr:'data-id',
- onSort: function(event){
- let favSortedList = sortablejs.toArray();
- self.egw.set_preference(self.appname,'fav_sort_pref',favSortedList);
- self._refresh_fav_nm();
- }
- });
- }.bind(this));
+ let el = document.getElementById('favorite_sidebox_'+this.appname).getElementsByTagName('ul')[0];
+ let sortablejs = Sortable.create(el, {
+ ghostClass: 'ui-fav-sortable-placeholder',
+ draggable: 'li:not([data-id$="add"])',
+ delay: 25,
+ dataIdAttr:'data-id',
+ onSort: function(event){
+ let favSortedList = sortablejs.toArray();
+ self.egw.set_preference(self.appname,'fav_sort_pref',favSortedList);
+ self._refresh_fav_nm();
+ }
+ });
// Bind favorite de-select
var egw_fw = egw_getFramework();
From d07a7ab194adc9ebccb94fe9ced307dbf79cc65f Mon Sep 17 00:00:00 2001
From: Hadi Nategh
Date: Thu, 12 Aug 2021 14:51:38 +0200
Subject: [PATCH 28/30] WIP of replacing bower-asset packages: - Get jquery-ui
and touch event plugin working (although still modular import is not possible
becuase of a wierd issue with jquery-ui tooltip plugin) - Import
timepicker-addon plugin as npm package - Update composer.lock file
---
Gruntfile.js | 16 +-
api/js/egw_action/egw_action_dragdrop.js | 1 -
api/js/etemplate/et2_widget_ajaxSelect.ts | 1 -
api/js/jsapi/egw.js | 2 +-
api/js/jsapi/egw_calendar.js | 3 -
api/src/Framework.php | 6 +-
api/src/Framework/Bundle.php | 2 +-
calendar/templates/default/app.css | 2 +-
calendar/templates/mobile/app.css | 2 +-
calendar/templates/pixelegg/app.css | 2 +-
composer.json | 1 -
composer.lock | 797 ++++++--
package-lock.json | 2182 ++-------------------
package.json | 6 +-
14 files changed, 794 insertions(+), 2229 deletions(-)
diff --git a/Gruntfile.js b/Gruntfile.js
index f5b77010d7..f456ac6312 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -41,7 +41,7 @@ module.exports = function (grunt) {
files: {
"pixelegg/css/pixelegg.min.css": [
"api/js/jquery/chosen/chosen.css",
- "vendor/bower-asset/jquery-ui/themes/redmond/jquery-ui.css",
+ "node_modules/jquery-ui-themes/themes/redmond/jquery-ui.css",
"vendor/egroupware/magicsuggest/magicsuggest.css",
"api/js/jquery/jquery-ui-timepicker-addon.css",
"api/js/jquery/blueimp/css/blueimp-gallery.min.css",
@@ -59,7 +59,7 @@ module.exports = function (grunt) {
],
"pixelegg/css/mobile.min.css": [
"api/js/jquery/chosen/chosen.css",
- "vendor/bower-asset/jquery-ui/themes/redmond/jquery-ui.css",
+ "node_modules/jquery-ui-themes/themes/redmond/jquery-ui.css",
"vendor/egroupware/magicsuggest/magicsuggest.css",
"api/js/jquery/jquery-ui-timepicker-addon.css",
"api/js/jquery/blueimp/css/blueimp-gallery.min.css",
@@ -77,7 +77,7 @@ module.exports = function (grunt) {
],
"pixelegg/mobile/fw_mobile.min.css": [
"api/js/jquery/chosen/chosen.css",
- "vendor/bower-asset/jquery-ui/themes/redmond/jquery-ui.css",
+ "node_modules/jquery-ui-themes/themes/redmond/jquery-ui.css",
"vendor/egroupware/magicsuggest/magicsuggest.css",
"api/js/jquery/jquery-ui-timepicker-addon.css",
"api/js/jquery/blueimp/css/blueimp-gallery.min.css",
@@ -94,7 +94,7 @@ module.exports = function (grunt) {
],
"pixelegg/css/monochrome.min.css": [
"api/js/jquery/chosen/chosen.css",
- "vendor/bower-asset/jquery-ui/themes/redmond/jquery-ui.css",
+ "node_modules/jquery-ui-themes/themes/redmond/jquery-ui.css",
"vendor/egroupware/magicsuggest/magicsuggest.css",
"api/js/jquery/jquery-ui-timepicker-addon.css",
"api/js/jquery/blueimp/css/blueimp-gallery.min.css",
@@ -112,7 +112,7 @@ module.exports = function (grunt) {
],
"pixelegg/css/modern.min.css": [
"api/js/jquery/chosen/chosen.css",
- "vendor/bower-asset/jquery-ui/themes/redmond/jquery-ui.css",
+ "node_modules/jquery-ui-themes/themes/redmond/jquery-ui.css",
"vendor/egroupware/magicsuggest/magicsuggest.css",
"api/js/jquery/jquery-ui-timepicker-addon.css",
"api/js/jquery/blueimp/css/blueimp-gallery.min.css",
@@ -134,7 +134,7 @@ module.exports = function (grunt) {
files: {
"jdots/css/high-contrast.min.css": [
"api/js/jquery/chosen/chosen.css",
- "vendor/bower-asset/jquery-ui/themes/redmond/jquery-ui.css",
+ "node_modules/jquery-ui-themes/themes/redmond/jquery-ui.css",
"vendor/egroupware/magicsuggest/magicsuggest.css",
"api/js/jquery/jquery-ui-timepicker-addon.css",
"api/js/jquery/blueimp/css/blueimp-gallery.min.css",
@@ -155,7 +155,7 @@ module.exports = function (grunt) {
],
"jdots/css/jdots.min.css": [
"api/js/jquery/chosen/chosen.css",
- "vendor/bower-asset/jquery-ui/themes/redmond/jquery-ui.css",
+ "node_modules/jquery-ui-themes/themes/redmond/jquery-ui.css",
"vendor/egroupware/magicsuggest/magicsuggest.css",
"api/js/jquery/jquery-ui-timepicker-addon.css",
"api/js/jquery/blueimp/css/blueimp-gallery.min.css",
@@ -175,7 +175,7 @@ module.exports = function (grunt) {
],
"jdots/css/orange-green.min.css": [
"api/js/jquery/chosen/chosen.css",
- "vendor/bower-asset/jquery-ui/themes/redmond/jquery-ui.css",
+ "node_modules/jquery-ui-themes/themes/redmond/jquery-ui.css",
"vendor/egroupware/magicsuggest/magicsuggest.css",
"api/js/jquery/jquery-ui-timepicker-addon.css",
"api/js/jquery/blueimp/css/blueimp-gallery.min.css",
diff --git a/api/js/egw_action/egw_action_dragdrop.js b/api/js/egw_action/egw_action_dragdrop.js
index e64b6ad0e0..b137f3d54a 100644
--- a/api/js/egw_action/egw_action_dragdrop.js
+++ b/api/js/egw_action/egw_action_dragdrop.js
@@ -13,7 +13,6 @@
egw_action_common;
egw_action_popup;
vendor.bower-asset.jquery.dist.jquery;
- /vendor/bower-asset/jquery-ui/jquery-ui.js;
*/
import {egwAction,egwActionImplementation} from "./egw_action.js";
diff --git a/api/js/etemplate/et2_widget_ajaxSelect.ts b/api/js/etemplate/et2_widget_ajaxSelect.ts
index 0389e088f7..e6b9cc49bb 100644
--- a/api/js/etemplate/et2_widget_ajaxSelect.ts
+++ b/api/js/etemplate/et2_widget_ajaxSelect.ts
@@ -12,7 +12,6 @@
/*egw:uses
/vendor/bower-asset/jquery/dist/jquery.js;
- /vendor/bower-asset/jquery-ui/jquery-ui.js;
et2_core_inputWidget;
et2_core_valueWidget;
*/
diff --git a/api/js/jsapi/egw.js b/api/js/jsapi/egw.js
index f6fe6127df..248bae94ac 100644
--- a/api/js/jsapi/egw.js
+++ b/api/js/jsapi/egw.js
@@ -78,7 +78,7 @@ window.app = {classes: {}};
window.egw_appName = egw_script.getAttribute('data-app');
// split includes in legacy js and modules
- const legacy_js_regexp = /\/dhtmlx|jquery-ui/;
+ const legacy_js_regexp = /\/dhtmlx|jquery-ui-dist/;
// check if egw object was injected by window open
if (typeof window.egw == 'undefined')
diff --git a/api/js/jsapi/egw_calendar.js b/api/js/jsapi/egw_calendar.js
index 3aec2a3079..a1ba88267a 100644
--- a/api/js/jsapi/egw_calendar.js
+++ b/api/js/jsapi/egw_calendar.js
@@ -10,7 +10,6 @@
*/
/*egw:uses
- /vendor/bower-asset/jquery-ui/jquery-ui.js;
jquery.jquery-ui-timepicker-addon;
egw_core;
@@ -19,8 +18,6 @@
egw_css;
*/
-import "../../../vendor/bower-asset/jquery/dist/jquery.min.js";
-//import "../../../vendor/bower-asset/jquery-ui/jquery-ui.js";
import "../jquery/jquery.noconflict.js";
//import "../jquery/jquery-ui-timepicker-addon.js";
import './egw_core.js';
diff --git a/api/src/Framework.php b/api/src/Framework.php
index 74db8d5a58..5d0af42bfc 100644
--- a/api/src/Framework.php
+++ b/api/src/Framework.php
@@ -1003,7 +1003,7 @@ abstract class Framework extends Framework\Extra
self::includeCSS('/api/js/jquery/chosen/chosen.css');
// eTemplate2 uses jQueryUI, so load it first so et2 can override if needed
- self::includeCSS("/vendor/bower-asset/jquery-ui/themes/redmond/jquery-ui.css");
+ self::includeCSS("/node_modules/jquery-ui-themes/themes/redmond/jquery-ui.css");
// eTemplate2 - load in top so sidebox has styles too
self::includeCSS('/api/templates/default/etemplate2.css');
@@ -1074,8 +1074,8 @@ abstract class Framework extends Framework\Extra
));
}
// manually load old legacy javascript dhtmlx & jQuery-UI via script tag
- self::includeJS('/vendor/bower-asset/jquery-ui/jquery-ui.js');
- self::includeJS('/api/js/jquery/jquery-ui-timepicker-addon.js');
+ self::includeJS('/node_modules/jquery-ui-dist/jquery-ui.min.js');
+ self::includeJS('/node_modules/jquery-ui-timepicker-addon/dist/jquery-ui-timepicker-addon.min.js');
self::includeJS('/api/js/dhtmlxtree/codebase/dhtmlxcommon.js');
self::includeJS('/api/js/dhtmlxMenu/sources/dhtmlxmenu.js');
self::includeJS('/api/js/dhtmlxMenu/sources/ext/dhtmlxmenu_ext.js');
diff --git a/api/src/Framework/Bundle.php b/api/src/Framework/Bundle.php
index 7b4d6bda89..1f9ec22404 100644
--- a/api/src/Framework/Bundle.php
+++ b/api/src/Framework/Bundle.php
@@ -241,7 +241,7 @@ class Bundle
// generate api bundle
$inc_mgr->include_js_file('/vendor/bower-asset/jquery/dist/jquery.js');
$inc_mgr->include_js_file('/api/js/jquery/jquery.noconflict.js');
- $inc_mgr->include_js_file('/vendor/bower-asset/jquery-ui/jquery-ui.js');
+ $inc_mgr->include_js_file('/node_modules/jquery-ui-dist/jquery-ui.min.js');
$inc_mgr->include_js_file('/api/js/jsapi/jsapi.js');
$inc_mgr->include_js_file('/api/js/egw_json.js');
$inc_mgr->include_js_file('/api/js/jsapi/egw.js');
diff --git a/calendar/templates/default/app.css b/calendar/templates/default/app.css
index f2cc841130..fd092f0edd 100644
--- a/calendar/templates/default/app.css
+++ b/calendar/templates/default/app.css
@@ -85,7 +85,7 @@
vertical-align: top;
display: inline-block;
background-color: transparent;
- background-image: url(../../../vendor/bower-asset/jquery-ui/themes/redmond/images/ui-icons_469bdd_256x240.png);
+ background-image: url(../../../node_modules/jquery-ui-themes/themes/redmond/images/ui-icons_469bdd_256x240.png);
border: none;
box-shadow: none;
}
diff --git a/calendar/templates/mobile/app.css b/calendar/templates/mobile/app.css
index 396678f40a..c2d1f18cb9 100644
--- a/calendar/templates/mobile/app.css
+++ b/calendar/templates/mobile/app.css
@@ -107,7 +107,7 @@
vertical-align: top;
display: inline-block;
background-color: transparent;
- background-image: url(../../../vendor/bower-asset/jquery-ui/themes/redmond/images/ui-icons_469bdd_256x240.png);
+ background-image: url(../../../node_modules/jquery-ui-themes/themes/redmond/images/ui-icons_469bdd_256x240.png);
border: none;
box-shadow: none;
}
diff --git a/calendar/templates/pixelegg/app.css b/calendar/templates/pixelegg/app.css
index a9c254db7e..78adefc8c3 100755
--- a/calendar/templates/pixelegg/app.css
+++ b/calendar/templates/pixelegg/app.css
@@ -95,7 +95,7 @@
vertical-align: top;
display: inline-block;
background-color: transparent;
- background-image: url(../../../vendor/bower-asset/jquery-ui/themes/redmond/images/ui-icons_469bdd_256x240.png);
+ background-image: url(../../../node_modules/jquery-ui-themes/themes/redmond/images/ui-icons_469bdd_256x240.png);
border: none;
box-shadow: none;
}
diff --git a/composer.json b/composer.json
index 1c9b8ea706..fe7bf8388c 100644
--- a/composer.json
+++ b/composer.json
@@ -77,7 +77,6 @@
"bower-asset/fastclick": "1.0.*",
"bower-asset/jquery": "^1.12.4",
"bower-asset/jquery-touchswipe": "1.6.*",
- "bower-asset/jquery-ui": "=1.12.1",
"egroupware/activesync": "self.version",
"egroupware/adodb-php": "self.version",
"egroupware/bookmarks": "self.version",
diff --git a/composer.lock b/composer.lock
index 52b1282068..e3ab293e45 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "239bd7fe0d55cfccca0e0ce18c8a7503",
+ "content-hash": "248556c07e4f1fd832c970489cdc9a5a",
"packages": [
{
"name": "adldap2/adldap2",
@@ -215,48 +215,9 @@
"url": "https://api.github.com/repos/fengyuanchen/cropper/zipball/30c58b29ee21010e17e58ebab165fbd84285c685",
"reference": "30c58b29ee21010e17e58ebab165fbd84285c685"
},
- "type": "bower-asset-library",
- "extra": {
- "bower-asset-main": [
- "dist/cropper.js",
- "dist/cropper.css"
- ],
- "bower-asset-ignore": [
- "**/.*",
- "node_modules",
- "bower_components",
- "tests",
- "test",
- "examples",
- "assets",
- "demo",
- "docs",
- "gulpfile.js",
- "CONTRIBUTING.md",
- "ISSUE_TEMPLATE.md"
- ]
- },
+ "type": "bower-asset",
"license": [
"MIT"
- ],
- "description": "A simple jQuery image cropping plugin.",
- "keywords": [
- "crop",
- "cropper",
- "cropping",
- "css",
- "development",
- "front-end",
- "html",
- "image",
- "javascript",
- "jquery",
- "move",
- "plugin",
- "rotate",
- "scale",
- "web",
- "zoom"
]
},
{
@@ -272,7 +233,7 @@
"url": "https://api.github.com/repos/rtfpessoa/diff2html/zipball/4c15a9ca93e50c78f8d02e37273076994888d499",
"reference": "4c15a9ca93e50c78f8d02e37273076994888d499"
},
- "type": "bower-asset-library"
+ "type": "bower-asset"
},
{
"name": "bower-asset/fastclick",
@@ -287,18 +248,7 @@
"url": "https://api.github.com/repos/ftlabs/fastclick/zipball/9977a916739360ad4ffd7aa19b0016bf375e934b",
"reference": "9977a916739360ad4ffd7aa19b0016bf375e934b"
},
- "type": "bower-asset-library",
- "extra": {
- "bower-asset-main": "lib/fastclick.js",
- "bower-asset-ignore": [
- "**/.*",
- "component.json",
- "package.json",
- "Makefile",
- "tests",
- "examples"
- ]
- }
+ "type": "bower-asset"
},
{
"name": "bower-asset/jquery",
@@ -313,21 +263,9 @@
"url": "https://api.github.com/repos/jquery/jquery-dist/zipball/5e89585e0121e72ff47de177c5ef604f3089a53d",
"reference": "5e89585e0121e72ff47de177c5ef604f3089a53d"
},
- "type": "bower-asset-library",
- "extra": {
- "bower-asset-main": "dist/jquery.js",
- "bower-asset-ignore": [
- "package.json"
- ]
- },
+ "type": "bower-asset",
"license": [
"MIT"
- ],
- "keywords": [
- "browser",
- "javascript",
- "jquery",
- "library"
]
},
{
@@ -343,31 +281,7 @@
"url": "https://api.github.com/repos/mattbryson/TouchSwipe-Jquery-Plugin/zipball/f0d71bf645779358e1458e212102c5d59b7702ec",
"reference": "f0d71bf645779358e1458e212102c5d59b7702ec"
},
- "type": "bower-asset-library",
- "extra": {
- "bower-asset-main": "./jquery.touchSwipe.js"
- }
- },
- {
- "name": "bower-asset/jquery-ui",
- "version": "1.12.1",
- "source": {
- "type": "git",
- "url": "https://github.com/components/jqueryui.git",
- "reference": "44ecf3794cc56b65954cc19737234a3119d036cc"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/components/jqueryui/zipball/44ecf3794cc56b65954cc19737234a3119d036cc",
- "reference": "44ecf3794cc56b65954cc19737234a3119d036cc"
- },
- "require": {
- "bower-asset/jquery": ">=1.6"
- },
- "type": "bower-asset",
- "license": [
- "MIT"
- ]
+ "type": "bower-asset"
},
{
"name": "celtic/lti",
@@ -1080,12 +994,12 @@
{
"name": "Chuck Hagenbuch",
"email": "chuck@horde.org",
- "role": "lead"
+ "role": "Lead"
},
{
"name": "Jan Schneider",
"email": "jan@horde.org",
- "role": "lead"
+ "role": "Lead"
},
{
"name": "Michael J Rubinsky",
@@ -1199,7 +1113,7 @@
],
"description": "Compiled version of magicsuggest customized for EGroupware project.",
"homepage": "https://github.com/EGroupware/magicsuggest",
- "time": "2018-06-21T10:14:03+00:00"
+ "time": "2018-06-21T13:36:37+00:00"
},
{
"name": "egroupware/news_admin",
@@ -2155,6 +2069,16 @@
"JWS",
"jwt"
],
+ "funding": [
+ {
+ "url": "https://github.com/lcobucci",
+ "type": "github"
+ },
+ {
+ "url": "https://www.patreon.com/lcobucci",
+ "type": "patreon"
+ }
+ ],
"time": "2021-02-16T09:40:01+00:00"
},
{
@@ -2413,112 +2337,36 @@
"version": "1.0.8",
"dist": {
"type": "tar",
- "url": "https://registry.npmjs.org/as-jqplot/-/as-jqplot-1.0.8.tgz",
- "shasum": "97061e0f32167597b87c98dfd42c93f10a2fb249"
- },
- "type": "npm-asset-library",
- "extra": {
- "npm-asset-main": "index.js",
- "npm-asset-directories": [],
- "npm-asset-scripts": {
- "test": "echo \"Error: no test specified\" && exit 1"
- }
+ "url": "https://registry.npmjs.org/as-jqplot/-/as-jqplot-1.0.8.tgz"
},
+ "type": "npm-asset",
"license": [
"ISC"
- ],
- "authors": [
- ""
- ],
- "description": "AS jqPlot Shim"
+ ]
},
{
"name": "npm-asset/dhtmlx-gantt",
"version": "6.2.7",
"dist": {
"type": "tar",
- "url": "https://registry.npmjs.org/dhtmlx-gantt/-/dhtmlx-gantt-6.2.7.tgz",
- "shasum": "86689f36c1f10e2bfaa5126445b4c560d82b4587"
- },
- "type": "npm-asset-library",
- "extra": {
- "npm-asset-bugs": {
- "url": "https://github.com/DHTMLX/gantt/issues"
- },
- "npm-asset-main": "codebase/dhtmlxgantt.js",
- "npm-asset-directories": [],
- "npm-asset-repository": {
- "type": "git",
- "url": "git+https://github.com/DHTMLX/gantt.git"
- }
+ "url": "https://registry.npmjs.org/dhtmlx-gantt/-/dhtmlx-gantt-6.2.7.tgz"
},
+ "type": "npm-asset",
"license": [
"GPL-2.0"
- ],
- "authors": [
- {
- "name": "DHTMLX"
- }
- ],
- "description": "An open source JavaScript Gantt chart that helps you illustrate a project schedule in a nice-looking chart.",
- "homepage": "https://github.com/DHTMLX/gantt#readme",
- "keywords": [
- "browser",
- "calendar",
- "chart",
- "dhtmlx",
- "dhtmlxgantt",
- "gantt",
- "gantt chart",
- "scheduler",
- "timeline"
- ],
- "time": "2019-10-11T10:48:39+00:00"
+ ]
},
{
"name": "npm-asset/gridster",
"version": "0.5.6",
"dist": {
"type": "tar",
- "url": "https://registry.npmjs.org/gridster/-/gridster-0.5.6.tgz",
- "shasum": "4024713aabd559093a72e9b713f1e41f9bded76f"
+ "url": "https://registry.npmjs.org/gridster/-/gridster-0.5.6.tgz"
},
"require": {
"npm-asset/jquery": "2.0.3"
},
- "require-dev": {
- "npm-asset/bower": "~0.9.2",
- "npm-asset/grunt": "~0.4.1",
- "npm-asset/grunt-bump": "0.0.11",
- "npm-asset/grunt-contrib-concat": "~0.1.3",
- "npm-asset/grunt-contrib-cssmin": "~0.5.0",
- "npm-asset/grunt-contrib-jshint": "~0.3.0",
- "npm-asset/grunt-contrib-uglify": "~0.2.0",
- "npm-asset/grunt-contrib-watch": "~0.3.1",
- "npm-asset/grunt-contrib-yuidoc": "~0.4.0",
- "npm-asset/grunt-conventional-changelog": "~1.0.0",
- "npm-asset/qunitjs": "~1.11.0"
- },
- "type": "npm-asset-library",
- "extra": {
- "npm-asset-bugs": {
- "url": "https://github.com/ducksboard/gridster.js/issues"
- },
- "npm-asset-directories": [],
- "npm-asset-repository": {
- "type": "git",
- "url": "git://github.com/ducksboard/gridster.js.git"
- },
- "npm-asset-scripts": []
- },
- "authors": [
- {
- "name": "ducksboard",
- "email": "hackers@ducksboard.com"
- }
- ],
- "description": "a drag-and-drop multi-column jQuery grid plugin",
- "homepage": "http://gridster.net/"
+ "type": "npm-asset"
},
{
"name": "npm-asset/jquery",
@@ -2533,36 +2381,7 @@
"url": "https://api.github.com/repos/jquery/jquery/zipball/f852e631ba85af7da4ad7594785e122504e7b233",
"reference": "f852e631ba85af7da4ad7594785e122504e7b233"
},
- "require-dev": {
- "npm-asset/archiver": "~0.4.2",
- "npm-asset/grunt": "0.4.1",
- "npm-asset/grunt-compare-size": "~0.4.0",
- "npm-asset/grunt-contrib-jshint": "0.3.0",
- "npm-asset/grunt-contrib-uglify": "0.2.0",
- "npm-asset/grunt-contrib-watch": "0.3.1",
- "npm-asset/grunt-git-authors": "1.2.0",
- "npm-asset/grunt-update-submodules": "0.2.0",
- "npm-asset/gzip-js": "0.3.1",
- "npm-asset/testswarm": "~1.1.0"
- },
- "type": "npm-asset-library",
- "extra": {
- "npm-asset-bugs": {
- "url": "http://bugs.jquery.com"
- },
- "npm-asset-repository": {
- "type": "git",
- "url": "https://github.com/jquery/jquery.git"
- }
- },
- "authors": [
- {
- "name": "jQuery Foundation and other contributors",
- "url": "https://github.com/jquery/jquery/blob/master/AUTHORS.txt"
- }
- ],
- "description": "JavaScript library for DOM operations",
- "homepage": "http://jquery.com"
+ "type": "npm-asset"
},
{
"name": "oomphinc/composer-installers-extender",
@@ -4157,6 +3976,12 @@
}
],
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
+ "funding": [
+ {
+ "url": "https://github.com/Synchro",
+ "type": "github"
+ }
+ ],
"time": "2021-06-16T14:33:43+00:00"
},
{
@@ -4248,6 +4073,20 @@
"x.509",
"x509"
],
+ "funding": [
+ {
+ "url": "https://github.com/terrafrost",
+ "type": "github"
+ },
+ {
+ "url": "https://www.patreon.com/phpseclib",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib",
+ "type": "tidelift"
+ }
+ ],
"time": "2021-04-06T13:56:45+00:00"
},
{
@@ -6528,6 +6367,20 @@
"caching",
"psr6"
],
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"time": "2021-03-16T09:10:13+00:00"
},
{
@@ -6590,6 +6443,20 @@
"interoperability",
"standards"
],
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"time": "2021-03-23T23:28:01+00:00"
},
{
@@ -6654,6 +6521,20 @@
],
"description": "Symfony Config Component",
"homepage": "https://symfony.com",
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"time": "2020-03-27T16:54:36+00:00"
},
{
@@ -6726,6 +6607,20 @@
],
"description": "Eases the creation of beautiful and testable command line interfaces",
"homepage": "https://symfony.com",
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"time": "2021-03-26T09:23:24+00:00"
},
{
@@ -6783,6 +6678,20 @@
],
"description": "Symfony Debug Component",
"homepage": "https://symfony.com",
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"time": "2020-08-10T07:47:39+00:00"
},
{
@@ -6856,6 +6765,20 @@
],
"description": "Symfony DependencyInjection Component",
"homepage": "https://symfony.com",
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"time": "2020-03-30T10:09:30+00:00"
},
{
@@ -6913,6 +6836,20 @@
],
"description": "Symfony ErrorHandler Component",
"homepage": "https://symfony.com",
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"time": "2020-08-17T09:56:45+00:00"
},
{
@@ -6983,6 +6920,20 @@
],
"description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com",
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"time": "2020-08-13T14:18:44+00:00"
},
{
@@ -7045,6 +6996,20 @@
"interoperability",
"standards"
],
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"time": "2020-07-06T13:19:58+00:00"
},
{
@@ -7095,6 +7060,20 @@
],
"description": "Symfony Filesystem Component",
"homepage": "https://symfony.com",
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"time": "2020-03-27T16:54:36+00:00"
},
{
@@ -7139,6 +7118,20 @@
],
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"time": "2021-02-15T18:55:04+00:00"
},
{
@@ -7265,6 +7258,20 @@
],
"description": "Symfony FrameworkBundle",
"homepage": "https://symfony.com",
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"time": "2020-12-11T16:32:02+00:00"
},
{
@@ -7320,6 +7327,20 @@
],
"description": "Symfony HttpFoundation Component",
"homepage": "https://symfony.com",
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"time": "2020-08-17T07:39:58+00:00"
},
{
@@ -7411,6 +7432,20 @@
],
"description": "Symfony HttpKernel Component",
"homepage": "https://symfony.com",
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"time": "2020-09-02T08:09:29+00:00"
},
{
@@ -7473,6 +7508,20 @@
"mime",
"mime-type"
],
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"time": "2020-08-17T09:56:45+00:00"
},
{
@@ -7535,6 +7584,20 @@
"polyfill",
"portable"
],
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"time": "2021-01-07T16:49:33+00:00"
},
{
@@ -7606,6 +7669,20 @@
"portable",
"shim"
],
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"time": "2020-08-04T06:02:08+00:00"
},
{
@@ -7673,6 +7750,20 @@
"portable",
"shim"
],
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"time": "2020-07-14T12:35:20+00:00"
},
{
@@ -7736,6 +7827,20 @@
"portable",
"shim"
],
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"time": "2020-07-14T12:35:20+00:00"
},
{
@@ -7855,6 +7960,20 @@
"portable",
"shim"
],
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"time": "2020-07-14T12:35:20+00:00"
},
{
@@ -7914,6 +8033,20 @@
"portable",
"shim"
],
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"time": "2020-07-14T12:35:20+00:00"
},
{
@@ -7976,6 +8109,20 @@
"portable",
"shim"
],
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"time": "2020-07-14T12:35:20+00:00"
},
{
@@ -8042,6 +8189,20 @@
"portable",
"shim"
],
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"time": "2020-07-14T12:35:20+00:00"
},
{
@@ -8170,6 +8331,20 @@
"uri",
"url"
],
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"time": "2020-03-30T11:41:10+00:00"
},
{
@@ -8305,6 +8480,20 @@
"debug",
"dump"
],
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"time": "2020-08-17T07:31:35+00:00"
},
{
@@ -8361,6 +8550,20 @@
"instantiate",
"serialize"
],
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"time": "2021-01-27T10:01:46+00:00"
},
{
@@ -8420,6 +8623,20 @@
],
"description": "Symfony Yaml Component",
"homepage": "https://symfony.com",
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
"time": "2020-03-30T11:41:10+00:00"
},
{
@@ -8757,6 +8974,20 @@
"constructor",
"instantiate"
],
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+ "type": "tidelift"
+ }
+ ],
"time": "2020-11-10T18:47:58+00:00"
},
{
@@ -9046,6 +9277,12 @@
"object",
"object graph"
],
+ "funding": [
+ {
+ "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+ "type": "tidelift"
+ }
+ ],
"time": "2020-11-13T09:40:50+00:00"
},
{
@@ -9478,6 +9715,12 @@
"testing",
"xunit"
],
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
"time": "2021-03-28T07:26:59+00:00"
},
{
@@ -9528,6 +9771,12 @@
"filesystem",
"iterator"
],
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
"time": "2020-09-28T05:57:25+00:00"
},
{
@@ -9581,6 +9830,12 @@
"keywords": [
"process"
],
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
"time": "2020-09-28T05:58:55+00:00"
},
{
@@ -9630,6 +9885,12 @@
"keywords": [
"template"
],
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
"time": "2020-10-26T05:33:50+00:00"
},
{
@@ -9679,6 +9940,12 @@
"keywords": [
"timer"
],
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
"time": "2020-10-26T13:16:10+00:00"
},
{
@@ -9768,6 +10035,16 @@
"testing",
"xunit"
],
+ "funding": [
+ {
+ "url": "https://phpunit.de/donate.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
"time": "2020-10-02T03:54:37+00:00"
},
{
@@ -9854,6 +10131,12 @@
],
"description": "Library for parsing CLI options",
"homepage": "https://github.com/sebastianbergmann/cli-parser",
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
"time": "2020-09-28T06:08:49+00:00"
},
{
@@ -9900,6 +10183,12 @@
],
"description": "Collection of value objects that represent the PHP code units",
"homepage": "https://github.com/sebastianbergmann/code-unit",
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
"time": "2020-10-26T13:08:54+00:00"
},
{
@@ -9945,6 +10234,12 @@
],
"description": "Looks up which function or method a line of code belongs to",
"homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
"time": "2020-09-28T05:30:19+00:00"
},
{
@@ -10009,6 +10304,12 @@
"compare",
"equality"
],
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
"time": "2020-10-26T15:49:45+00:00"
},
{
@@ -10056,6 +10357,12 @@
],
"description": "Library for calculating the complexity of PHP code units",
"homepage": "https://github.com/sebastianbergmann/complexity",
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
"time": "2020-10-26T15:52:27+00:00"
},
{
@@ -10112,6 +10419,12 @@
"unidiff",
"unified diff"
],
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
"time": "2020-10-26T13:10:38+00:00"
},
{
@@ -10165,6 +10478,12 @@
"environment",
"hhvm"
],
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
"time": "2020-09-28T05:52:38+00:00"
},
{
@@ -10232,6 +10551,12 @@
"export",
"exporter"
],
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
"time": "2020-09-28T05:24:23+00:00"
},
{
@@ -10286,6 +10611,12 @@
"keywords": [
"global state"
],
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
"time": "2020-10-26T15:55:19+00:00"
},
{
@@ -10333,6 +10664,12 @@
],
"description": "Library for counting the lines of code in PHP source code",
"homepage": "https://github.com/sebastianbergmann/lines-of-code",
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
"time": "2020-11-28T06:42:11+00:00"
},
{
@@ -10380,6 +10717,12 @@
],
"description": "Traverses array structures and object graphs to enumerate all referenced objects",
"homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
"time": "2020-10-26T13:12:34+00:00"
},
{
@@ -10425,6 +10768,12 @@
],
"description": "Allows reflection of object attributes, including inherited and non-public ones",
"homepage": "https://github.com/sebastianbergmann/object-reflector/",
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
"time": "2020-10-26T13:14:26+00:00"
},
{
@@ -10478,6 +10827,12 @@
],
"description": "Provides functionality to recursively process PHP variables",
"homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
"time": "2020-10-26T13:17:30+00:00"
},
{
@@ -10523,6 +10878,12 @@
],
"description": "Provides a list of PHP built-in functions that operate on resources",
"homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
"time": "2020-09-28T06:45:17+00:00"
},
{
@@ -10569,6 +10930,12 @@
],
"description": "Collection of value objects that represent the types of the PHP type system",
"homepage": "https://github.com/sebastianbergmann/type",
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
"time": "2020-10-26T13:18:59+00:00"
},
{
@@ -10612,6 +10979,12 @@
],
"description": "Library that helps with managing the version number of Git-hosted PHP projects",
"homepage": "https://github.com/sebastianbergmann/version",
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
"time": "2020-09-28T06:39:44+00:00"
},
{
@@ -10652,6 +11025,12 @@
}
],
"description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
"time": "2020-07-12T23:59:07+00:00"
},
{
diff --git a/package-lock.json b/package-lock.json
index bcfcdff54b..ca29723f13 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,8 +9,10 @@
"version": "21.1.20210316",
"license": "GPL-2.0",
"dependencies": {
- "carbon-components": "^10.37.0",
- "carbon-web-components": "^1.14.1",
+ "@andxor/jquery-ui-touch-punch-fix": "^1.0.2",
+ "jquery-ui-dist": "^1.12.1",
+ "jquery-ui-themes": "^1.12.0",
+ "jquery-ui-timepicker-addon": "^1.6.3",
"lit-element": "^2.5.1",
"lit-html": "^1.4.1",
"sortablejs": "^1.14.0"
@@ -37,10 +39,19 @@
"node": ">=14.0.0"
}
},
+ "node_modules/@andxor/jquery-ui-touch-punch-fix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@andxor/jquery-ui-touch-punch-fix/-/jquery-ui-touch-punch-fix-1.0.2.tgz",
+ "integrity": "sha512-hdphePfQOxknA9BympZUtbIsXyogz7TgmKykIJrwjS67F4sIhaQJBhlijjkB4xfgFbHPjcJSr9jer09hDuPnaw==",
+ "dependencies": {
+ "jquery-ui": "^1.12.1"
+ }
+ },
"node_modules/@babel/code-frame": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz",
"integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==",
+ "dev": true,
"dependencies": {
"@babel/highlight": "^7.14.5"
},
@@ -91,6 +102,7 @@
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz",
"integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==",
+ "dev": true,
"dependencies": {
"@babel/types": "^7.14.5",
"jsesc": "^2.5.1",
@@ -154,6 +166,7 @@
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz",
"integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==",
+ "dev": true,
"dependencies": {
"@babel/helper-get-function-arity": "^7.14.5",
"@babel/template": "^7.14.5",
@@ -167,6 +180,7 @@
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz",
"integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==",
+ "dev": true,
"dependencies": {
"@babel/types": "^7.14.5"
},
@@ -178,6 +192,7 @@
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz",
"integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==",
+ "dev": true,
"dependencies": {
"@babel/types": "^7.14.5"
},
@@ -280,6 +295,7 @@
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz",
"integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==",
+ "dev": true,
"dependencies": {
"@babel/types": "^7.14.5"
},
@@ -291,6 +307,7 @@
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz",
"integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==",
+ "dev": true,
"engines": {
"node": ">=6.9.0"
}
@@ -322,6 +339,7 @@
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
"integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
+ "dev": true,
"dependencies": {
"@babel/helper-validator-identifier": "^7.14.5",
"chalk": "^2.0.0",
@@ -335,6 +353,7 @@
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
"dependencies": {
"color-convert": "^1.9.0"
},
@@ -346,6 +365,7 @@
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
@@ -359,6 +379,7 @@
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
"dependencies": {
"color-name": "1.1.3"
}
@@ -366,12 +387,14 @@
"node_modules/@babel/highlight/node_modules/color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
},
"node_modules/@babel/highlight/node_modules/has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true,
"engines": {
"node": ">=4"
}
@@ -380,6 +403,7 @@
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
"dependencies": {
"has-flag": "^3.0.0"
},
@@ -391,6 +415,7 @@
"version": "7.14.7",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz",
"integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==",
+ "dev": true,
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -447,21 +472,11 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/runtime": {
- "version": "7.14.6",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz",
- "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==",
- "dependencies": {
- "regenerator-runtime": "^0.13.4"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
"node_modules/@babel/template": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz",
"integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==",
+ "dev": true,
"dependencies": {
"@babel/code-frame": "^7.14.5",
"@babel/parser": "^7.14.5",
@@ -475,6 +490,7 @@
"version": "7.14.7",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz",
"integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==",
+ "dev": true,
"dependencies": {
"@babel/code-frame": "^7.14.5",
"@babel/generator": "^7.14.5",
@@ -494,6 +510,7 @@
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz",
"integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==",
+ "dev": true,
"dependencies": {
"@babel/helper-validator-identifier": "^7.14.5",
"to-fast-properties": "^2.0.0"
@@ -502,82 +519,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/@carbon/telemetry": {
- "version": "0.0.0-alpha.6",
- "resolved": "https://registry.npmjs.org/@carbon/telemetry/-/telemetry-0.0.0-alpha.6.tgz",
- "integrity": "sha512-DCE8ui/tFi+qvCH+mewbUbWzsiq5Ko3HU1lgrVbpjWv1LfswLKFmMg4Os+PmX6edYoBj39qVChJPeaN/UyfJDw==",
- "dependencies": {
- "@babel/parser": "^7.12.5",
- "@babel/traverse": "^7.12.5",
- "ci-info": "^2.0.0",
- "configstore": "^5.0.1",
- "fast-glob": "^3.2.4",
- "fs-extra": "^9.0.1",
- "got": "^11.8.0",
- "semver": "^7.3.2",
- "winston": "^3.3.3",
- "yargs": "^16.1.1"
- },
- "bin": {
- "carbon-telemetry": "bin/carbon-telemetry.js"
- }
- },
- "node_modules/@carbon/telemetry/node_modules/semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@dabh/diagnostics": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz",
- "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==",
- "dependencies": {
- "colorspace": "1.1.x",
- "enabled": "2.0.x",
- "kuler": "^2.0.0"
- }
- },
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz",
- "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==",
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
"node_modules/@rollup/plugin-babel": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz",
@@ -656,50 +597,12 @@
"rollup": "^1.20.0||^2.0.0"
}
},
- "node_modules/@sindresorhus/is": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.1.tgz",
- "integrity": "sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/is?sponsor=1"
- }
- },
- "node_modules/@szmarczak/http-timer": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz",
- "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==",
- "dependencies": {
- "defer-to-connect": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@types/cacheable-request": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz",
- "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==",
- "dependencies": {
- "@types/http-cache-semantics": "*",
- "@types/keyv": "*",
- "@types/node": "*",
- "@types/responselike": "*"
- }
- },
"node_modules/@types/estree": {
"version": "0.0.39",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
"integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
"dev": true
},
- "node_modules/@types/http-cache-semantics": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz",
- "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A=="
- },
"node_modules/@types/jquery": {
"version": "3.5.5",
"resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.5.tgz",
@@ -718,18 +621,11 @@
"@types/jquery": "*"
}
},
- "node_modules/@types/keyv": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz",
- "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==",
- "dependencies": {
- "@types/node": "*"
- }
- },
"node_modules/@types/node": {
"version": "15.12.4",
"resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.4.tgz",
- "integrity": "sha512-zrNj1+yqYF4WskCMOHwN+w9iuD12+dGm0rQ35HLl9/Ouuq52cEtd0CH9qMgrdNmi5ejC1/V7vKEXYubB+65DkA=="
+ "integrity": "sha512-zrNj1+yqYF4WskCMOHwN+w9iuD12+dGm0rQ35HLl9/Ouuq52cEtd0CH9qMgrdNmi5ejC1/V7vKEXYubB+65DkA==",
+ "dev": true
},
"node_modules/@types/resolve": {
"version": "1.17.1",
@@ -740,14 +636,6 @@
"@types/node": "*"
}
},
- "node_modules/@types/responselike": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
- "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==",
- "dependencies": {
- "@types/node": "*"
- }
- },
"node_modules/@types/sizzle": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz",
@@ -808,15 +696,8 @@
"node_modules/async": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz",
- "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw=="
- },
- "node_modules/at-least-node": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
- "engines": {
- "node": ">= 4.0.0"
- }
+ "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==",
+ "dev": true
},
"node_modules/balanced-match": {
"version": "1.0.2",
@@ -838,6 +719,7 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
"dependencies": {
"fill-range": "^7.0.1"
},
@@ -886,31 +768,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/cacheable-lookup": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
- "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==",
- "engines": {
- "node": ">=10.6.0"
- }
- },
- "node_modules/cacheable-request": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz",
- "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==",
- "dependencies": {
- "clone-response": "^1.0.2",
- "get-stream": "^5.1.0",
- "http-cache-semantics": "^4.0.0",
- "keyv": "^4.0.0",
- "lowercase-keys": "^2.0.0",
- "normalize-url": "^6.0.1",
- "responselike": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/caniuse-lite": {
"version": "1.0.30001239",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001239.tgz",
@@ -921,36 +778,6 @@
"url": "https://opencollective.com/browserslist"
}
},
- "node_modules/carbon-components": {
- "version": "10.37.0",
- "resolved": "https://registry.npmjs.org/carbon-components/-/carbon-components-10.37.0.tgz",
- "integrity": "sha512-LHReeqzzieP/q/xAHfKJNWLdWhOkr7+DIVZkrQGPf6kZYj5H8tb1KYKOIhasvCNRxJ2es8QJXuH7XW0JoLDfdQ==",
- "hasInstallScript": true,
- "dependencies": {
- "@carbon/telemetry": "0.0.0-alpha.6",
- "flatpickr": "4.6.1",
- "lodash.debounce": "^4.0.8",
- "warning": "^3.0.0"
- },
- "engines": {
- "node": ">=6.x"
- }
- },
- "node_modules/carbon-web-components": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/carbon-web-components/-/carbon-web-components-1.14.1.tgz",
- "integrity": "sha512-NR0EcIkSH5Qw1UURf4Jt6c+xr979kERfTatbH/Fvgj7MjTvLFyy8mHuhLhpJgybTHDNOtWs+a+VyYQIAhwzX2w==",
- "dependencies": {
- "@babel/runtime": "^7.8.0",
- "lodash-es": "^4.17.0"
- },
- "peerDependencies": {
- "carbon-components": "~10.37.0",
- "flatpickr": "4.6.1",
- "lit-element": "^2.3.0",
- "lit-html": "^1.2.0"
- }
- },
"node_modules/chalk": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
@@ -967,11 +794,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/ci-info": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
- "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="
- },
"node_modules/clean-css": {
"version": "4.1.11",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz",
@@ -984,56 +806,11 @@
"node": ">= 4.0"
}
},
- "node_modules/cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "node_modules/cliui/node_modules/ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cliui/node_modules/strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dependencies": {
- "ansi-regex": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/clone-response": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
- "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
- "dependencies": {
- "mimic-response": "^1.0.0"
- }
- },
- "node_modules/color": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz",
- "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==",
- "dependencies": {
- "color-convert": "^1.9.1",
- "color-string": "^1.5.2"
- }
- },
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
@@ -1044,29 +821,8 @@
"node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "node_modules/color-string": {
- "version": "1.5.5",
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz",
- "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==",
- "dependencies": {
- "color-name": "^1.0.0",
- "simple-swizzle": "^0.2.2"
- }
- },
- "node_modules/color/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/color/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
},
"node_modules/colorette": {
"version": "1.2.2",
@@ -1083,15 +839,6 @@
"node": ">=0.1.90"
}
},
- "node_modules/colorspace": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz",
- "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==",
- "dependencies": {
- "color": "3.0.x",
- "text-hex": "1.0.x"
- }
- },
"node_modules/commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
@@ -1104,22 +851,6 @@
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
- "node_modules/configstore": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
- "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==",
- "dependencies": {
- "dot-prop": "^5.2.0",
- "graceful-fs": "^4.1.2",
- "make-dir": "^3.0.0",
- "unique-string": "^2.0.0",
- "write-file-atomic": "^3.0.0",
- "xdg-basedir": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/convert-source-map": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
@@ -1129,19 +860,6 @@
"safe-buffer": "~5.1.1"
}
},
- "node_modules/core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
- },
- "node_modules/crypto-random-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
- "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/dateformat": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
@@ -1155,6 +873,7 @@
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
"integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+ "dev": true,
"dependencies": {
"ms": "2.1.2"
},
@@ -1167,31 +886,6 @@
}
}
},
- "node_modules/decompress-response": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
- "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
- "dependencies": {
- "mimic-response": "^3.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/decompress-response/node_modules/mimic-response": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
- "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/deepmerge": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
@@ -1201,14 +895,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/defer-to-connect": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
- "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==",
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/detect-file": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
@@ -1218,17 +904,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/dot-prop": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
- "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
- "dependencies": {
- "is-obj": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/duplexer": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
@@ -1241,28 +916,11 @@
"integrity": "sha512-WsmJym1TMeHVndjPjczTFbnRR/c4sbzg8fBFtuhlb2Sru3i/S1VGpzDSrv/It8ctMU2bj8G7g7/O3FzYMGw6eA==",
"dev": true
},
- "node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "node_modules/enabled": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz",
- "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ=="
- },
- "node_modules/end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dependencies": {
- "once": "^1.4.0"
- }
- },
"node_modules/escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true,
"engines": {
"node": ">=6"
}
@@ -1271,6 +929,7 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true,
"engines": {
"node": ">=0.8.0"
}
@@ -1327,39 +986,6 @@
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
"dev": true
},
- "node_modules/fast-glob": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.6.tgz",
- "integrity": "sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ==",
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/fast-safe-stringify": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz",
- "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA=="
- },
- "node_modules/fastq": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz",
- "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==",
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "node_modules/fecha": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz",
- "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q=="
- },
"node_modules/figures": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
@@ -1377,6 +1003,7 @@
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -1437,16 +1064,6 @@
"node": ">= 0.10"
}
},
- "node_modules/flatpickr": {
- "version": "4.6.1",
- "resolved": "https://registry.npmjs.org/flatpickr/-/flatpickr-4.6.1.tgz",
- "integrity": "sha512-3ULSxbXmcMIRzer/2jLNweoqHpwDvsjEawO2FUd9UFR8uPwLM+LruZcPDpuZStcEgbQKhuFOfXo4nYdGladSNw=="
- },
- "node_modules/fn.name": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
- "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw=="
- },
"node_modules/for-in": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
@@ -1468,20 +1085,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "dependencies": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -1517,28 +1120,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/getobject": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.1.tgz",
@@ -1568,17 +1149,6 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/global-modules": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
@@ -1625,39 +1195,11 @@
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true,
"engines": {
"node": ">=4"
}
},
- "node_modules/got": {
- "version": "11.8.2",
- "resolved": "https://registry.npmjs.org/got/-/got-11.8.2.tgz",
- "integrity": "sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==",
- "dependencies": {
- "@sindresorhus/is": "^4.0.0",
- "@szmarczak/http-timer": "^4.0.5",
- "@types/cacheable-request": "^6.0.1",
- "@types/responselike": "^1.0.0",
- "cacheable-lookup": "^5.0.3",
- "cacheable-request": "^7.0.1",
- "decompress-response": "^6.0.0",
- "http2-wrapper": "^1.0.0-beta.5.2",
- "lowercase-keys": "^2.0.0",
- "p-cancelable": "^2.0.0",
- "responselike": "^2.0.0"
- },
- "engines": {
- "node": ">=10.19.0"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/got?sponsor=1"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.6",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
- "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ=="
- },
"node_modules/grunt": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/grunt/-/grunt-1.4.1.tgz",
@@ -1943,23 +1485,6 @@
"node": "*"
}
},
- "node_modules/http-cache-semantics": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
- "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ=="
- },
- "node_modules/http2-wrapper": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz",
- "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==",
- "dependencies": {
- "quick-lru": "^5.1.1",
- "resolve-alpn": "^1.0.0"
- },
- "engines": {
- "node": ">=10.19.0"
- }
- },
"node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -1972,14 +1497,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
- "engines": {
- "node": ">=0.8.19"
- }
- },
"node_modules/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -1993,7 +1510,8 @@
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
},
"node_modules/ini": {
"version": "1.3.8",
@@ -2020,11 +1538,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/is-arrayish": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
- "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
- },
"node_modules/is-core-module": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz",
@@ -2041,22 +1554,16 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true,
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/is-glob": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
"dependencies": {
"is-extglob": "^2.1.1"
},
@@ -2074,18 +1581,11 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
"engines": {
"node": ">=0.12.0"
}
},
- "node_modules/is-obj": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
- "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/is-plain-object": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
@@ -2110,19 +1610,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/is-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
- "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
- },
"node_modules/is-unc-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
@@ -2144,11 +1631,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -2190,10 +1672,34 @@
"node": ">=8"
}
},
+ "node_modules/jquery-ui": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/jquery-ui/-/jquery-ui-1.12.1.tgz",
+ "integrity": "sha1-vLQEXI3QU5wTS8FIjN0+dop6nlE="
+ },
+ "node_modules/jquery-ui-dist": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/jquery-ui-dist/-/jquery-ui-dist-1.12.1.tgz",
+ "integrity": "sha1-XAgV08xvkP9fqvWyaKbiO0ypBPo="
+ },
+ "node_modules/jquery-ui-themes": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/jquery-ui-themes/-/jquery-ui-themes-1.12.0.tgz",
+ "integrity": "sha1-pXugrZaADYRSL+dok//L3mcIHVE="
+ },
+ "node_modules/jquery-ui-timepicker-addon": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/jquery-ui-timepicker-addon/-/jquery-ui-timepicker-addon-1.6.3.tgz",
+ "integrity": "sha1-gDfDmwtjAoLdCzfditf8XhFjN38=",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
},
"node_modules/js-yaml": {
"version": "3.14.1",
@@ -2212,6 +1718,7 @@
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true,
"bin": {
"jsesc": "bin/jsesc"
},
@@ -2219,11 +1726,6 @@
"node": ">=4"
}
},
- "node_modules/json-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
- "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
- },
"node_modules/json5": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
@@ -2239,30 +1741,6 @@
"node": ">=6"
}
},
- "node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/keyv": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz",
- "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==",
- "dependencies": {
- "json-buffer": "3.0.1"
- }
- },
- "node_modules/kuler": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz",
- "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A=="
- },
"node_modules/liftup": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz",
@@ -2316,80 +1794,6 @@
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true
},
- "node_modules/lodash-es": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
- "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
- },
- "node_modules/lodash.debounce": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
- "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168="
- },
- "node_modules/logform": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz",
- "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==",
- "dependencies": {
- "colors": "^1.2.1",
- "fast-safe-stringify": "^2.0.4",
- "fecha": "^4.2.0",
- "ms": "^2.1.1",
- "triple-beam": "^1.3.0"
- }
- },
- "node_modules/logform/node_modules/colors": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
- "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
- "engines": {
- "node": ">=0.1.90"
- }
- },
- "node_modules/loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "dependencies": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- },
- "bin": {
- "loose-envify": "cli.js"
- }
- },
- "node_modules/lowercase-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dependencies": {
- "semver": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/make-iterator": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
@@ -2441,18 +1845,11 @@
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
"dev": true
},
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "engines": {
- "node": ">= 8"
- }
- },
"node_modules/micromatch": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
"integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
+ "dev": true,
"dependencies": {
"braces": "^3.0.1",
"picomatch": "^2.2.3"
@@ -2461,14 +1858,6 @@
"node": ">=8.6"
}
},
- "node_modules/mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
@@ -2502,7 +1891,8 @@
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
},
"node_modules/node-releases": {
"version": "1.1.73",
@@ -2522,17 +1912,6 @@
"nopt": "bin/nopt.js"
}
},
- "node_modules/normalize-url": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
- "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/number-is-nan": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
@@ -2595,18 +1974,11 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
"dependencies": {
"wrappy": "1"
}
},
- "node_modules/one-time": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz",
- "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==",
- "dependencies": {
- "fn.name": "1.x.x"
- }
- },
"node_modules/os-homedir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
@@ -2635,14 +2007,6 @@
"os-tmpdir": "^1.0.0"
}
},
- "node_modules/p-cancelable": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz",
- "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/parse-filepath": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
@@ -2706,6 +2070,7 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
"integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
+ "dev": true,
"engines": {
"node": ">=8.6"
},
@@ -2725,50 +2090,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
- },
- "node_modules/pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/quick-lru": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
- "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
@@ -2778,19 +2099,6 @@
"safe-buffer": "^5.1.0"
}
},
- "node_modules/readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/rechoir": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz",
@@ -2803,19 +2111,6 @@
"node": ">= 0.10"
}
},
- "node_modules/regenerator-runtime": {
- "version": "0.13.7",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
- "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew=="
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/resolve": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
@@ -2829,11 +2124,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/resolve-alpn": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.1.2.tgz",
- "integrity": "sha512-8OyfzhAtA32LVUsJSke3auIyINcwdh5l3cvYKdKO0nvsYSKuiLfTM5i78PJswFPT8y6cPW+L1v6/hE95chcpDA=="
- },
"node_modules/resolve-dir": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
@@ -2847,23 +2137,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/responselike": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz",
- "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==",
- "dependencies": {
- "lowercase-keys": "^2.0.0"
- }
- },
- "node_modules/reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
"node_modules/rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
@@ -2935,32 +2208,11 @@
"node": ">=10"
}
},
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
"node_modules/safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
},
"node_modules/safer-buffer": {
"version": "2.1.2",
@@ -2972,6 +2224,7 @@
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
"bin": {
"semver": "bin/semver.js"
}
@@ -2985,19 +2238,6 @@
"randombytes": "^2.1.0"
}
},
- "node_modules/signal-exit": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
- "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
- },
- "node_modules/simple-swizzle": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
- "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
- "dependencies": {
- "is-arrayish": "^0.3.1"
- }
- },
"node_modules/sortablejs": {
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz",
@@ -3007,6 +2247,7 @@
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -3036,73 +2277,6 @@
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"dev": true
},
- "node_modules/stack-trace": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
- "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/string_decoder/node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/string-width": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
- "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string-width/node_modules/ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string-width/node_modules/strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dependencies": {
- "ansi-regex": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/strip-ansi": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
@@ -3150,15 +2324,11 @@
"node": ">=0.10.0"
}
},
- "node_modules/text-hex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz",
- "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg=="
- },
"node_modules/to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
"integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true,
"engines": {
"node": ">=4"
}
@@ -3167,6 +2337,7 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
"dependencies": {
"is-number": "^7.0.0"
},
@@ -3174,11 +2345,6 @@
"node": ">=8.0"
}
},
- "node_modules/triple-beam": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
- "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw=="
- },
"node_modules/tslib": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
@@ -3186,14 +2352,6 @@
"dev": true,
"peer": true
},
- "node_modules/typedarray-to-buffer": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "dependencies": {
- "is-typedarray": "^1.0.0"
- }
- },
"node_modules/typescript": {
"version": "3.9.9",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz",
@@ -3229,29 +2387,11 @@
"node": "*"
}
},
- "node_modules/unique-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
- "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==",
- "dependencies": {
- "crypto-random-string": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
},
"node_modules/v8flags": {
"version": "3.2.0",
@@ -3265,14 +2405,6 @@
"node": ">= 0.10"
}
},
- "node_modules/warning": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
- "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
- "dependencies": {
- "loose-envify": "^1.0.0"
- }
- },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -3288,176 +2420,27 @@
"node": ">= 8"
}
},
- "node_modules/winston": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz",
- "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==",
- "dependencies": {
- "@dabh/diagnostics": "^2.0.2",
- "async": "^3.1.0",
- "is-stream": "^2.0.0",
- "logform": "^2.2.0",
- "one-time": "^1.0.0",
- "readable-stream": "^3.4.0",
- "stack-trace": "0.0.x",
- "triple-beam": "^1.3.0",
- "winston-transport": "^4.4.0"
- },
- "engines": {
- "node": ">= 6.4.0"
- }
- },
- "node_modules/winston-transport": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz",
- "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==",
- "dependencies": {
- "readable-stream": "^2.3.7",
- "triple-beam": "^1.2.0"
- },
- "engines": {
- "node": ">= 6.4.0"
- }
- },
- "node_modules/winston-transport/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "node_modules/winston-transport/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrap-ansi/node_modules/ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/wrap-ansi/node_modules/strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dependencies": {
- "ansi-regex": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
- },
- "node_modules/write-file-atomic": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
- "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
- "dependencies": {
- "imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
- }
- },
- "node_modules/xdg-basedir": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz",
- "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- },
- "node_modules/yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "dependencies": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
- "engines": {
- "node": ">=10"
- }
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
}
},
"dependencies": {
+ "@andxor/jquery-ui-touch-punch-fix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@andxor/jquery-ui-touch-punch-fix/-/jquery-ui-touch-punch-fix-1.0.2.tgz",
+ "integrity": "sha512-hdphePfQOxknA9BympZUtbIsXyogz7TgmKykIJrwjS67F4sIhaQJBhlijjkB4xfgFbHPjcJSr9jer09hDuPnaw==",
+ "requires": {
+ "jquery-ui": "^1.12.1"
+ }
+ },
"@babel/code-frame": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz",
"integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==",
+ "dev": true,
"requires": {
"@babel/highlight": "^7.14.5"
}
@@ -3495,6 +2478,7 @@
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz",
"integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==",
+ "dev": true,
"requires": {
"@babel/types": "^7.14.5",
"jsesc": "^2.5.1",
@@ -3540,6 +2524,7 @@
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz",
"integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==",
+ "dev": true,
"requires": {
"@babel/helper-get-function-arity": "^7.14.5",
"@babel/template": "^7.14.5",
@@ -3550,6 +2535,7 @@
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz",
"integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==",
+ "dev": true,
"requires": {
"@babel/types": "^7.14.5"
}
@@ -3558,6 +2544,7 @@
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz",
"integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==",
+ "dev": true,
"requires": {
"@babel/types": "^7.14.5"
}
@@ -3636,6 +2623,7 @@
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz",
"integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==",
+ "dev": true,
"requires": {
"@babel/types": "^7.14.5"
}
@@ -3643,7 +2631,8 @@
"@babel/helper-validator-identifier": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz",
- "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg=="
+ "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==",
+ "dev": true
},
"@babel/helper-validator-option": {
"version": "7.14.5",
@@ -3666,6 +2655,7 @@
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
"integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
+ "dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.14.5",
"chalk": "^2.0.0",
@@ -3676,6 +2666,7 @@
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
"requires": {
"color-convert": "^1.9.0"
}
@@ -3684,6 +2675,7 @@
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
"requires": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
@@ -3694,6 +2686,7 @@
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
"requires": {
"color-name": "1.1.3"
}
@@ -3701,17 +2694,20 @@
"color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
},
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
},
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
"requires": {
"has-flag": "^3.0.0"
}
@@ -3721,7 +2717,8 @@
"@babel/parser": {
"version": "7.14.7",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz",
- "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA=="
+ "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==",
+ "dev": true
},
"@babel/plugin-syntax-typescript": {
"version": "7.14.5",
@@ -3754,18 +2751,11 @@
"@babel/plugin-transform-typescript": "^7.14.5"
}
},
- "@babel/runtime": {
- "version": "7.14.6",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz",
- "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==",
- "requires": {
- "regenerator-runtime": "^0.13.4"
- }
- },
"@babel/template": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz",
"integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==",
+ "dev": true,
"requires": {
"@babel/code-frame": "^7.14.5",
"@babel/parser": "^7.14.5",
@@ -3776,6 +2766,7 @@
"version": "7.14.7",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz",
"integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==",
+ "dev": true,
"requires": {
"@babel/code-frame": "^7.14.5",
"@babel/generator": "^7.14.5",
@@ -3792,71 +2783,12 @@
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz",
"integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==",
+ "dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.14.5",
"to-fast-properties": "^2.0.0"
}
},
- "@carbon/telemetry": {
- "version": "0.0.0-alpha.6",
- "resolved": "https://registry.npmjs.org/@carbon/telemetry/-/telemetry-0.0.0-alpha.6.tgz",
- "integrity": "sha512-DCE8ui/tFi+qvCH+mewbUbWzsiq5Ko3HU1lgrVbpjWv1LfswLKFmMg4Os+PmX6edYoBj39qVChJPeaN/UyfJDw==",
- "requires": {
- "@babel/parser": "^7.12.5",
- "@babel/traverse": "^7.12.5",
- "ci-info": "^2.0.0",
- "configstore": "^5.0.1",
- "fast-glob": "^3.2.4",
- "fs-extra": "^9.0.1",
- "got": "^11.8.0",
- "semver": "^7.3.2",
- "winston": "^3.3.3",
- "yargs": "^16.1.1"
- },
- "dependencies": {
- "semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
- }
- },
- "@dabh/diagnostics": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz",
- "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==",
- "requires": {
- "colorspace": "1.1.x",
- "enabled": "2.0.x",
- "kuler": "^2.0.0"
- }
- },
- "@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "requires": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- }
- },
- "@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
- },
- "@nodelib/fs.walk": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz",
- "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==",
- "requires": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- }
- },
"@rollup/plugin-babel": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz",
@@ -3902,41 +2834,12 @@
"picomatch": "^2.2.2"
}
},
- "@sindresorhus/is": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.1.tgz",
- "integrity": "sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g=="
- },
- "@szmarczak/http-timer": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz",
- "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==",
- "requires": {
- "defer-to-connect": "^2.0.0"
- }
- },
- "@types/cacheable-request": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz",
- "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==",
- "requires": {
- "@types/http-cache-semantics": "*",
- "@types/keyv": "*",
- "@types/node": "*",
- "@types/responselike": "*"
- }
- },
"@types/estree": {
"version": "0.0.39",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
"integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
"dev": true
},
- "@types/http-cache-semantics": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz",
- "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A=="
- },
"@types/jquery": {
"version": "3.5.5",
"resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.5.tgz",
@@ -3955,18 +2858,11 @@
"@types/jquery": "*"
}
},
- "@types/keyv": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz",
- "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==",
- "requires": {
- "@types/node": "*"
- }
- },
"@types/node": {
"version": "15.12.4",
"resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.4.tgz",
- "integrity": "sha512-zrNj1+yqYF4WskCMOHwN+w9iuD12+dGm0rQ35HLl9/Ouuq52cEtd0CH9qMgrdNmi5ejC1/V7vKEXYubB+65DkA=="
+ "integrity": "sha512-zrNj1+yqYF4WskCMOHwN+w9iuD12+dGm0rQ35HLl9/Ouuq52cEtd0CH9qMgrdNmi5ejC1/V7vKEXYubB+65DkA==",
+ "dev": true
},
"@types/resolve": {
"version": "1.17.1",
@@ -3977,14 +2873,6 @@
"@types/node": "*"
}
},
- "@types/responselike": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
- "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==",
- "requires": {
- "@types/node": "*"
- }
- },
"@types/sizzle": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz",
@@ -4033,12 +2921,8 @@
"async": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz",
- "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw=="
- },
- "at-least-node": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg=="
+ "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==",
+ "dev": true
},
"balanced-match": {
"version": "1.0.2",
@@ -4060,6 +2944,7 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
"requires": {
"fill-range": "^7.0.1"
}
@@ -4089,51 +2974,12 @@
"integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==",
"dev": true
},
- "cacheable-lookup": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
- "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA=="
- },
- "cacheable-request": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz",
- "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==",
- "requires": {
- "clone-response": "^1.0.2",
- "get-stream": "^5.1.0",
- "http-cache-semantics": "^4.0.0",
- "keyv": "^4.0.0",
- "lowercase-keys": "^2.0.0",
- "normalize-url": "^6.0.1",
- "responselike": "^2.0.0"
- }
- },
"caniuse-lite": {
"version": "1.0.30001239",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001239.tgz",
"integrity": "sha512-cyBkXJDMeI4wthy8xJ2FvDU6+0dtcZSJW3voUF8+e9f1bBeuvyZfc3PNbkOETyhbR+dGCPzn9E7MA3iwzusOhQ==",
"dev": true
},
- "carbon-components": {
- "version": "10.37.0",
- "resolved": "https://registry.npmjs.org/carbon-components/-/carbon-components-10.37.0.tgz",
- "integrity": "sha512-LHReeqzzieP/q/xAHfKJNWLdWhOkr7+DIVZkrQGPf6kZYj5H8tb1KYKOIhasvCNRxJ2es8QJXuH7XW0JoLDfdQ==",
- "requires": {
- "@carbon/telemetry": "0.0.0-alpha.6",
- "flatpickr": "4.6.1",
- "lodash.debounce": "^4.0.8",
- "warning": "^3.0.0"
- }
- },
- "carbon-web-components": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/carbon-web-components/-/carbon-web-components-1.14.1.tgz",
- "integrity": "sha512-NR0EcIkSH5Qw1UURf4Jt6c+xr979kERfTatbH/Fvgj7MjTvLFyy8mHuhLhpJgybTHDNOtWs+a+VyYQIAhwzX2w==",
- "requires": {
- "@babel/runtime": "^7.8.0",
- "lodash-es": "^4.17.0"
- }
- },
"chalk": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
@@ -4147,11 +2993,6 @@
"supports-color": "^2.0.0"
}
},
- "ci-info": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
- "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="
- },
"clean-css": {
"version": "4.1.11",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz",
@@ -4161,67 +3002,11 @@
"source-map": "0.5.x"
}
},
- "cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- }
- }
- },
- "clone-response": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
- "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
- "requires": {
- "mimic-response": "^1.0.0"
- }
- },
- "color": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz",
- "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==",
- "requires": {
- "color-convert": "^1.9.1",
- "color-string": "^1.5.2"
- },
- "dependencies": {
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- }
- }
- },
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
"requires": {
"color-name": "~1.1.4"
}
@@ -4229,16 +3014,8 @@
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "color-string": {
- "version": "1.5.5",
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz",
- "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==",
- "requires": {
- "color-name": "^1.0.0",
- "simple-swizzle": "^0.2.2"
- }
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
},
"colorette": {
"version": "1.2.2",
@@ -4252,15 +3029,6 @@
"integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
"dev": true
},
- "colorspace": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz",
- "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==",
- "requires": {
- "color": "3.0.x",
- "text-hex": "1.0.x"
- }
- },
"commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
@@ -4273,19 +3041,6 @@
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
- "configstore": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
- "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==",
- "requires": {
- "dot-prop": "^5.2.0",
- "graceful-fs": "^4.1.2",
- "make-dir": "^3.0.0",
- "unique-string": "^2.0.0",
- "write-file-atomic": "^3.0.0",
- "xdg-basedir": "^4.0.0"
- }
- },
"convert-source-map": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
@@ -4295,16 +3050,6 @@
"safe-buffer": "~5.1.1"
}
},
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
- },
- "crypto-random-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
- "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA=="
- },
"dateformat": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
@@ -4315,50 +3060,23 @@
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
"integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+ "dev": true,
"requires": {
"ms": "2.1.2"
}
},
- "decompress-response": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
- "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
- "requires": {
- "mimic-response": "^3.1.0"
- },
- "dependencies": {
- "mimic-response": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
- "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="
- }
- }
- },
"deepmerge": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
"integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
"dev": true
},
- "defer-to-connect": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
- "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg=="
- },
"detect-file": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
"integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
"dev": true
},
- "dot-prop": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
- "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
- "requires": {
- "is-obj": "^2.0.0"
- }
- },
"duplexer": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
@@ -4371,33 +3089,17 @@
"integrity": "sha512-WsmJym1TMeHVndjPjczTFbnRR/c4sbzg8fBFtuhlb2Sru3i/S1VGpzDSrv/It8ctMU2bj8G7g7/O3FzYMGw6eA==",
"dev": true
},
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "enabled": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz",
- "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ=="
- },
- "end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "requires": {
- "once": "^1.4.0"
- }
- },
"escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true
},
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
},
"esprima": {
"version": "4.0.1",
@@ -4438,36 +3140,6 @@
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
"dev": true
},
- "fast-glob": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.6.tgz",
- "integrity": "sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ==",
- "requires": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- }
- },
- "fast-safe-stringify": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz",
- "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA=="
- },
- "fastq": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz",
- "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==",
- "requires": {
- "reusify": "^1.0.4"
- }
- },
- "fecha": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz",
- "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q=="
- },
"figures": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
@@ -4482,6 +3154,7 @@
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
"requires": {
"to-regex-range": "^5.0.1"
}
@@ -4529,16 +3202,6 @@
"integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==",
"dev": true
},
- "flatpickr": {
- "version": "4.6.1",
- "resolved": "https://registry.npmjs.org/flatpickr/-/flatpickr-4.6.1.tgz",
- "integrity": "sha512-3ULSxbXmcMIRzer/2jLNweoqHpwDvsjEawO2FUd9UFR8uPwLM+LruZcPDpuZStcEgbQKhuFOfXo4nYdGladSNw=="
- },
- "fn.name": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
- "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw=="
- },
"for-in": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
@@ -4554,17 +3217,6 @@
"for-in": "^1.0.1"
}
},
- "fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "requires": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- }
- },
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -4590,19 +3242,6 @@
"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
"dev": true
},
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
- },
- "get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "requires": {
- "pump": "^3.0.0"
- }
- },
"getobject": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.1.tgz",
@@ -4623,14 +3262,6 @@
"path-is-absolute": "^1.0.0"
}
},
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
"global-modules": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
@@ -4669,30 +3300,8 @@
"globals": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
- },
- "got": {
- "version": "11.8.2",
- "resolved": "https://registry.npmjs.org/got/-/got-11.8.2.tgz",
- "integrity": "sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==",
- "requires": {
- "@sindresorhus/is": "^4.0.0",
- "@szmarczak/http-timer": "^4.0.5",
- "@types/cacheable-request": "^6.0.1",
- "@types/responselike": "^1.0.0",
- "cacheable-lookup": "^5.0.3",
- "cacheable-request": "^7.0.1",
- "decompress-response": "^6.0.0",
- "http2-wrapper": "^1.0.0-beta.5.2",
- "lowercase-keys": "^2.0.0",
- "p-cancelable": "^2.0.0",
- "responselike": "^2.0.0"
- }
- },
- "graceful-fs": {
- "version": "4.2.6",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
- "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ=="
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true
},
"grunt": {
"version": "1.4.1",
@@ -4910,20 +3519,6 @@
"integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=",
"dev": true
},
- "http-cache-semantics": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
- "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ=="
- },
- "http2-wrapper": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz",
- "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==",
- "requires": {
- "quick-lru": "^5.1.1",
- "resolve-alpn": "^1.0.0"
- }
- },
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -4933,11 +3528,6 @@
"safer-buffer": ">= 2.1.2 < 3"
}
},
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
- },
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -4951,7 +3541,8 @@
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
},
"ini": {
"version": "1.3.8",
@@ -4975,11 +3566,6 @@
"is-windows": "^1.0.1"
}
},
- "is-arrayish": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
- "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
- },
"is-core-module": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz",
@@ -4992,17 +3578,14 @@
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
},
"is-glob": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
"requires": {
"is-extglob": "^2.1.1"
}
@@ -5016,12 +3599,8 @@
"is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
- },
- "is-obj": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
- "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
},
"is-plain-object": {
"version": "2.0.4",
@@ -5041,16 +3620,6 @@
"is-unc-path": "^1.0.0"
}
},
- "is-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
- "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw=="
- },
- "is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
- },
"is-unc-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
@@ -5066,11 +3635,6 @@
"integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
"dev": true
},
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -5105,10 +3669,31 @@
}
}
},
+ "jquery-ui": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/jquery-ui/-/jquery-ui-1.12.1.tgz",
+ "integrity": "sha1-vLQEXI3QU5wTS8FIjN0+dop6nlE="
+ },
+ "jquery-ui-dist": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/jquery-ui-dist/-/jquery-ui-dist-1.12.1.tgz",
+ "integrity": "sha1-XAgV08xvkP9fqvWyaKbiO0ypBPo="
+ },
+ "jquery-ui-themes": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/jquery-ui-themes/-/jquery-ui-themes-1.12.0.tgz",
+ "integrity": "sha1-pXugrZaADYRSL+dok//L3mcIHVE="
+ },
+ "jquery-ui-timepicker-addon": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/jquery-ui-timepicker-addon/-/jquery-ui-timepicker-addon-1.6.3.tgz",
+ "integrity": "sha1-gDfDmwtjAoLdCzfditf8XhFjN38="
+ },
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
},
"js-yaml": {
"version": "3.14.1",
@@ -5123,12 +3708,8 @@
"jsesc": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
- },
- "json-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
- "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true
},
"json5": {
"version": "2.2.0",
@@ -5139,28 +3720,6 @@
"minimist": "^1.2.5"
}
},
- "jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "requires": {
- "graceful-fs": "^4.1.6",
- "universalify": "^2.0.0"
- }
- },
- "keyv": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz",
- "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==",
- "requires": {
- "json-buffer": "3.0.1"
- }
- },
- "kuler": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz",
- "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A=="
- },
"liftup": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz",
@@ -5210,64 +3769,6 @@
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true
},
- "lodash-es": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
- "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
- },
- "lodash.debounce": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
- "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168="
- },
- "logform": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz",
- "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==",
- "requires": {
- "colors": "^1.2.1",
- "fast-safe-stringify": "^2.0.4",
- "fecha": "^4.2.0",
- "ms": "^2.1.1",
- "triple-beam": "^1.3.0"
- },
- "dependencies": {
- "colors": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
- "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA=="
- }
- }
- },
- "loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "requires": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- }
- },
- "lowercase-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="
- },
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "requires": {
- "semver": "^6.0.0"
- }
- },
"make-iterator": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
@@ -5309,25 +3810,16 @@
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
"dev": true
},
- "merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
- },
"micromatch": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
"integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
+ "dev": true,
"requires": {
"braces": "^3.0.1",
"picomatch": "^2.2.3"
}
},
- "mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="
- },
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
@@ -5352,7 +3844,8 @@
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
},
"node-releases": {
"version": "1.1.73",
@@ -5369,11 +3862,6 @@
"abbrev": "1"
}
},
- "normalize-url": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
- "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A=="
- },
"number-is-nan": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
@@ -5421,18 +3909,11 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
"requires": {
"wrappy": "1"
}
},
- "one-time": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz",
- "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==",
- "requires": {
- "fn.name": "1.x.x"
- }
- },
"os-homedir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
@@ -5455,11 +3936,6 @@
"os-tmpdir": "^1.0.0"
}
},
- "p-cancelable": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz",
- "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg=="
- },
"parse-filepath": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
@@ -5507,7 +3983,8 @@
"picomatch": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
- "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw=="
+ "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
+ "dev": true
},
"pretty-bytes": {
"version": "3.0.1",
@@ -5518,30 +3995,6 @@
"number-is-nan": "^1.0.0"
}
},
- "process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
- },
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
- },
- "quick-lru": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
- "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="
- },
"randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
@@ -5551,16 +4004,6 @@
"safe-buffer": "^5.1.0"
}
},
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
"rechoir": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz",
@@ -5570,16 +4013,6 @@
"resolve": "^1.9.0"
}
},
- "regenerator-runtime": {
- "version": "0.13.7",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
- "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew=="
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
- },
"resolve": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
@@ -5590,11 +4023,6 @@
"path-parse": "^1.0.6"
}
},
- "resolve-alpn": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.1.2.tgz",
- "integrity": "sha512-8OyfzhAtA32LVUsJSke3auIyINcwdh5l3cvYKdKO0nvsYSKuiLfTM5i78PJswFPT8y6cPW+L1v6/hE95chcpDA=="
- },
"resolve-dir": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
@@ -5605,19 +4033,6 @@
"global-modules": "^1.0.0"
}
},
- "responselike": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz",
- "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==",
- "requires": {
- "lowercase-keys": "^2.0.0"
- }
- },
- "reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
- },
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
@@ -5667,18 +4082,11 @@
}
}
},
- "run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "requires": {
- "queue-microtask": "^1.2.2"
- }
- },
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
},
"safer-buffer": {
"version": "2.1.2",
@@ -5689,7 +4097,8 @@
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
},
"serialize-javascript": {
"version": "4.0.0",
@@ -5700,19 +4109,6 @@
"randombytes": "^2.1.0"
}
},
- "signal-exit": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
- "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
- },
- "simple-swizzle": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
- "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
- "requires": {
- "is-arrayish": "^0.3.1"
- }
- },
"sortablejs": {
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz",
@@ -5721,7 +4117,8 @@
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
},
"source-map-support": {
"version": "0.5.19",
@@ -5747,51 +4144,6 @@
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"dev": true
},
- "stack-trace": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
- "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA="
- },
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "requires": {
- "safe-buffer": "~5.2.0"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
- }
- }
- },
- "string-width": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
- "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- }
- }
- },
"strip-ansi": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
@@ -5826,29 +4178,21 @@
}
}
},
- "text-hex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz",
- "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg=="
- },
"to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
},
"to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
"requires": {
"is-number": "^7.0.0"
}
},
- "triple-beam": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
- "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw=="
- },
"tslib": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
@@ -5856,14 +4200,6 @@
"dev": true,
"peer": true
},
- "typedarray-to-buffer": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "requires": {
- "is-typedarray": "^1.0.0"
- }
- },
"typescript": {
"version": "3.9.9",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz",
@@ -5886,23 +4222,11 @@
"util-deprecate": "^1.0.2"
}
},
- "unique-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
- "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==",
- "requires": {
- "crypto-random-string": "^2.0.0"
- }
- },
- "universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
- },
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
},
"v8flags": {
"version": "3.2.0",
@@ -5913,14 +4237,6 @@
"homedir-polyfill": "^1.0.1"
}
},
- "warning": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
- "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
- "requires": {
- "loose-envify": "^1.0.0"
- }
- },
"which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -5930,137 +4246,11 @@
"isexe": "^2.0.0"
}
},
- "winston": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz",
- "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==",
- "requires": {
- "@dabh/diagnostics": "^2.0.2",
- "async": "^3.1.0",
- "is-stream": "^2.0.0",
- "logform": "^2.2.0",
- "one-time": "^1.0.0",
- "readable-stream": "^3.4.0",
- "stack-trace": "0.0.x",
- "triple-beam": "^1.3.0",
- "winston-transport": "^4.4.0"
- }
- },
- "winston-transport": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz",
- "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==",
- "requires": {
- "readable-stream": "^2.3.7",
- "triple-beam": "^1.2.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
- },
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- }
- }
- },
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
- },
- "write-file-atomic": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
- "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
- "requires": {
- "imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
- }
- },
- "xdg-basedir": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz",
- "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q=="
- },
- "y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- },
- "yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "requires": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- }
- },
- "yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
}
}
}
diff --git a/package.json b/package.json
index 468845934b..7040e9596d 100644
--- a/package.json
+++ b/package.json
@@ -45,8 +45,10 @@
}
},
"dependencies": {
- "carbon-components": "^10.37.0",
- "carbon-web-components": "^1.14.1",
+ "@andxor/jquery-ui-touch-punch-fix": "^1.0.2",
+ "jquery-ui-dist": "^1.12.1",
+ "jquery-ui-themes": "^1.12.0",
+ "jquery-ui-timepicker-addon": "^1.6.3",
"lit-element": "^2.5.1",
"lit-html": "^1.4.1",
"sortablejs": "^1.14.0"
From 50f620e0752f0559361993d808674a35a8d9f009 Mon Sep 17 00:00:00 2001
From: Hadi Nategh
Date: Thu, 12 Aug 2021 14:57:47 +0200
Subject: [PATCH 29/30] Activate touch plugin on mobile framework
---
pixelegg/js/fw_mobile.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pixelegg/js/fw_mobile.js b/pixelegg/js/fw_mobile.js
index 2e86add77e..423d10c13f 100644
--- a/pixelegg/js/fw_mobile.js
+++ b/pixelegg/js/fw_mobile.js
@@ -23,7 +23,7 @@ import '../../api/js/framework/fw_browser.js';
import '../../api/js/framework/fw_ui.js';
import '../../api/js/framework/fw_classes.js';
import '../../api/js/jsapi/egw_inheritance.js';
-
+import '@andxor/jquery-ui-touch-punch-fix/jquery.ui.touch-punch.js';
/**
*
* @param {DOMWindow} window
From 1d0772a064cf2ada8c80f2825141dcd6c605d210 Mon Sep 17 00:00:00 2001
From: nathan
Date: Thu, 12 Aug 2021 08:57:15 -0600
Subject: [PATCH 30/30] * Calendar: Activate links in location & description in
event tooltip
---
calendar/js/et2_widget_event.ts | 2898 ++++++++++++++++---------------
1 file changed, 1473 insertions(+), 1425 deletions(-)
diff --git a/calendar/js/et2_widget_event.ts b/calendar/js/et2_widget_event.ts
index 8942259736..ad4e87763f 100644
--- a/calendar/js/et2_widget_event.ts
+++ b/calendar/js/et2_widget_event.ts
@@ -20,7 +20,7 @@ import {et2_action_object_impl, et2_DOMWidget} from "../../api/js/etemplate/et2_
import {et2_calendar_daycol} from "./et2_widget_daycol";
import {et2_calendar_planner_row} from "./et2_widget_planner_row";
import {et2_IDetachedDOM} from "../../api/js/etemplate/et2_core_interfaces";
-import {et2_no_init} from "../../api/js/etemplate/et2_core_common";
+import {et2_activateLinks, et2_insertLinkText, et2_no_init} from "../../api/js/etemplate/et2_core_common";
import {egw_getAppObjectManager, egwActionObject} from '../../api/js/egw_action/egw_action.js';
import {egw} from "../../api/js/jsapi/egw_global";
import {et2_selectbox} from "../../api/js/etemplate/et2_widget_selectbox";
@@ -55,1433 +55,1481 @@ import {et2_dialog} from "../../api/js/etemplate/et2_widget_dialog";
export class et2_calendar_event extends et2_valueWidget implements et2_IDetachedDOM
{
- static readonly _attributes : any = {
- "value": {
- type: "any",
- default: et2_no_init
- },
- "onclick": {
- "description": "JS code which is executed when the element is clicked. " +
- "If no handler is provided, or the handler returns true and the event is not read-only, the " +
- "event will be opened according to calendar settings."
- }
- };
- private div: JQuery;
- private title: JQuery;
- private body: JQuery;
- private icons: JQuery;
- private _need_actions_linked: boolean = false;
- private _actionObject: egwActionObject;
-
- /**
- * Constructor
- */
- constructor(_parent, _attrs? : WidgetConfig, _child? : object)
- {
- // Call the inherited constructor
- super(_parent, _attrs, ClassWithAttributes.extendAttributes(et2_calendar_event._attributes, _child || {}));
-
- const event = this;
-
- // Main container
- this.div = jQuery(document.createElement("div"))
- .addClass("calendar_calEvent")
- .addClass(this.options.class)
- .css('width',this.options.width)
- .on('mouseenter', function() {
- // Bind actions on first mouseover for faster creation
- if(event._need_actions_linked)
- {
- event._copy_parent_actions();
- }
- // Tooltip
- if(!event._tooltipElem)
- {
- event.options.statustext_html = true;
- event.set_statustext(event._tooltip());
- if(event.statustext)
- {
- return event.div.trigger('mouseenter');
- }
- }
- // Hacky to remove egw's tooltip border and let the mouse in
- window.setTimeout(function() {
- jQuery('body .egw_tooltip')
- .css('border','none')
- .on('mouseenter', function() {
- event.div.off('mouseleave.tooltip');
- jQuery('body.egw_tooltip').remove();
- jQuery('body').append(this);
- jQuery(this).stop(true).fadeTo(400, 1)
- .on('mouseleave', function() {
- jQuery(this).fadeOut('400', function() {
- jQuery(this).remove();
- // Set up to work again
- event.set_statustext(event._tooltip());
- });
- });
- });
-
- },105);
- });
- this.title = jQuery(document.createElement('div'))
- .addClass("calendar_calEventHeader")
- .appendTo(this.div);
- this.body = jQuery(document.createElement('div'))
- .addClass("calendar_calEventBody")
- .appendTo(this.div);
- this.icons = jQuery(document.createElement('div'))
- .addClass("calendar_calEventIcons")
- .appendTo(this.title);
-
- this.setDOMNode(this.div[0]);
- }
-
- doLoadingFinished( )
- {
- super.doLoadingFinished();
-
- // Already know what is needed to hook to cache
- if(this.options.value && this.options.value.row_id)
- {
- egw.dataRegisterUID(
- 'calendar::'+this.options.value.row_id,
- this._UID_callback,
- this,
- this.getInstanceManager().execId,
- this.id
- );
- }
- return true;
- }
-
- destroy( )
- {
- super.destroy();
-
- if(this._actionObject)
- {
- this._actionObject.remove();
- this._actionObject = null;
- }
-
- this.div.off();
- this.title.remove();
- this.title = null;
- this.body.remove();
- this.body = null;
- this.icons = null;
- this.div.remove();
- this.div = null;
-
- jQuery('body.egw_tooltip').remove();
-
- // Unregister, or we'll continue to be notified...
- if(this.options.value)
- {
- const old_app_id = this.options.value.row_id;
- egw.dataUnregisterUID('calendar::'+old_app_id,null,this);
- }
- }
-
- set_value( _value)
- {
- // Un-register for updates
- if(this.options.value)
- {
- var old_id = this.options.value.row_id;
- if(!_value || !_value.row_id || old_id !== _value.row_id)
- {
- egw.dataUnregisterUID('calendar::'+old_id,null,this);
- }
- }
- this.options.value = _value;
-
- // Register for updates
- const id = this.options.value.row_id;
- if(!old_id || old_id !== id)
- {
- egw.dataRegisterUID('calendar::'+id, this._UID_callback ,this,this.getInstanceManager().execId,this.id);
- }
- if(_value && !egw.dataHasUID('calendar::'+id))
- {
- egw.dataStoreUID('calendar::'+id, _value);
- }
- }
-
- /**
- * Callback for changes in cached data
- */
- _UID_callback(event)
- {
- // Copy to avoid changes, which may cause nm problems
- const value = event === null ? null : jQuery.extend({}, event);
- let parent = this.getParent();
- let parent_owner = parent.getDOMNode(parent).dataset['owner'] || parent.getParent().options.owner;
- if(parent_owner.indexOf(',') >= 0)
- {
- parent_owner = parent_owner.split(',');
- }
-
- // Make sure id is a string, check values
- if(value)
- {
- this._values_check(value);
- }
-
- // Check for changing days in the grid view
- let state = this.getInstanceManager().app_obj.calendar.getState() || app.calendar.getState();
- if(!this._sameday_check(value) || !this._status_check(value, state.status_filter, parent_owner))
- {
- // May need to update parent to remove out-of-view events
- parent.removeChild(this);
- if(event === null && parent && parent.instanceOf(et2_calendar_daycol))
- {
- (parent)._out_of_view();
- }
-
- // This should now cease to exist, as new events have been created
- this.destroy();
- return;
- }
-
- // Copy to avoid changes, which may cause nm problems
- this.options.value = jQuery.extend({},value);
-
- if(this.getParent().options.date)
- {
- this.options.value.date = this.getParent().options.date;
- }
-
- // Let parent position - could also be et2_calendar_planner_row
- (this.getParent()).position_event(this);
-
- // Parent may remove this if the date isn't the same
- if(this.getParent())
- {
- this._update();
- }
- }
-
- /**
- * Draw the event
- */
- _update( )
- {
-
- // Update to reflect new information
- const event = this.options.value;
-
- const id = event.row_id ? event.row_id : event.id + (event.recur_type ? ':' + event.recur_date : '');
- const formatted_start = event.start.toJSON();
-
- this.set_id('event_' + id);
- if(this._actionObject)
- {
- this._actionObject.id = 'calendar::' + id;
- }
-
- this._need_actions_linked = !this.options.readonly;
-
- // Make sure category stuff is there
- // Fake it to use the cache / call - if already there, these will return
- // immediately.
- const im = this.getInstanceManager();
- et2_selectbox.cat_options({
- _type:'select-cat',
- getInstanceManager: function() {return im;}
- },
- {application:event.app||'calendar'}
- );
-
- // Need cleaning? (DnD helper removes content)
- // @ts-ignore
- if(!this.div.has(this.title).length)
- {
- this.div
- .empty()
- .append(this.title)
- .append(this.body);
- }
- if(!this.getParent().options.readonly && !this.options.readonly && this.div.droppable('instance'))
- {
- this.div
- // Let timegrid always get the drag
- .droppable('option','greedy',false);
- }
- let tooltip = jQuery(this._tooltip()).text();
- // DOM nodes
- this.div
- // Set full day flag
- .attr('data-full_day', event.whole_day)
-
- // Put everything we need for basic interaction here, so it's available immediately
- .attr('data-id', event.id)
- .attr('data-app', event.app || 'calendar')
- .attr('data-app_id', event.app_id)
- .attr('data-start', formatted_start)
- .attr('data-owner', event.owner)
- .attr('data-recur_type', event.recur_type)
- .attr('data-resize', event.whole_day ? 'WD' : '' + (event.recur_type ? 'S':''))
- .attr('data-priority', event.priority)
- // Accessibility
- .attr("tabindex",0)
- .attr("aria-label", tooltip)
- // Remove any category classes
- .removeClass(function(index, css) {
- return (css.match (/(^|\s)cat_\S+/g) || []).join(' ');
- })
- // Remove any status classes
- .removeClass(function(index, css) {
- return (css.match(/calendar_calEvent\S+/g) || []).join(' ');
- })
- .removeClass('calendar_calEventSmall')
- .addClass(event.class)
- .toggleClass('calendar_calEventPrivate', typeof event.private !== 'undefined' && event.private);
- this.options.class = event.class;
- const status_class = this._status_class();
-
- // Add category classes, if real categories are set
- if(event.category && event.category != '0')
- {
- const cats = event.category.split(',');
- for(let i = 0; i < cats.length; i++)
- {
- this.div.addClass('cat_' + cats[i]);
- }
- }
-
- this.div.toggleClass('calendar_calEventUnknown', event.participants[egw.user('account_id')] ? event.participants[egw.user('account_id')][0] === 'U' : false);
- this.div.addClass(status_class);
-
- this.body.toggleClass('calendar_calEventBodySmall', event.whole_day_on_top || false);
-
- // Header
- const title = !event.is_private ? egw.htmlspecialchars(event['title']) : egw.lang('private');
-
- this.title
- .html(''+this._get_timespan(event) + '
')
- .append(''+title+'');
-
- // Colors - don't make them transparent if there is no color
- // @ts-ignore
- if(jQuery.Color("rgba(0,0,0,0)").toRgbaString() != jQuery.Color(this.div,'background-color').toRgbaString())
- {
- // Most statuses use colored borders
- this.div.css('border-color',this.div.css('background-color') );
- }
-
- this.icons.appendTo(this.title)
- .html(this._icons().join(''));
-
- // Body
- if(event.whole_day_on_top)
- {
- this.body.html(title);
- }
- else
- {
- // @ts-ignore
- const start_time = jQuery.datepicker.formatTime(
- egw.preference("timeformat") === "12" ? "h:mmtt" : "HH:mm",
- {
- hour: event.start_m / 60,
- minute: event.start_m % 60,
- seconds: 0,
- timezone: 0
+ static readonly _attributes: any = {
+ "value": {
+ type: "any",
+ default: et2_no_init
},
- {"ampm": (egw.preference("timeformat") === "12")}
- ).trim();
-
- this.body
- .html(''+title+'')
- .append(''+start_time + '');
- if(this.options.value.description.trim())
- {
- this.body
- .append(''+egw.htmlspecialchars(this.options.value.description)+'
');
- }
- }
-
- // Clear tooltip for regeneration
- this.set_statustext('');
-
- // Height specific section
- // This can take an unreasonable amount of time if parent is hidden
- if(jQuery((this.getParent()).getDOMNode(this)).is(':visible'))
- {
- this._small_size();
- }
- }
-
- /**
- * Calculate display variants for when event is too short for full display
- *
- * Display is based on the number of visible lines, calculated off the header
- * height:
- * 1 - show just the event title, with ellipsis
- * 2 - Show timespan and title, with ellipsis
- * > 4 - Show description as well, truncated to fit
- */
- _small_size( )
- {
-
- if(this.options.value.whole_day_on_top) return;
-
- // Skip for planner view, it's always small
- if(this.getParent() && this.getParent().instanceOf(et2_calendar_planner_row)) return;
-
- // Pre-calculation reset
- this.div.removeClass('calendar_calEventSmall');
- this.body.css('height', 'auto');
-
- const line_height = parseFloat(this.div.css('line-height'));
- let visible_lines = Math.floor(this.div.innerHeight() / line_height);
-
- if(!this.title.height())
- {
- // Handle sizing while hidden, such as when calendar is not the active tab
- visible_lines = Math.floor(egw.getHiddenDimensions(this.div).h / egw.getHiddenDimensions(this.title).h);
- }
- visible_lines = Math.max(1,visible_lines);
-
- if(this.getParent() && this.getParent().instanceOf(et2_calendar_daycol))
- {
- this.div.toggleClass('calendar_calEventSmall',visible_lines < 4);
- this.div
- .attr('data-visible_lines', visible_lines);
- }
- else if (this.getParent() && this.getParent().instanceOf(et2_calendar_planner_row))
- {
- // Less than 8 hours is small
- this.div.toggleClass('calendar_calEventSmall',this.options.value.end.valueOf() - this.options.value.start.valueOf() < 28800000);
- }
-
-
- if(this.body.height() > this.div.height() - this.title.height() && visible_lines >= 4)
- {
- this.body.css('height', Math.floor((visible_lines-1)*line_height - this.title.height()) + 'px');
- }
- else
- {
- this.body.css('height', '');
- }
- }
-
- /**
- * Examines the participants & returns CSS classname for status
- *
- * @returns {String}
- */
- _status_class( )
- {
- let status_class = 'calendar_calEventAllAccepted';
- for(let id in this.options.value.participants)
- {
- let status = this.options.value.participants[id];
-
- status = et2_calendar_event.split_status(status);
-
- switch (status)
- {
- case 'A':
- case '': // app without status
- break;
- case 'U':
- status_class = 'calendar_calEventSomeUnknown';
- return status_class; // break for
- default:
- status_class = 'calendar_calEventAllAnswered';
- break;
- }
- }
- return status_class;
- }
-
- /**
- * Create tooltip shown on hover
- *
- * @return {String}
- */
- _tooltip( )
- {
- if(!this.div || !this.options.value || !this.options.value.app_id) return '';
-
- const border = this.div.css('borderTopColor');
- const bg_color = this.div.css('background-color');
- const header_color = this.title.css('color');
- const timespan = this._get_timespan(this.options.value);
- const parent = this.getParent() instanceof et2_calendar_daycol ? (this.getParent()) : (this.getParent());
-
- parent.date_helper.set_value(this.options.value.start.valueOf ? new Date(this.options.value.start) : this.options.value.start);
- const start = parent.date_helper.input_date.val();
- parent.date_helper.set_value(this.options.value.end.valueOf ? new Date(this.options.value.end) : this.options.value.end);
- const end = parent.date_helper.input_date.val();
-
- const times = !this.options.value.multiday ?
- '' + this.egw().lang('Time') + ':' + timespan :
- '' + this.egw().lang('Start') + ':' + start + ' ' +
- '' + this.egw().lang('End') + ':' + end;
- let cat_label: (string | string[]) = '';
- if(this.options.value.category)
- {
- const cat = et2_createWidget('select-cat', {'readonly': true}, this);
- cat.set_value(this.options.value.category);
- cat_label = this.options.value.category.indexOf(',') <= 0 ? cat.span.text() : [];
- if(typeof cat_label != 'string')
- {
- cat.span.children().each(function() {
- (cat_label).push(jQuery(this).text());
- });
- cat_label = cat_label.join(', ');
- }
- cat.destroy();
- }
-
- // Location + Videoconference
- let location = '';
- if(this.options.value.location || this.options.value['##videoconference'])
- {
- location += '' + this.egw().lang('Location') + ':' +
- egw.htmlspecialchars(this.options.value.location);
- if(this.options.value['##videoconference'])
- {
- // Click handler is set in _bind_videoconference()
- location += (this.options.value.location.trim() ? '
' : '') +
- ''+
- this.egw().lang('Video conference') +
- '';
- this._bind_videoconference();
- }
- location += '
';
- }
-
- // Participants
- let participants = '';
- if(this.options.value.participant_types[''])
- {
- participants += this.options.value.participant_types[''].join("
");
- }
- for(let type_name in this.options.value.participant_types)
- {
- if(type_name)
- {
- participants += '
'+type_name+':
';
- participants += this.options.value.participant_types[type_name].join("
");
- }
- }
-
- return '
';
- }
-
- /**
- * Generate participant summary line
- *
- * @returns {String}
- */
- _participant_summary(participants)
- {
- if( Object.keys(this.options.value.participants).length < 2)
- {
- return '';
- }
-
- const participant_status = {A: 0, R: 0, T: 0, U: 0, D: 0};
- const status_label = {A: 'accepted', R: 'rejected', T: 'tentative', U: 'unknown', D: 'delegated'};
- const participant_summary = Object.keys(this.options.value.participants).length + ' ' + this.egw().lang('Participants') + ': ';
- const status_totals = [];
-
- for(let id in this.options.value.participants)
- {
- var status = this.options.value.participants[id].substr(0,1);
- participant_status[status]++;
- }
- for(let status in participant_status)
- {
- if(participant_status[status] > 0)
- {
- status_totals.push(participant_status[status] + ' ' + this.egw().lang(status_label[status]));
- }
- }
- return participant_summary + status_totals.join(', ');
- }
-
- /**
- * Get actual icons from list
- */
- _icons( ) : string[]
- {
- const icons = [];
-
- if(this.options.value.is_private)
- {
- // Hide everything
- icons.push('');
- }
- else
- {
- if(this.options.value.icons)
- {
- jQuery.extend(icons, this.options.value.icons);
- }
- else if(this.options.value.app !== 'calendar')
- {
- let app_icon = ""+(egw.link_get_registry(this.options.value.app,'icon') || (this.options.value.app + '/navbar'));
- icons.push('');
- }
- if(this.options.value.priority == 3)
- {
- icons.push('');
- }
- if(this.options.value.public == '0')
- {
- // Show private flag
- icons.push('');
- }
- if(this.options.value['recur_type'])
- {
- icons.push('');
- }
- // icons for single user, multiple users or group(s) and resources
- const single = '';
- const multiple = '';
- for(const uid in this.options.value['participants'])
- {
- // @ts-ignore
- if(Object.keys(this.options.value.participants).length == 1 && !isNaN(uid))
- {
- icons.push(single);
- break;
+ "onclick": {
+ "description": "JS code which is executed when the element is clicked. " +
+ "If no handler is provided, or the handler returns true and the event is not read-only, the " +
+ "event will be opened according to calendar settings."
}
- // @ts-ignore
- if(!isNaN(uid) && icons.indexOf(multiple) === -1)
- {
- icons.push(multiple);
- }
- /*
- * TODO: resource icons
- elseif(!isset($icons[$uid[0]]) && isset($this->bo->resources[$uid[0]]) && isset($this->bo->resources[$uid[0]]['icon']))
- {
- $icons[$uid[0]] = html::image($this->bo->resources[$uid[0]]['app'],
- ($this->bo->resources[$uid[0]]['icon'] ? $this->bo->resources[$uid[0]]['icon'] : 'navbar'),
- lang($this->bo->resources[$uid[0]]['app']),
- 'width="16px" height="16px"');
- }
- */
- }
-
- if(this.options.value.alarm && !jQuery.isEmptyObject(this.options.value.alarm) && !this.options.value.is_private)
- {
- icons.push('');
- }
- if(this.options.value.participants[egw.user('account_id')] && this.options.value.participants[egw.user('account_id')][0] == 'U')
- {
- icons.push('');
- }
- if(this.options.value["##videoconference"])
- {
- icons.push('');
- }
- }
-
- // Always include non-blocking, regardless of privacy
- if(this.options.value.non_blocking)
- {
- icons.push('');
- }
- return icons;
- }
-
- /**
- * Bind the click handler for opening the video conference
- *
- * Tooltips are placed in the DOM directly in the body, managed by egw.
- */
- _bind_videoconference()
- {
- let vc_event = 'click.calendar_videoconference';
- jQuery('body').off(vc_event)
- .on(vc_event, '[data-videoconference]',function(event) {
- let data = egw.dataGetUIDdata("calendar::"+this.dataset.id);
- app.calendar.joinVideoConference(this.dataset.videoconference, data.data||this.dataset);
- });
- }
- /**
- * Get a text representation of the timespan of the event. Either start
- * - end, or 'all day'
- *
- * @param {Object} event Event to get the timespan for
- * @param {number} event.start_m Event start, in minutes from midnight
- * @param {number} event.end_m Event end, in minutes from midnight
- *
- * @return {string} Timespan
- */
- _get_timespan( event)
- {
- let timespan = '';
- if (event['start_m'] === 0 && event['end_m'] >= 24*60-1)
- {
- if (event['end_m'] > 24*60)
- {
- // @ts-ignore
- timespan = jQuery.datepicker.formatTime(
- egw.preference("timeformat") === "12" ? "h:mmtt" : "HH:mm",
- {
- hour: event.start_m / 60,
- minute: event.start_m % 60,
- seconds: 0,
- timezone: 0
- },
- {"ampm": (egw.preference("timeformat") === "12")}
- // @ts-ignore
- ).trim()+' - '+jQuery.datepicker.formatTime(
- egw.preference("timeformat") === "12" ? "h:mmtt" : "HH:mm",
- {
- hour: event.end_m / 60,
- minute: event.end_m % 60,
- seconds: 0,
- timezone: 0
- },
- {"ampm": (egw.preference("timeformat") === "12")}
- ).trim();
- }
- else
- {
- timespan = this.egw().lang('Whole day');
- }
- }
- else
- {
- let duration : string | number = event.multiday ?
- (event.end - event.start) / 60000 :
- (event.end_m - event.start_m);
- duration = Math.floor(duration/60) + this.egw().lang('h')+(duration%60 ? duration%60 : '');
-
- // @ts-ignore
- timespan = jQuery.datepicker.formatTime(
- egw.preference("timeformat") === "12" ? "h:mmtt" : "HH:mm",
- {
- hour: event.start_m / 60,
- minute: event.start_m % 60,
- seconds: 0,
- timezone: 0
- },
- {"ampm": (egw.preference("timeformat") === "12")}
- ).trim();
-
- // @ts-ignore
- timespan += ' - ' + jQuery.datepicker.formatTime(
- egw.preference("timeformat") === "12" ? "h:mmtt" : "HH:mm",
- {
- hour: event.end_m / 60,
- minute: event.end_m % 60,
- seconds: 0,
- timezone: 0
- },
- {"ampm": (egw.preference("timeformat") === "12")}
- ).trim();
-
- timespan += ': ' + duration;
- }
- return timespan;
- }
-
- /**
- * Make sure event data has all proper values, and format them as expected
- * @param {Object} event
- */
- _values_check(event)
- {
- // Make sure ID is a string
- if(event.id)
- {
- event.id = ''+event.id;
- }
-
- // Parent might be a daycol or a planner_row
- let parent = this.getParent();
-
- // Use dates as objects
- if(typeof event.start !== 'object')
- {
- parent.date_helper.set_value(event.start);
- event.start = new Date(parent.date_helper.getValue());
- }
- if(typeof event.end !== 'object')
- {
- parent.date_helper.set_value(event.end);
- event.end = new Date(parent.date_helper.getValue());
- }
-
- // We need minutes for durations
- if(typeof event.start_m === 'undefined')
- {
- event.start_m = event.start.getUTCHours() * 60 + event.start.getUTCMinutes();
- event.end_m = event.end.getUTCHours() * 60 + event.end.getUTCMinutes();
- }
- if(typeof event.multiday === 'undefined')
- {
- event.multiday = (event.start.getUTCFullYear() !== event.end.getUTCFullYear() ||
- event.start.getUTCMonth() !== event.end.getUTCMonth() ||
- event.start.getUTCDate() != event.end.getUTCDate());
- }
- if(!event.start.getUTCHours() && !event.start.getUTCMinutes() && event.end.getUTCHours() == 23 && event.end.getUTCMinutes() == 59)
- {
- event.whole_day_on_top = (event.non_blocking && event.non_blocking != '0');
- }
- }
-
- /**
- * Check to see if the provided event information is for the same date as
- * what we're currently expecting, and that it has not been changed.
- *
- * If the date has changed, we adjust the associated daywise caches to move
- * the event's ID to where it should be. This check allows us to be more
- * directly reliant on the data cache, and less on any other control logic
- * elsewhere first.
- *
- * @param {Object} event Map of event data from cache
- * @param {string} event.date For non-recurring, single day events, this is
- * the date the event is on.
- * @param {string} event.start Start of the event (used for multi-day events)
- * @param {string} event.end End of the event (used for multi-day events)
- *
- * @return {Boolean} Provided event data is for the same date
- */
- _sameday_check(event)
- {
- // Event somehow got orphaned, or deleted
- if(!this.getParent() || event === null)
- {
- return false;
- }
-
- // Also check participants against owner
- const owner_match = et2_calendar_event.owner_check(event, this.getParent());
-
- // Simple, same day
- if(owner_match && this.options.value.date && event.date == this.options.value.date)
- {
- return true;
- }
-
- // Multi-day non-recurring event spans days - date does not match
- const event_start = new Date(event.start);
- const event_end = new Date(event.end);
- const parent = this.getParent();
- if(owner_match && (parent instanceof et2_calendar_daycol) && parent.getDate() >= event_start && parent.getDate() <= event_end)
- {
- return true;
- }
-
- // Delete all old actions
- if(this._actionObject)
- {
- this._actionObject.clear();
- this._actionObject.unregisterActions();
- this._actionObject = null;
- }
-
- // Update daywise caches
- const new_cache_id = CalendarApp._daywise_cache_id(event.date, this.getParent().options.owner);
- let new_daywise: any = egw.dataGetUIDdata(new_cache_id);
- new_daywise = new_daywise && new_daywise.data ? new_daywise.data : [];
- let old_cache_id = '';
- if(this.options.value && this.options.value.date)
- {
- old_cache_id = CalendarApp._daywise_cache_id(this.options.value.date,parent.options.owner);
- }
-
- if(new_cache_id != old_cache_id)
- {
- let old_daywise: any = egw.dataGetUIDdata(old_cache_id);
- old_daywise = old_daywise && old_daywise.data ? old_daywise.data : [];
- old_daywise.splice(old_daywise.indexOf(this.options.value.row_id),1);
- egw.dataStoreUID(old_cache_id,old_daywise);
-
- if (new_daywise.indexOf(event.row_id) < 0)
- {
- new_daywise.push(event.row_id);
- }
- if(egw.dataHasUID(new_cache_id))
- {
- egw.dataStoreUID(new_cache_id, new_daywise);
- }
- }
-
- return false;
- }
-
- /**
- * Check that the event passes the given status filter.
- * Status filter is set in the sidebox and used when fetching several events, but if user changes their status
- * for an event, it may no longer match and have to be removed.
- *
- * @param event
- * @param filter
- * @param owner The owner of the target / parent, not the event owner
- * @private
- */
- _status_check(event, filter: string, owner: string | string[]): boolean
- {
- if(!owner || !event)
- {
- return false;
- }
-
- // If we're doing a bunch, just one passing is enough
- if(typeof owner !== "string")
- {
- let pass = false;
- for (let j = 0; j < owner.length && pass == false; j++)
- {
- pass = pass || this._status_check(event, filter, owner[j]);
- }
- return pass;
- }
-
- // Show also events just owned by selected user
- // Group members can be owner too, those get handled when we check group memberships below
- if(filter == 'owner' && owner == event.owner)
- {
- return true;
- }
-
- // Get the relevant participant
- let participant = event.participants[owner];
-
- // If filter says don't look in groups, skip it all
- if(!participant && filter === 'no-enum-groups')
- {
- return false;
- }
-
- // Couldn't find the current owner in the participant list, check groups & resources
- if(!participant)
- {
- let options: any = null;
- if(app.calendar && app.calendar.sidebox_et2 && app.calendar.sidebox_et2.getWidgetById('owner'))
- {
- options = app.calendar.sidebox_et2.getWidgetById('owner').taglist.getSelection();
- }
- if((isNaN(parseInt(owner)) || parseInt(owner) < 0) && options && typeof options.find == "function")
- {
- let resource = options.find(function (element)
- {
- return element.id == owner;
- }) || {};
- let matching_participant = typeof resource.resources == "undefined" ?
- resource :
- resource?.resources.filter(id => typeof event.participants[id] != "undefined");
- if(matching_participant.length > 0)
- {
- return this._status_check(event, filter, matching_participant);
- }
- else if (filter == 'owner' && resource && resource.resources && resource.resources.indexOf(event.owner))
- {
- // owner param was a group but event is owned by someone in that group
- return true;
- }
- }
- }
-
- let status = et2_calendar_event.split_status(participant);
-
- switch (filter)
- {
- default:
- case 'all':
- return true;
- case 'default': // Show all status, but rejected
- return status !== 'R';
- case 'accepted': //Show only accepted events
- return status === 'A'
- case 'unknown': // Show only invitations, not yet accepted or rejected
- return status === 'U';
- case 'tentative': // Show only tentative accepted events
- return status === 'T';
- case 'delegated': // Show only delegated events
- return status === 'D';
- case 'rejected': // Show only rejected events
- return status === 'R';
- // Handled above
- //case 'owner': // Show also events just owned by selected user
- case 'hideprivate': // Show all events, as if they were private
- // handled server-side
- return true;
- case 'showonlypublic': // Show only events flagged as public, -not checked as private
- return event.public == '1';
- // Handled above
- // case 'no-enum-groups': // Do not include events of group members
- case 'not-unknown': // Show all status, but unknown
- return status !== 'U';
- case 'deleted': // Show events that have been deleted
- return event.deleted;
- }
- }
-
- attachToDOM()
- {
- let result = super.attachToDOM();
-
- // Remove the binding for the click handler, unless there's something
- // custom here.
- if(!this.onclick)
- {
- jQuery(this.node).off("click");
- }
- return result;
- }
-
- /**
- * Click handler calling custom handler set via onclick attribute to this.onclick.
- * All other handling is done by the timegrid widget.
- *
- * @param {Event} _ev
- * @returns {boolean}
- */
- click( _ev)
- {
- let result = true;
- if(typeof this.onclick == 'function')
- {
- // Make sure function gets a reference to the widget, splice it in as 2. argument if not
- const args = Array.prototype.slice.call(arguments);
- if(args.indexOf(this) == -1) args.splice(1, 0, this);
-
- result = this.onclick.apply(this, args);
- }
- return result;
- }
-
- /**
- * Show the recur prompt for this event
- *
- * Calls et2_calendar_event.recur_prompt with this event's value.
- *
- * @param {et2_calendar_event~prompt_callback} callback
- * @param {Object} [extra_data]
- */
- recur_prompt(callback, extra_data)
- {
- et2_calendar_event.recur_prompt(this.options.value,callback,extra_data);
- }
-
- /**
- * Show the series split prompt for this event
- *
- * Calls et2_calendar_event.series_split_prompt with this event's value.
- *
- * @param {et2_calendar_event~prompt_callback} callback
- */
- series_split_prompt(callback)
- {
- et2_calendar_event.series_split_prompt(this.options.value,this.options.value.recur_date, callback);
- }
-
- /**
- * Copy the actions set on the parent, apply them to self
- *
- * This can take a while to do, so we try to do it only when needed - on mouseover
- */
- _copy_parent_actions()
- {
- // Copy actions set in parent
- if(!this.options.readonly && !this.getParent().options.readonly)
- {
- let action_parent : et2_widget = this;
- while(action_parent != null && !action_parent.options.actions &&
- !(action_parent instanceof et2_container)
- )
- {
- action_parent = action_parent.getParent();
- }
- try {
- this._link_actions(action_parent.options.actions||{});
- this._need_actions_linked = false;
- } catch (e) {
- // something went wrong, but keep quiet about it
- }
- }
- }
-
- /**
- * Link the actions to the DOM nodes / widget bits.
- *
- * @param {object} actions {ID: {attributes..}+} map of egw action information
- */
- _link_actions(actions)
- {
- if(!this._actionObject)
- {
- // Get the top level element - timegrid or so
- var objectManager = this.getParent()._actionObject || this.getParent().getParent()._actionObject ||
- egw_getAppObjectManager(true).getObjectById(this.getParent().getParent().getParent().id) || egw_getAppObjectManager(true);
- this._actionObject = objectManager.getObjectById('calendar::'+this.options.value.row_id);
- }
-
- if (this._actionObject == null) {
- // Add a new container to the object manager which will hold the widget
- // objects
- this._actionObject = objectManager.insertObject(false, new egwActionObject(
- 'calendar::'+this.options.value.row_id, objectManager, et2_calendar_event.et2_event_action_object_impl(this,this.getDOMNode()),
- this._actionManager || objectManager.manager.getActionById('calendar::'+this.options.value.row_id) || objectManager.manager
- ));
- }
- else
- {
- this._actionObject.setAOI(et2_calendar_event.et2_event_action_object_impl(this, this.getDOMNode(this)));
- }
-
- // Delete all old objects
- this._actionObject.clear();
- this._actionObject.unregisterActions();
-
- // Go over the widget & add links - this is where we decide which actions are
- // 'allowed' for this widget at this time
- const action_links = this._get_action_links(actions);
- action_links.push('egw_link_drag');
- action_links.push('egw_link_drop');
- if(this._actionObject.parent.getActionLink('invite'))
- {
- action_links.push('invite');
- }
- this._actionObject.updateActionLinks(action_links);
- }
-
- /**
- * Code for implementing et2_IDetachedDOM
- *
- * @param {array} _attrs array to add further attributes to
- */
- getDetachedAttributes( _attrs)
- {
-
- }
-
- getDetachedNodes( )
- {
- return [this.getDOMNode()];
- }
-
- setDetachedAttributes( _nodes, _values)
- {
-
- }
-
- // Static class stuff
- /**
- * Check event owner against a parent object
- *
- * As an event is edited, its participants may change. Also, as the state
- * changes we may change which events are displayed and show the same event
- * in several places for different users. Here we check the event participants
- * against an owner value (which may be an array) to see if the event should be
- * displayed or included.
- *
- * @param {Object} event - Event information
- * @param {et2_widget_daycol|et2_widget_planner_row} parent - potential parent object
- * that has an owner option
- * @param {boolean} [owner_too] - Include the event owner in consideration, or only
- * event participants
- *
- * @return {boolean} Should the event be displayed
- */
- static owner_check(event, parent, owner_too?)
- {
- let owner_match = true;
- let state = (parent.getInstanceManager ? parent.getInstanceManager().app_obj.calendar.state : false ) || app.calendar?.state || {}
- if(typeof owner_too === 'undefined' && state.status_filter)
- {
- owner_too = state.status_filter === 'owner';
- }
- let options : any = null;
- if(app.calendar && app.calendar.sidebox_et2 && app.calendar.sidebox_et2.getWidgetById('owner'))
- {
- options = app.calendar.sidebox_et2.getWidgetById('owner').taglist.getSelection();
- }
- else
- {
- options = parent.getArrayMgr("sel_options").getRoot().getEntry('owner');
- }
- if(event.participants && typeof parent.options.owner != 'undefined' && parent.options.owner.length > 0)
- {
- var parent_owner = jQuery.extend([], typeof parent.options.owner !== 'object' ?
- [parent.options.owner] :
- parent.options.owner);
- owner_match = false;
- const length = parent_owner.length;
- for(var i = 0; i < length; i++ )
- {
- // Handle groups & grouped resources like mailing lists, they won't match so
- // we need the list - pull it from sidebox owner
- if((isNaN(parent_owner[i]) || parent_owner[i] < 0) && options && typeof options.find == "function")
- {
- var resource = options.find(function(element) {return element.id == parent_owner[i];}) || {};
- if(resource && resource.resources)
- {
- parent_owner.splice(i,1);
- i--;
- parent_owner = parent_owner.concat(resource.resources);
-
- }
- }
- }
- let participants = jQuery.extend([], Object.keys(event.participants));
- for(var i = 0; i < participants.length; i++ )
- {
- const id = participants[i];
- // Expand group invitations
- if (parseInt(id) < 0)
- {
- // Add in groups, if we can get them from options, great
- var resource;
- if(options && options.find && (resource = options.find(function(element) {return element.id === id;})) && resource.resources)
- {
- participants = participants.concat(resource.resources);
- }
- else
- {
- // Add in groups, if we can get them (this is asynchronous)
- egw.accountData(id,'account_id',true,function(members) {
- participants = participants.concat(Object.keys(members));
- }, this);
- }
- }
- if(parent.options.owner == id ||
- parent_owner.indexOf &&
- parent_owner.indexOf(id) >= 0)
- {
- owner_match = true;
- break;
- }
- }
- }
- if(owner_too && !owner_match)
- {
- owner_match = (parent.options.owner == event.owner ||
- parent_owner.indexOf &&
- parent_owner.indexOf(event.owner) >= 0);
- }
- return owner_match;
- }
-
- /**
- * @callback et2_calendar_event~prompt_callback
- * @param {string} button_id - One of ok, exception, series, single or cancel
- * depending on which buttons are on the prompt
- * @param {Object} event_data - Event information - whatever you passed in to
- * the prompt.
- */
- /**
- * Recur prompt
- * If the event is recurring, asks the user if they want to edit the event as
- * an exception, or change the whole series. Then the callback is called.
- *
- * If callback is not provided, egw.open() will be used to open an edit dialog.
- *
- * If you call this on a single (non-recurring) event, the callback will be
- * executed immediately, with the passed button_id as 'single'.
- *
- * @param {Object} event_data - Event information
- * @param {string} event_data.id - Unique ID for the event, possibly with a
- * timestamp
- * @param {string|Date} event_data.start - Start date/time for the event
- * @param {number} event_data.recur_type - Recur type, or 0 for a non-recurring event
- * @param {et2_calendar_event~prompt_callback} [callback] - Callback is
- * called with the button (exception, series, single or cancel) and the event
- * data.
- * @param {Object} [extra_data] - Additional data passed to the callback, used
- * as extra parameters for default callback
- *
- * @augments {et2_calendar_event}
- */
- public static recur_prompt(event_data, callback?, extra_data?)
- {
- let egw;
- const edit_id = event_data.app_id;
- const edit_date = event_data.start;
-
- // seems window.opener somehow in certain conditions could be from different origin
- // we try to catch the exception and in this case retrieve the egw object from current window.
- try
- {
- egw = this.egw ? (typeof this.egw == 'function' ? this.egw() : this.egw) : window.opener && typeof window.opener.egw != 'undefined' ? window.opener.egw('calendar'):window.egw('calendar');
- }
- catch(e){
- egw = window.egw('calendar');
- }
-
- const that = this;
-
- const extra_params = extra_data && typeof extra_data == 'object' ? extra_data : {};
- extra_params.date = edit_date.toJSON ? edit_date.toJSON() : edit_date;
- if(typeof callback != 'function')
- {
- callback = function(_button_id)
- {
- switch(_button_id)
- {
- case 'exception':
- extra_params.exception = '1';
- egw.open(edit_id, event_data.app||'calendar', 'edit', extra_params);
- break;
- case 'series':
- case 'single':
- egw.open(edit_id, event_data.app||'calendar', 'edit', extra_params);
- break;
- case 'cancel':
- default:
- break;
- }
- };
- }
- if(parseInt(event_data.recur_type))
- {
- const buttons = [
- {text: egw.lang("Edit exception"), id: "exception", class: "ui-priority-primary", "default": true},
- {text: egw.lang("Edit series"), id: "series"},
- {text: egw.lang("Cancel"), id: "cancel"}
- ];
- et2_dialog.show_dialog(
- function(button_id) {callback.call(that, button_id, event_data);},
- (!event_data.is_private ? event_data['title'] : egw.lang('private')) + "\n" +
- egw.lang("Do you want to edit this event as an exception or the whole series?"),
- egw.lang("This event is part of a series"), {}, buttons, et2_dialog.QUESTION_MESSAGE
- );
- }
- else
- {
- callback.call(this,'single',event_data);
- }
- }
-
- /**
- * Split series prompt
- *
- * If the event is recurring and the user adjusts the time or duration, we may need
- * to split the series, ending the current one and creating a new one with the changes.
- * This prompts the user if they really want to do that.
- *
- * There is no default callback, and nothing happens if you call this on a
- * single (non-recurring) event
- *
- * @param {Object} event_data - Event information
- * @param {string} event_data.id - Unique ID for the event, possibly with a timestamp
- * @param {string|Date} instance_date - The date of the edited instance of the event
- * @param {et2_calendar_event~prompt_callback} callback - Callback is
- * called with the button (ok or cancel) and the event data.
- * @augments {et2_calendar_event}
- */
- public static series_split_prompt(event_data, instance_date, callback)
- {
- let egw;
- // seems window.opener somehow in certian conditions could be from different origin
- // we try to catch the exception and in this case retrieve the egw object from current window.
- try {
- egw = this.egw ? (typeof this.egw == 'function' ? this.egw() : this.egw) : window.opener && typeof window.opener.egw != 'undefined' ? window.opener.egw('calendar'):window.egw('calendar');
- }
- catch(e){
- egw = window.egw('calendar');
- }
-
- const that = this;
-
- if(typeof instance_date == 'string')
- {
- instance_date = new Date(instance_date);
- }
-
- // Check for modifying a series that started before today
- const tempDate = new Date();
- const today = new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate(), tempDate.getHours(), -tempDate.getTimezoneOffset(), tempDate.getSeconds());
- const termination_date = instance_date < today ? egw.lang('today') : date(egw.preference('dateformat'), instance_date);
-
- if(parseInt(event_data.recur_type))
- {
- et2_dialog.show_dialog(
- function(button_id) {callback.call(that, button_id, event_data);},
- (!event_data.is_private ? event_data['title'] : egw.lang('private')) + "\n" +
- egw.lang("Do you really want to change the start of this series? If you do, the original series will be terminated as of %1 and a new series for the future reflecting your changes will be created.", termination_date),
- egw.lang("This event is part of a series"), {}, et2_dialog.BUTTONS_OK_CANCEL , et2_dialog.WARNING_MESSAGE
- );
- }
- }
-
- public static drag_helper (event,ui)
- {
- ui.helper.width(ui.width());
- }
-
- /**
- * splits the combined status, quantity and role
- *
- * @param {string} status - combined value, O: status letter: U, T, A, R
- * @param {int} [quantity] - quantity
- * @param {string} [role]
- * @return string status U, T, A or R, same as $status parameter on return
- */
- public static split_status (status,quantity?,role?)
- {
- quantity = 1;
- role = 'REQ-PARTICIPANT';
- //error_log(__METHOD__.__LINE__.array2string($status));
- let matches = null;
- if (typeof status === 'string' && status.length > 1)
- {
- matches = status.match(/^.([0-9]*)(.*)$/gi);
- }
- if(matches)
- {
- if (parseInt(matches[1]) > 0) quantity = parseInt(matches[1]);
- if (matches[2]) role = matches[2];
- status = status[0];
- }
- else if (status === true)
- {
- status = 'U';
- }
- return status;
- }
-
- /**
- * The egw_action system requires an egwActionObjectInterface Interface implementation
- * to tie actions to DOM nodes. I'm not sure if we need this.
- *
- * The class extension is different than the widgets
- *
- * @param {et2_DOMWidget} widget
- * @param {Object} node
- *
- */
- public static et2_event_action_object_impl(widget, node)
- {
- const aoi = new et2_action_object_impl(widget, node).getAOI();
-
- // _outerCall may be used to determine, whether the state change has been
- // evoked from the outside and the stateChangeCallback has to be called
- // or not.
- aoi.doSetState = function(_state, _outerCall) {
};
+ private div: JQuery;
+ private title: JQuery;
+ private body: JQuery;
+ private icons: JQuery;
+ private _need_actions_linked: boolean = false;
+ private _actionObject: egwActionObject;
- return aoi;
- }
+ /**
+ * Constructor
+ */
+ constructor(_parent, _attrs?: WidgetConfig, _child?: object)
+ {
+ // Call the inherited constructor
+ super(_parent, _attrs, ClassWithAttributes.extendAttributes(et2_calendar_event._attributes, _child || {}));
+
+ const event = this;
+
+ // Main container
+ this.div = jQuery(document.createElement("div"))
+ .addClass("calendar_calEvent")
+ .addClass(this.options.class)
+ .css('width', this.options.width)
+ .on('mouseenter', function ()
+ {
+ // Bind actions on first mouseover for faster creation
+ if (event._need_actions_linked)
+ {
+ event._copy_parent_actions();
+ }
+ // Tooltip
+ if (!event._tooltipElem)
+ {
+ event.options.statustext_html = true;
+ event.set_statustext(event._tooltip());
+ if (event.statustext)
+ {
+ return event.div.trigger('mouseenter');
+ }
+ }
+ // Hacky to remove egw's tooltip border and let the mouse in
+ window.setTimeout(function ()
+ {
+ jQuery('body .egw_tooltip')
+ .css('border', 'none')
+ .on('mouseenter', function ()
+ {
+ event.div.off('mouseleave.tooltip');
+ jQuery('body.egw_tooltip').remove();
+ jQuery('body').append(this);
+ jQuery(this).stop(true).fadeTo(400, 1)
+ .on('mouseleave', function ()
+ {
+ jQuery(this).fadeOut('400', function ()
+ {
+ jQuery(this).remove();
+ // Set up to work again
+ event.set_statustext(event._tooltip());
+ });
+ });
+ });
+
+ }, 105);
+ });
+ this.title = jQuery(document.createElement('div'))
+ .addClass("calendar_calEventHeader")
+ .appendTo(this.div);
+ this.body = jQuery(document.createElement('div'))
+ .addClass("calendar_calEventBody")
+ .appendTo(this.div);
+ this.icons = jQuery(document.createElement('div'))
+ .addClass("calendar_calEventIcons")
+ .appendTo(this.title);
+
+ this.setDOMNode(this.div[0]);
+ }
+
+ doLoadingFinished()
+ {
+ super.doLoadingFinished();
+
+ // Already know what is needed to hook to cache
+ if (this.options.value && this.options.value.row_id)
+ {
+ egw.dataRegisterUID(
+ 'calendar::' + this.options.value.row_id,
+ this._UID_callback,
+ this,
+ this.getInstanceManager().execId,
+ this.id
+ );
+ }
+ return true;
+ }
+
+ destroy()
+ {
+ super.destroy();
+
+ if (this._actionObject)
+ {
+ this._actionObject.remove();
+ this._actionObject = null;
+ }
+
+ this.div.off();
+ this.title.remove();
+ this.title = null;
+ this.body.remove();
+ this.body = null;
+ this.icons = null;
+ this.div.remove();
+ this.div = null;
+
+ jQuery('body.egw_tooltip').remove();
+
+ // Unregister, or we'll continue to be notified...
+ if (this.options.value)
+ {
+ const old_app_id = this.options.value.row_id;
+ egw.dataUnregisterUID('calendar::' + old_app_id, null, this);
+ }
+ }
+
+ set_value(_value)
+ {
+ // Un-register for updates
+ if (this.options.value)
+ {
+ var old_id = this.options.value.row_id;
+ if (!_value || !_value.row_id || old_id !== _value.row_id)
+ {
+ egw.dataUnregisterUID('calendar::' + old_id, null, this);
+ }
+ }
+ this.options.value = _value;
+
+ // Register for updates
+ const id = this.options.value.row_id;
+ if (!old_id || old_id !== id)
+ {
+ egw.dataRegisterUID('calendar::' + id, this._UID_callback, this, this.getInstanceManager().execId, this.id);
+ }
+ if (_value && !egw.dataHasUID('calendar::' + id))
+ {
+ egw.dataStoreUID('calendar::' + id, _value);
+ }
+ }
+
+ /**
+ * Callback for changes in cached data
+ */
+ _UID_callback(event)
+ {
+ // Copy to avoid changes, which may cause nm problems
+ const value = event === null ? null : jQuery.extend({}, event);
+ let parent = this.getParent();
+ let parent_owner = parent.getDOMNode(parent).dataset['owner'] || parent.getParent().options.owner;
+ if (parent_owner.indexOf(',') >= 0)
+ {
+ parent_owner = parent_owner.split(',');
+ }
+
+ // Make sure id is a string, check values
+ if (value)
+ {
+ this._values_check(value);
+ }
+
+ // Check for changing days in the grid view
+ let state = this.getInstanceManager().app_obj.calendar.getState() || app.calendar.getState();
+ if (!this._sameday_check(value) || !this._status_check(value, state.status_filter, parent_owner))
+ {
+ // May need to update parent to remove out-of-view events
+ parent.removeChild(this);
+ if (event === null && parent && parent.instanceOf(et2_calendar_daycol))
+ {
+ (parent)._out_of_view();
+ }
+
+ // This should now cease to exist, as new events have been created
+ this.destroy();
+ return;
+ }
+
+ // Copy to avoid changes, which may cause nm problems
+ this.options.value = jQuery.extend({}, value);
+
+ if (this.getParent().options.date)
+ {
+ this.options.value.date = this.getParent().options.date;
+ }
+
+ // Let parent position - could also be et2_calendar_planner_row
+ (this.getParent()).position_event(this);
+
+ // Parent may remove this if the date isn't the same
+ if (this.getParent())
+ {
+ this._update();
+ }
+ }
+
+ /**
+ * Draw the event
+ */
+ _update()
+ {
+
+ // Update to reflect new information
+ const event = this.options.value;
+
+ const id = event.row_id ? event.row_id : event.id + (event.recur_type ? ':' + event.recur_date : '');
+ const formatted_start = event.start.toJSON();
+
+ this.set_id('event_' + id);
+ if (this._actionObject)
+ {
+ this._actionObject.id = 'calendar::' + id;
+ }
+
+ this._need_actions_linked = !this.options.readonly;
+
+ // Make sure category stuff is there
+ // Fake it to use the cache / call - if already there, these will return
+ // immediately.
+ const im = this.getInstanceManager();
+ et2_selectbox.cat_options({
+ _type: 'select-cat',
+ getInstanceManager: function ()
+ {
+ return im;
+ }
+ },
+ {application: event.app || 'calendar'}
+ );
+
+ // Need cleaning? (DnD helper removes content)
+ // @ts-ignore
+ if (!this.div.has(this.title).length)
+ {
+ this.div
+ .empty()
+ .append(this.title)
+ .append(this.body);
+ }
+ if (!this.getParent().options.readonly && !this.options.readonly && this.div.droppable('instance'))
+ {
+ this.div
+ // Let timegrid always get the drag
+ .droppable('option', 'greedy', false);
+ }
+ let tooltip = jQuery(this._tooltip()).text();
+ // DOM nodes
+ this.div
+ // Set full day flag
+ .attr('data-full_day', event.whole_day)
+
+ // Put everything we need for basic interaction here, so it's available immediately
+ .attr('data-id', event.id)
+ .attr('data-app', event.app || 'calendar')
+ .attr('data-app_id', event.app_id)
+ .attr('data-start', formatted_start)
+ .attr('data-owner', event.owner)
+ .attr('data-recur_type', event.recur_type)
+ .attr('data-resize', event.whole_day ? 'WD' : '' + (event.recur_type ? 'S' : ''))
+ .attr('data-priority', event.priority)
+ // Accessibility
+ .attr("tabindex", 0)
+ .attr("aria-label", tooltip)
+ // Remove any category classes
+ .removeClass(function (index, css)
+ {
+ return (css.match(/(^|\s)cat_\S+/g) || []).join(' ');
+ })
+ // Remove any status classes
+ .removeClass(function (index, css)
+ {
+ return (css.match(/calendar_calEvent\S+/g) || []).join(' ');
+ })
+ .removeClass('calendar_calEventSmall')
+ .addClass(event.class)
+ .toggleClass('calendar_calEventPrivate', typeof event.private !== 'undefined' && event.private);
+ this.options.class = event.class;
+ const status_class = this._status_class();
+
+ // Add category classes, if real categories are set
+ if (event.category && event.category != '0')
+ {
+ const cats = event.category.split(',');
+ for (let i = 0; i < cats.length; i++)
+ {
+ this.div.addClass('cat_' + cats[i]);
+ }
+ }
+
+ this.div.toggleClass('calendar_calEventUnknown', event.participants[egw.user('account_id')] ? event.participants[egw.user('account_id')][0] === 'U' : false);
+ this.div.addClass(status_class);
+
+ this.body.toggleClass('calendar_calEventBodySmall', event.whole_day_on_top || false);
+
+ // Header
+ const title = !event.is_private ? egw.htmlspecialchars(event['title']) : egw.lang('private');
+
+ this.title
+ .html('' + this._get_timespan(event) + '
')
+ .append('' + title + '');
+
+ // Colors - don't make them transparent if there is no color
+ // @ts-ignore
+ if (jQuery.Color("rgba(0,0,0,0)").toRgbaString() != jQuery.Color(this.div, 'background-color').toRgbaString())
+ {
+ // Most statuses use colored borders
+ this.div.css('border-color', this.div.css('background-color'));
+ }
+
+ this.icons.appendTo(this.title)
+ .html(this._icons().join(''));
+
+ // Body
+ if (event.whole_day_on_top)
+ {
+ this.body.html(title);
+ }
+ else
+ {
+ // @ts-ignore
+ const start_time = jQuery.datepicker.formatTime(
+ egw.preference("timeformat") === "12" ? "h:mmtt" : "HH:mm",
+ {
+ hour: event.start_m / 60,
+ minute: event.start_m % 60,
+ seconds: 0,
+ timezone: 0
+ },
+ {"ampm": (egw.preference("timeformat") === "12")}
+ ).trim();
+
+ this.body
+ .html('' + title + '')
+ .append('' + start_time + '');
+ if (this.options.value.description.trim())
+ {
+ this.body
+ .append('' + egw.htmlspecialchars(this.options.value.description) + '
');
+ }
+ }
+
+ // Clear tooltip for regeneration
+ this.set_statustext('');
+
+ // Height specific section
+ // This can take an unreasonable amount of time if parent is hidden
+ if (jQuery((this.getParent()).getDOMNode(this)).is(':visible'))
+ {
+ this._small_size();
+ }
+ }
+
+ /**
+ * Calculate display variants for when event is too short for full display
+ *
+ * Display is based on the number of visible lines, calculated off the header
+ * height:
+ * 1 - show just the event title, with ellipsis
+ * 2 - Show timespan and title, with ellipsis
+ * > 4 - Show description as well, truncated to fit
+ */
+ _small_size()
+ {
+
+ if (this.options.value.whole_day_on_top) return;
+
+ // Skip for planner view, it's always small
+ if (this.getParent() && this.getParent().instanceOf(et2_calendar_planner_row)) return;
+
+ // Pre-calculation reset
+ this.div.removeClass('calendar_calEventSmall');
+ this.body.css('height', 'auto');
+
+ const line_height = parseFloat(this.div.css('line-height'));
+ let visible_lines = Math.floor(this.div.innerHeight() / line_height);
+
+ if (!this.title.height())
+ {
+ // Handle sizing while hidden, such as when calendar is not the active tab
+ visible_lines = Math.floor(egw.getHiddenDimensions(this.div).h / egw.getHiddenDimensions(this.title).h);
+ }
+ visible_lines = Math.max(1, visible_lines);
+
+ if (this.getParent() && this.getParent().instanceOf(et2_calendar_daycol))
+ {
+ this.div.toggleClass('calendar_calEventSmall', visible_lines < 4);
+ this.div
+ .attr('data-visible_lines', visible_lines);
+ }
+ else if (this.getParent() && this.getParent().instanceOf(et2_calendar_planner_row))
+ {
+ // Less than 8 hours is small
+ this.div.toggleClass('calendar_calEventSmall', this.options.value.end.valueOf() - this.options.value.start.valueOf() < 28800000);
+ }
+
+
+ if (this.body.height() > this.div.height() - this.title.height() && visible_lines >= 4)
+ {
+ this.body.css('height', Math.floor((visible_lines - 1) * line_height - this.title.height()) + 'px');
+ }
+ else
+ {
+ this.body.css('height', '');
+ }
+ }
+
+ /**
+ * Examines the participants & returns CSS classname for status
+ *
+ * @returns {String}
+ */
+ _status_class()
+ {
+ let status_class = 'calendar_calEventAllAccepted';
+ for (let id in this.options.value.participants)
+ {
+ let status = this.options.value.participants[id];
+
+ status = et2_calendar_event.split_status(status);
+
+ switch (status)
+ {
+ case 'A':
+ case '': // app without status
+ break;
+ case 'U':
+ status_class = 'calendar_calEventSomeUnknown';
+ return status_class; // break for
+ default:
+ status_class = 'calendar_calEventAllAnswered';
+ break;
+ }
+ }
+ return status_class;
+ }
+
+ /**
+ * Create tooltip shown on hover
+ *
+ * @return {String}
+ */
+ _tooltip()
+ {
+ if (!this.div || !this.options.value || !this.options.value.app_id) return '';
+
+ const border = this.div.css('borderTopColor');
+ const bg_color = this.div.css('background-color');
+ const header_color = this.title.css('color');
+ const timespan = this._get_timespan(this.options.value);
+ const parent = this.getParent() instanceof et2_calendar_daycol ? (this.getParent()) : (this.getParent());
+
+ parent.date_helper.set_value(this.options.value.start.valueOf ? new Date(this.options.value.start) : this.options.value.start);
+ const start = parent.date_helper.input_date.val();
+ parent.date_helper.set_value(this.options.value.end.valueOf ? new Date(this.options.value.end) : this.options.value.end);
+ const end = parent.date_helper.input_date.val();
+
+ const times = !this.options.value.multiday ?
+ '' + this.egw().lang('Time') + ':' + timespan :
+ '' + this.egw().lang('Start') + ':' + start + ' ' +
+ '' + this.egw().lang('End') + ':' + end;
+ let cat_label: (string | string[]) = '';
+ if (this.options.value.category)
+ {
+ const cat = et2_createWidget('select-cat', {'readonly': true}, this);
+ cat.set_value(this.options.value.category);
+ cat_label = this.options.value.category.indexOf(',') <= 0 ? cat.span.text() : [];
+ if (typeof cat_label != 'string')
+ {
+ cat.span.children().each(function ()
+ {
+ (cat_label).push(jQuery(this).text());
+ });
+ cat_label = cat_label.join(', ');
+ }
+ cat.destroy();
+ }
+
+ // Activate links in description
+ let description_node = document.createElement("p");
+ description_node.className = "calendar_calEvent_description";
+ et2_insertLinkText(
+ et2_activateLinks(egw.htmlspecialchars(this.options.value.description)), description_node, '_blank'
+ );
+
+ // Location + Videoconference
+ let location = '';
+ if (this.options.value.location || this.options.value['##videoconference'])
+ {
+ location = '';
+ let location_node = document.createElement("span");
+ location_node.className = "calendar_calEventLabel";
+ et2_insertLinkText(et2_activateLinks(
+ this.egw().lang('Location') + ':' +
+ egw.htmlspecialchars(this.options.value.location)), location_node, '_blank');
+ location += location_node.outerHTML;
+
+ if (this.options.value['##videoconference'])
+ {
+ // Click handler is set in _bind_videoconference()
+ location += (this.options.value.location.trim() ? '
' : '') +
+ '' +
+ this.egw().lang('Video conference') +
+ '';
+ this._bind_videoconference();
+ }
+ location += '
';
+ }
+
+ // Participants
+ let participants = '';
+ if (this.options.value.participant_types[''])
+ {
+ participants += this.options.value.participant_types[''].join("
");
+ }
+ for (let type_name in this.options.value.participant_types)
+ {
+ if (type_name)
+ {
+ participants += '' + type_name + ':
';
+ participants += this.options.value.participant_types[type_name].join("
");
+ }
+ }
+
+ return '
';
+ }
+
+ /**
+ * Generate participant summary line
+ *
+ * @returns {String}
+ */
+ _participant_summary(participants)
+ {
+ if (Object.keys(this.options.value.participants).length < 2)
+ {
+ return '';
+ }
+
+ const participant_status = {A: 0, R: 0, T: 0, U: 0, D: 0};
+ const status_label = {A: 'accepted', R: 'rejected', T: 'tentative', U: 'unknown', D: 'delegated'};
+ const participant_summary = Object.keys(this.options.value.participants).length + ' ' + this.egw().lang('Participants') + ': ';
+ const status_totals = [];
+
+ for (let id in this.options.value.participants)
+ {
+ var status = this.options.value.participants[id].substr(0, 1);
+ participant_status[status]++;
+ }
+ for (let status in participant_status)
+ {
+ if (participant_status[status] > 0)
+ {
+ status_totals.push(participant_status[status] + ' ' + this.egw().lang(status_label[status]));
+ }
+ }
+ return participant_summary + status_totals.join(', ');
+ }
+
+ /**
+ * Get actual icons from list
+ */
+ _icons(): string[]
+ {
+ const icons = [];
+
+ if (this.options.value.is_private)
+ {
+ // Hide everything
+ icons.push('');
+ }
+ else
+ {
+ if (this.options.value.icons)
+ {
+ jQuery.extend(icons, this.options.value.icons);
+ }
+ else if (this.options.value.app !== 'calendar')
+ {
+ let app_icon = "" + (egw.link_get_registry(this.options.value.app, 'icon') || (this.options.value.app + '/navbar'));
+ icons.push('');
+ }
+ if (this.options.value.priority == 3)
+ {
+ icons.push('');
+ }
+ if (this.options.value.public == '0')
+ {
+ // Show private flag
+ icons.push('');
+ }
+ if (this.options.value['recur_type'])
+ {
+ icons.push('');
+ }
+ // icons for single user, multiple users or group(s) and resources
+ const single = '';
+ const multiple = '';
+ for (const uid in this.options.value['participants'])
+ {
+ // @ts-ignore
+ if (Object.keys(this.options.value.participants).length == 1 && !isNaN(uid))
+ {
+ icons.push(single);
+ break;
+ }
+ // @ts-ignore
+ if (!isNaN(uid) && icons.indexOf(multiple) === -1)
+ {
+ icons.push(multiple);
+ }
+ /*
+ * TODO: resource icons
+ elseif(!isset($icons[$uid[0]]) && isset($this->bo->resources[$uid[0]]) && isset($this->bo->resources[$uid[0]]['icon']))
+ {
+ $icons[$uid[0]] = html::image($this->bo->resources[$uid[0]]['app'],
+ ($this->bo->resources[$uid[0]]['icon'] ? $this->bo->resources[$uid[0]]['icon'] : 'navbar'),
+ lang($this->bo->resources[$uid[0]]['app']),
+ 'width="16px" height="16px"');
+ }
+ */
+ }
+
+ if (this.options.value.alarm && !jQuery.isEmptyObject(this.options.value.alarm) && !this.options.value.is_private)
+ {
+ icons.push('');
+ }
+ if (this.options.value.participants[egw.user('account_id')] && this.options.value.participants[egw.user('account_id')][0] == 'U')
+ {
+ icons.push('');
+ }
+ if (this.options.value["##videoconference"])
+ {
+ icons.push('');
+ }
+ }
+
+ // Always include non-blocking, regardless of privacy
+ if (this.options.value.non_blocking)
+ {
+ icons.push('');
+ }
+ return icons;
+ }
+
+ /**
+ * Bind the click handler for opening the video conference
+ *
+ * Tooltips are placed in the DOM directly in the body, managed by egw.
+ */
+ _bind_videoconference()
+ {
+ let vc_event = 'click.calendar_videoconference';
+ jQuery('body').off(vc_event)
+ .on(vc_event, '[data-videoconference]', function (event)
+ {
+ let data = egw.dataGetUIDdata("calendar::" + this.dataset.id);
+ app.calendar.joinVideoConference(this.dataset.videoconference, data.data || this.dataset);
+ });
+ }
+
+ /**
+ * Get a text representation of the timespan of the event. Either start
+ * - end, or 'all day'
+ *
+ * @param {Object} event Event to get the timespan for
+ * @param {number} event.start_m Event start, in minutes from midnight
+ * @param {number} event.end_m Event end, in minutes from midnight
+ *
+ * @return {string} Timespan
+ */
+ _get_timespan(event)
+ {
+ let timespan = '';
+ if (event['start_m'] === 0 && event['end_m'] >= 24 * 60 - 1)
+ {
+ if (event['end_m'] > 24 * 60)
+ {
+ // @ts-ignore
+ timespan = jQuery.datepicker.formatTime(
+ egw.preference("timeformat") === "12" ? "h:mmtt" : "HH:mm",
+ {
+ hour: event.start_m / 60,
+ minute: event.start_m % 60,
+ seconds: 0,
+ timezone: 0
+ },
+ {"ampm": (egw.preference("timeformat") === "12")}
+ // @ts-ignore
+ ).trim() + ' - ' + jQuery.datepicker.formatTime(
+ egw.preference("timeformat") === "12" ? "h:mmtt" : "HH:mm",
+ {
+ hour: event.end_m / 60,
+ minute: event.end_m % 60,
+ seconds: 0,
+ timezone: 0
+ },
+ {"ampm": (egw.preference("timeformat") === "12")}
+ ).trim();
+ }
+ else
+ {
+ timespan = this.egw().lang('Whole day');
+ }
+ }
+ else
+ {
+ let duration: string | number = event.multiday ?
+ (event.end - event.start) / 60000 :
+ (event.end_m - event.start_m);
+ duration = Math.floor(duration / 60) + this.egw().lang('h') + (duration % 60 ? duration % 60 : '');
+
+ // @ts-ignore
+ timespan = jQuery.datepicker.formatTime(
+ egw.preference("timeformat") === "12" ? "h:mmtt" : "HH:mm",
+ {
+ hour: event.start_m / 60,
+ minute: event.start_m % 60,
+ seconds: 0,
+ timezone: 0
+ },
+ {"ampm": (egw.preference("timeformat") === "12")}
+ ).trim();
+
+ // @ts-ignore
+ timespan += ' - ' + jQuery.datepicker.formatTime(
+ egw.preference("timeformat") === "12" ? "h:mmtt" : "HH:mm",
+ {
+ hour: event.end_m / 60,
+ minute: event.end_m % 60,
+ seconds: 0,
+ timezone: 0
+ },
+ {"ampm": (egw.preference("timeformat") === "12")}
+ ).trim();
+
+ timespan += ': ' + duration;
+ }
+ return timespan;
+ }
+
+ /**
+ * Make sure event data has all proper values, and format them as expected
+ * @param {Object} event
+ */
+ _values_check(event)
+ {
+ // Make sure ID is a string
+ if (event.id)
+ {
+ event.id = '' + event.id;
+ }
+
+ // Parent might be a daycol or a planner_row
+ let parent = this.getParent();
+
+ // Use dates as objects
+ if (typeof event.start !== 'object')
+ {
+ parent.date_helper.set_value(event.start);
+ event.start = new Date(parent.date_helper.getValue());
+ }
+ if (typeof event.end !== 'object')
+ {
+ parent.date_helper.set_value(event.end);
+ event.end = new Date(parent.date_helper.getValue());
+ }
+
+ // We need minutes for durations
+ if (typeof event.start_m === 'undefined')
+ {
+ event.start_m = event.start.getUTCHours() * 60 + event.start.getUTCMinutes();
+ event.end_m = event.end.getUTCHours() * 60 + event.end.getUTCMinutes();
+ }
+ if (typeof event.multiday === 'undefined')
+ {
+ event.multiday = (event.start.getUTCFullYear() !== event.end.getUTCFullYear() ||
+ event.start.getUTCMonth() !== event.end.getUTCMonth() ||
+ event.start.getUTCDate() != event.end.getUTCDate());
+ }
+ if (!event.start.getUTCHours() && !event.start.getUTCMinutes() && event.end.getUTCHours() == 23 && event.end.getUTCMinutes() == 59)
+ {
+ event.whole_day_on_top = (event.non_blocking && event.non_blocking != '0');
+ }
+ }
+
+ /**
+ * Check to see if the provided event information is for the same date as
+ * what we're currently expecting, and that it has not been changed.
+ *
+ * If the date has changed, we adjust the associated daywise caches to move
+ * the event's ID to where it should be. This check allows us to be more
+ * directly reliant on the data cache, and less on any other control logic
+ * elsewhere first.
+ *
+ * @param {Object} event Map of event data from cache
+ * @param {string} event.date For non-recurring, single day events, this is
+ * the date the event is on.
+ * @param {string} event.start Start of the event (used for multi-day events)
+ * @param {string} event.end End of the event (used for multi-day events)
+ *
+ * @return {Boolean} Provided event data is for the same date
+ */
+ _sameday_check(event)
+ {
+ // Event somehow got orphaned, or deleted
+ if (!this.getParent() || event === null)
+ {
+ return false;
+ }
+
+ // Also check participants against owner
+ const owner_match = et2_calendar_event.owner_check(event, this.getParent());
+
+ // Simple, same day
+ if (owner_match && this.options.value.date && event.date == this.options.value.date)
+ {
+ return true;
+ }
+
+ // Multi-day non-recurring event spans days - date does not match
+ const event_start = new Date(event.start);
+ const event_end = new Date(event.end);
+ const parent = this.getParent();
+ if (owner_match && (parent instanceof et2_calendar_daycol) && parent.getDate() >= event_start && parent.getDate() <= event_end)
+ {
+ return true;
+ }
+
+ // Delete all old actions
+ if (this._actionObject)
+ {
+ this._actionObject.clear();
+ this._actionObject.unregisterActions();
+ this._actionObject = null;
+ }
+
+ // Update daywise caches
+ const new_cache_id = CalendarApp._daywise_cache_id(event.date, this.getParent().options.owner);
+ let new_daywise: any = egw.dataGetUIDdata(new_cache_id);
+ new_daywise = new_daywise && new_daywise.data ? new_daywise.data : [];
+ let old_cache_id = '';
+ if (this.options.value && this.options.value.date)
+ {
+ old_cache_id = CalendarApp._daywise_cache_id(this.options.value.date, parent.options.owner);
+ }
+
+ if (new_cache_id != old_cache_id)
+ {
+ let old_daywise: any = egw.dataGetUIDdata(old_cache_id);
+ old_daywise = old_daywise && old_daywise.data ? old_daywise.data : [];
+ old_daywise.splice(old_daywise.indexOf(this.options.value.row_id), 1);
+ egw.dataStoreUID(old_cache_id, old_daywise);
+
+ if (new_daywise.indexOf(event.row_id) < 0)
+ {
+ new_daywise.push(event.row_id);
+ }
+ if (egw.dataHasUID(new_cache_id))
+ {
+ egw.dataStoreUID(new_cache_id, new_daywise);
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Check that the event passes the given status filter.
+ * Status filter is set in the sidebox and used when fetching several events, but if user changes their status
+ * for an event, it may no longer match and have to be removed.
+ *
+ * @param event
+ * @param filter
+ * @param owner The owner of the target / parent, not the event owner
+ * @private
+ */
+ _status_check(event, filter: string, owner: string | string[]): boolean
+ {
+ if (!owner || !event)
+ {
+ return false;
+ }
+
+ // If we're doing a bunch, just one passing is enough
+ if (typeof owner !== "string")
+ {
+ let pass = false;
+ for (let j = 0; j < owner.length && pass == false; j++)
+ {
+ pass = pass || this._status_check(event, filter, owner[j]);
+ }
+ return pass;
+ }
+
+ // Show also events just owned by selected user
+ // Group members can be owner too, those get handled when we check group memberships below
+ if (filter == 'owner' && owner == event.owner)
+ {
+ return true;
+ }
+
+ // Get the relevant participant
+ let participant = event.participants[owner];
+
+ // If filter says don't look in groups, skip it all
+ if (!participant && filter === 'no-enum-groups')
+ {
+ return false;
+ }
+
+ // Couldn't find the current owner in the participant list, check groups & resources
+ if (!participant)
+ {
+ let options: any = null;
+ if (app.calendar && app.calendar.sidebox_et2 && app.calendar.sidebox_et2.getWidgetById('owner'))
+ {
+ options = app.calendar.sidebox_et2.getWidgetById('owner').taglist.getSelection();
+ }
+ if ((isNaN(parseInt(owner)) || parseInt(owner) < 0) && options && typeof options.find == "function")
+ {
+ let resource = options.find(function (element)
+ {
+ return element.id == owner;
+ }) || {};
+ let matching_participant = typeof resource.resources == "undefined" ?
+ resource :
+ resource?.resources.filter(id => typeof event.participants[id] != "undefined");
+ if (matching_participant.length > 0)
+ {
+ return this._status_check(event, filter, matching_participant);
+ }
+ else if (filter == 'owner' && resource && resource.resources && resource.resources.indexOf(event.owner))
+ {
+ // owner param was a group but event is owned by someone in that group
+ return true;
+ }
+ }
+ }
+
+ let status = et2_calendar_event.split_status(participant);
+
+ switch (filter)
+ {
+ default:
+ case 'all':
+ return true;
+ case 'default': // Show all status, but rejected
+ return status !== 'R';
+ case 'accepted': //Show only accepted events
+ return status === 'A'
+ case 'unknown': // Show only invitations, not yet accepted or rejected
+ return status === 'U';
+ case 'tentative': // Show only tentative accepted events
+ return status === 'T';
+ case 'delegated': // Show only delegated events
+ return status === 'D';
+ case 'rejected': // Show only rejected events
+ return status === 'R';
+ // Handled above
+ //case 'owner': // Show also events just owned by selected user
+ case 'hideprivate': // Show all events, as if they were private
+ // handled server-side
+ return true;
+ case 'showonlypublic': // Show only events flagged as public, -not checked as private
+ return event.public == '1';
+ // Handled above
+ // case 'no-enum-groups': // Do not include events of group members
+ case 'not-unknown': // Show all status, but unknown
+ return status !== 'U';
+ case 'deleted': // Show events that have been deleted
+ return event.deleted;
+ }
+ }
+
+ attachToDOM()
+ {
+ let result = super.attachToDOM();
+
+ // Remove the binding for the click handler, unless there's something
+ // custom here.
+ if (!this.onclick)
+ {
+ jQuery(this.node).off("click");
+ }
+ return result;
+ }
+
+ /**
+ * Click handler calling custom handler set via onclick attribute to this.onclick.
+ * All other handling is done by the timegrid widget.
+ *
+ * @param {Event} _ev
+ * @returns {boolean}
+ */
+ click(_ev)
+ {
+ let result = true;
+ if (typeof this.onclick == 'function')
+ {
+ // Make sure function gets a reference to the widget, splice it in as 2. argument if not
+ const args = Array.prototype.slice.call(arguments);
+ if (args.indexOf(this) == -1) args.splice(1, 0, this);
+
+ result = this.onclick.apply(this, args);
+ }
+ return result;
+ }
+
+ /**
+ * Show the recur prompt for this event
+ *
+ * Calls et2_calendar_event.recur_prompt with this event's value.
+ *
+ * @param {et2_calendar_event~prompt_callback} callback
+ * @param {Object} [extra_data]
+ */
+ recur_prompt(callback, extra_data)
+ {
+ et2_calendar_event.recur_prompt(this.options.value, callback, extra_data);
+ }
+
+ /**
+ * Show the series split prompt for this event
+ *
+ * Calls et2_calendar_event.series_split_prompt with this event's value.
+ *
+ * @param {et2_calendar_event~prompt_callback} callback
+ */
+ series_split_prompt(callback)
+ {
+ et2_calendar_event.series_split_prompt(this.options.value, this.options.value.recur_date, callback);
+ }
+
+ /**
+ * Copy the actions set on the parent, apply them to self
+ *
+ * This can take a while to do, so we try to do it only when needed - on mouseover
+ */
+ _copy_parent_actions()
+ {
+ // Copy actions set in parent
+ if (!this.options.readonly && !this.getParent().options.readonly)
+ {
+ let action_parent: et2_widget = this;
+ while (action_parent != null && !action_parent.options.actions &&
+ !(action_parent instanceof et2_container)
+ )
+ {
+ action_parent = action_parent.getParent();
+ }
+ try
+ {
+ this._link_actions(action_parent.options.actions || {});
+ this._need_actions_linked = false;
+ }
+ catch (e)
+ {
+ // something went wrong, but keep quiet about it
+ }
+ }
+ }
+
+ /**
+ * Link the actions to the DOM nodes / widget bits.
+ *
+ * @param {object} actions {ID: {attributes..}+} map of egw action information
+ */
+ _link_actions(actions)
+ {
+ if (!this._actionObject)
+ {
+ // Get the top level element - timegrid or so
+ var objectManager = this.getParent()._actionObject || this.getParent().getParent()._actionObject ||
+ egw_getAppObjectManager(true).getObjectById(this.getParent().getParent().getParent().id) || egw_getAppObjectManager(true);
+ this._actionObject = objectManager.getObjectById('calendar::' + this.options.value.row_id);
+ }
+
+ if (this._actionObject == null)
+ {
+ // Add a new container to the object manager which will hold the widget
+ // objects
+ this._actionObject = objectManager.insertObject(false, new egwActionObject(
+ 'calendar::' + this.options.value.row_id, objectManager, et2_calendar_event.et2_event_action_object_impl(this, this.getDOMNode()),
+ this._actionManager || objectManager.manager.getActionById('calendar::' + this.options.value.row_id) || objectManager.manager
+ ));
+ }
+ else
+ {
+ this._actionObject.setAOI(et2_calendar_event.et2_event_action_object_impl(this, this.getDOMNode(this)));
+ }
+
+ // Delete all old objects
+ this._actionObject.clear();
+ this._actionObject.unregisterActions();
+
+ // Go over the widget & add links - this is where we decide which actions are
+ // 'allowed' for this widget at this time
+ const action_links = this._get_action_links(actions);
+ action_links.push('egw_link_drag');
+ action_links.push('egw_link_drop');
+ if (this._actionObject.parent.getActionLink('invite'))
+ {
+ action_links.push('invite');
+ }
+ this._actionObject.updateActionLinks(action_links);
+ }
+
+ /**
+ * Code for implementing et2_IDetachedDOM
+ *
+ * @param {array} _attrs array to add further attributes to
+ */
+ getDetachedAttributes(_attrs)
+ {
+
+ }
+
+ getDetachedNodes()
+ {
+ return [this.getDOMNode()];
+ }
+
+ setDetachedAttributes(_nodes, _values)
+ {
+
+ }
+
+ // Static class stuff
+ /**
+ * Check event owner against a parent object
+ *
+ * As an event is edited, its participants may change. Also, as the state
+ * changes we may change which events are displayed and show the same event
+ * in several places for different users. Here we check the event participants
+ * against an owner value (which may be an array) to see if the event should be
+ * displayed or included.
+ *
+ * @param {Object} event - Event information
+ * @param {et2_widget_daycol|et2_widget_planner_row} parent - potential parent object
+ * that has an owner option
+ * @param {boolean} [owner_too] - Include the event owner in consideration, or only
+ * event participants
+ *
+ * @return {boolean} Should the event be displayed
+ */
+ static owner_check(event, parent, owner_too?)
+ {
+ let owner_match = true;
+ let state = (parent.getInstanceManager ? parent.getInstanceManager().app_obj.calendar.state : false) || app.calendar?.state || {}
+ if (typeof owner_too === 'undefined' && state.status_filter)
+ {
+ owner_too = state.status_filter === 'owner';
+ }
+ let options: any = null;
+ if (app.calendar && app.calendar.sidebox_et2 && app.calendar.sidebox_et2.getWidgetById('owner'))
+ {
+ options = app.calendar.sidebox_et2.getWidgetById('owner').taglist.getSelection();
+ }
+ else
+ {
+ options = parent.getArrayMgr("sel_options").getRoot().getEntry('owner');
+ }
+ if (event.participants && typeof parent.options.owner != 'undefined' && parent.options.owner.length > 0)
+ {
+ var parent_owner = jQuery.extend([], typeof parent.options.owner !== 'object' ?
+ [parent.options.owner] :
+ parent.options.owner);
+ owner_match = false;
+ const length = parent_owner.length;
+ for (var i = 0; i < length; i++)
+ {
+ // Handle groups & grouped resources like mailing lists, they won't match so
+ // we need the list - pull it from sidebox owner
+ if ((isNaN(parent_owner[i]) || parent_owner[i] < 0) && options && typeof options.find == "function")
+ {
+ var resource = options.find(function (element)
+ {
+ return element.id == parent_owner[i];
+ }) || {};
+ if (resource && resource.resources)
+ {
+ parent_owner.splice(i, 1);
+ i--;
+ parent_owner = parent_owner.concat(resource.resources);
+
+ }
+ }
+ }
+ let participants = jQuery.extend([], Object.keys(event.participants));
+ for (var i = 0; i < participants.length; i++)
+ {
+ const id = participants[i];
+ // Expand group invitations
+ if (parseInt(id) < 0)
+ {
+ // Add in groups, if we can get them from options, great
+ var resource;
+ if (options && options.find && (resource = options.find(function (element)
+ {
+ return element.id === id;
+ })) && resource.resources)
+ {
+ participants = participants.concat(resource.resources);
+ }
+ else
+ {
+ // Add in groups, if we can get them (this is asynchronous)
+ egw.accountData(id, 'account_id', true, function (members)
+ {
+ participants = participants.concat(Object.keys(members));
+ }, this);
+ }
+ }
+ if (parent.options.owner == id ||
+ parent_owner.indexOf &&
+ parent_owner.indexOf(id) >= 0)
+ {
+ owner_match = true;
+ break;
+ }
+ }
+ }
+ if (owner_too && !owner_match)
+ {
+ owner_match = (parent.options.owner == event.owner ||
+ parent_owner.indexOf &&
+ parent_owner.indexOf(event.owner) >= 0);
+ }
+ return owner_match;
+ }
+
+ /**
+ * @callback et2_calendar_event~prompt_callback
+ * @param {string} button_id - One of ok, exception, series, single or cancel
+ * depending on which buttons are on the prompt
+ * @param {Object} event_data - Event information - whatever you passed in to
+ * the prompt.
+ */
+ /**
+ * Recur prompt
+ * If the event is recurring, asks the user if they want to edit the event as
+ * an exception, or change the whole series. Then the callback is called.
+ *
+ * If callback is not provided, egw.open() will be used to open an edit dialog.
+ *
+ * If you call this on a single (non-recurring) event, the callback will be
+ * executed immediately, with the passed button_id as 'single'.
+ *
+ * @param {Object} event_data - Event information
+ * @param {string} event_data.id - Unique ID for the event, possibly with a
+ * timestamp
+ * @param {string|Date} event_data.start - Start date/time for the event
+ * @param {number} event_data.recur_type - Recur type, or 0 for a non-recurring event
+ * @param {et2_calendar_event~prompt_callback} [callback] - Callback is
+ * called with the button (exception, series, single or cancel) and the event
+ * data.
+ * @param {Object} [extra_data] - Additional data passed to the callback, used
+ * as extra parameters for default callback
+ *
+ * @augments {et2_calendar_event}
+ */
+ public static recur_prompt(event_data, callback?, extra_data?)
+ {
+ let egw;
+ const edit_id = event_data.app_id;
+ const edit_date = event_data.start;
+
+ // seems window.opener somehow in certain conditions could be from different origin
+ // we try to catch the exception and in this case retrieve the egw object from current window.
+ try
+ {
+ egw = this.egw ? (typeof this.egw == 'function' ? this.egw() : this.egw) : window.opener && typeof window.opener.egw != 'undefined' ? window.opener.egw('calendar') : window.egw('calendar');
+ }
+ catch (e)
+ {
+ egw = window.egw('calendar');
+ }
+
+ const that = this;
+
+ const extra_params = extra_data && typeof extra_data == 'object' ? extra_data : {};
+ extra_params.date = edit_date.toJSON ? edit_date.toJSON() : edit_date;
+ if (typeof callback != 'function')
+ {
+ callback = function (_button_id)
+ {
+ switch (_button_id)
+ {
+ case 'exception':
+ extra_params.exception = '1';
+ egw.open(edit_id, event_data.app || 'calendar', 'edit', extra_params);
+ break;
+ case 'series':
+ case 'single':
+ egw.open(edit_id, event_data.app || 'calendar', 'edit', extra_params);
+ break;
+ case 'cancel':
+ default:
+ break;
+ }
+ };
+ }
+ if (parseInt(event_data.recur_type))
+ {
+ const buttons = [
+ {text: egw.lang("Edit exception"), id: "exception", class: "ui-priority-primary", "default": true},
+ {text: egw.lang("Edit series"), id: "series"},
+ {text: egw.lang("Cancel"), id: "cancel"}
+ ];
+ et2_dialog.show_dialog(
+ function (button_id)
+ {
+ callback.call(that, button_id, event_data);
+ },
+ (!event_data.is_private ? event_data['title'] : egw.lang('private')) + "\n" +
+ egw.lang("Do you want to edit this event as an exception or the whole series?"),
+ egw.lang("This event is part of a series"), {}, buttons, et2_dialog.QUESTION_MESSAGE
+ );
+ }
+ else
+ {
+ callback.call(this, 'single', event_data);
+ }
+ }
+
+ /**
+ * Split series prompt
+ *
+ * If the event is recurring and the user adjusts the time or duration, we may need
+ * to split the series, ending the current one and creating a new one with the changes.
+ * This prompts the user if they really want to do that.
+ *
+ * There is no default callback, and nothing happens if you call this on a
+ * single (non-recurring) event
+ *
+ * @param {Object} event_data - Event information
+ * @param {string} event_data.id - Unique ID for the event, possibly with a timestamp
+ * @param {string|Date} instance_date - The date of the edited instance of the event
+ * @param {et2_calendar_event~prompt_callback} callback - Callback is
+ * called with the button (ok or cancel) and the event data.
+ * @augments {et2_calendar_event}
+ */
+ public static series_split_prompt(event_data, instance_date, callback)
+ {
+ let egw;
+ // seems window.opener somehow in certian conditions could be from different origin
+ // we try to catch the exception and in this case retrieve the egw object from current window.
+ try
+ {
+ egw = this.egw ? (typeof this.egw == 'function' ? this.egw() : this.egw) : window.opener && typeof window.opener.egw != 'undefined' ? window.opener.egw('calendar') : window.egw('calendar');
+ }
+ catch (e)
+ {
+ egw = window.egw('calendar');
+ }
+
+ const that = this;
+
+ if (typeof instance_date == 'string')
+ {
+ instance_date = new Date(instance_date);
+ }
+
+ // Check for modifying a series that started before today
+ const tempDate = new Date();
+ const today = new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate(), tempDate.getHours(), -tempDate.getTimezoneOffset(), tempDate.getSeconds());
+ const termination_date = instance_date < today ? egw.lang('today') : date(egw.preference('dateformat'), instance_date);
+
+ if (parseInt(event_data.recur_type))
+ {
+ et2_dialog.show_dialog(
+ function (button_id)
+ {
+ callback.call(that, button_id, event_data);
+ },
+ (!event_data.is_private ? event_data['title'] : egw.lang('private')) + "\n" +
+ egw.lang("Do you really want to change the start of this series? If you do, the original series will be terminated as of %1 and a new series for the future reflecting your changes will be created.", termination_date),
+ egw.lang("This event is part of a series"), {}, et2_dialog.BUTTONS_OK_CANCEL, et2_dialog.WARNING_MESSAGE
+ );
+ }
+ }
+
+ public static drag_helper(event, ui)
+ {
+ ui.helper.width(ui.width());
+ }
+
+ /**
+ * splits the combined status, quantity and role
+ *
+ * @param {string} status - combined value, O: status letter: U, T, A, R
+ * @param {int} [quantity] - quantity
+ * @param {string} [role]
+ * @return string status U, T, A or R, same as $status parameter on return
+ */
+ public static split_status(status, quantity?, role?)
+ {
+ quantity = 1;
+ role = 'REQ-PARTICIPANT';
+ //error_log(__METHOD__.__LINE__.array2string($status));
+ let matches = null;
+ if (typeof status === 'string' && status.length > 1)
+ {
+ matches = status.match(/^.([0-9]*)(.*)$/gi);
+ }
+ if (matches)
+ {
+ if (parseInt(matches[1]) > 0) quantity = parseInt(matches[1]);
+ if (matches[2]) role = matches[2];
+ status = status[0];
+ }
+ else if (status === true)
+ {
+ status = 'U';
+ }
+ return status;
+ }
+
+ /**
+ * The egw_action system requires an egwActionObjectInterface Interface implementation
+ * to tie actions to DOM nodes. I'm not sure if we need this.
+ *
+ * The class extension is different than the widgets
+ *
+ * @param {et2_DOMWidget} widget
+ * @param {Object} node
+ *
+ */
+ public static et2_event_action_object_impl(widget, node)
+ {
+ const aoi = new et2_action_object_impl(widget, node).getAOI();
+
+ // _outerCall may be used to determine, whether the state change has been
+ // evoked from the outside and the stateChangeCallback has to be called
+ // or not.
+ aoi.doSetState = function (_state, _outerCall)
+ {
+ };
+
+ return aoi;
+ }
}
+
et2_register_widget(et2_calendar_event, ["calendar-event"]);
\ No newline at end of file