diff --git a/.gitignore b/.gitignore index 200add3..960b995 100644 --- a/.gitignore +++ b/.gitignore @@ -1,23 +1,26 @@ .DS_Store -.sass-cache/ -.project/ -.idea/ -build/ -css/*.map -js/*forms.* -js/chunks/ -js/*.svg -nbproject/ node_modules/ -npm-debug.log -Thumbs.db -yarn-error.log -*.cmd -*.lock -*.iml +vendor/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* +composer.lock + +# Editor directories and files +.idea +.vscode +*.suo *.ntvs* *.njsproj *.sln -*.suo -.svn -vendor/ + +.marginalia + +build/ +coverage/ + +cypress/screenshots +cypress/snapshots + +# Compiled files +js/ diff --git a/appinfo/routes.php b/appinfo/routes.php index 764a3b7..93ee157 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -24,14 +24,15 @@ return [ 'routes' => [ ['name' => 'page#index', 'url' => '/', 'verb' => 'GET'], - ['name' => 'page#goto_form', 'url' => '/form/{hash}', 'verb' => 'GET'], - ['name' => 'page#create_form', 'url' => '/new', 'verb' => 'GET'], - ['name' => 'page#edit_form', 'url' => '/edit/{hash}', 'verb' => 'GET'], - ['name' => 'page#clone_form', 'url' => '/clone/{hash}', 'verb' => 'GET'], - ['name' => 'page#getResult', 'url' => '/results/{id}', 'verb' => 'GET'], + // Before /{hash} to avoid conflict + ['name' => 'page#createForm', 'url' => '/new', 'verb' => 'GET'], + ['name' => 'page#editForm', 'url' => '/{hash}/edit/', 'verb' => 'GET'], + ['name' => 'page#cloneForm', 'url' => '/{hash}/clone/', 'verb' => 'GET'], + ['name' => 'page#getResult', 'url' => '/{hash}/results/', 'verb' => 'GET'], + + ['name' => 'page#goto_form', 'url' => '/{hash}', 'verb' => 'GET'], - ['name' => 'page#delete_form', 'url' => '/delete', 'verb' => 'POST'], ['name' => 'page#insert_vote', 'url' => '/insert/vote', 'verb' => 'POST'], ['name' => 'page#search', 'url' => '/search', 'verb' => 'POST'], ['name' => 'page#get_display_name', 'url' => '/get/displayname', 'verb' => 'POST'], @@ -42,10 +43,10 @@ return [ ['name' => 'api#get_votes', 'url' => '/get/votes/{formId}', 'verb' => 'GET'], ['name' => 'api#get_shares', 'url' => '/get/shares/{formId}', 'verb' => 'GET'], ['name' => 'api#get_event', 'url' => '/get/event/{formId}', 'verb' => 'GET'], - ['name' => 'api#remove_form', 'url' => '/forms/{id}', 'verb' => 'DELETE'], ['name' => 'api#get_forms', 'url' => '/get/forms', 'verb' => 'GET'], ['name' => 'api#newForm', 'url' => 'api/v1/form', 'verb' => 'POST'], + ['name' => 'api#deleteForm', 'url' => 'api/v1/form/{id}', 'verb' => 'DELETE'], ['name' => 'system#get_site_users_and_groups', 'url' => '/get/siteusers', 'verb' => 'POST'], ] diff --git a/css/colors.scss b/css/colors.scss deleted file mode 100644 index 6495a93..0000000 --- a/css/colors.scss +++ /dev/null @@ -1,33 +0,0 @@ -$bg-no: #ffede9; -$bg-maybe: #fcf7e1; -$bg-unvoted: #fff4c8; -$bg-yes: #ebf5d6; -$bg-information: #b19c3e; - -$fg-no: #f45573; -$fg-maybe: #f0db98; -$fg-unvoted: #f0db98; -$fg-yes: #49bc49; - -// Icon definitions -@include icon-black-white('app', 'forms', 2); - -.icon-yes { - @include icon-color('checkmark', 'actions', $fg-yes, 1, true); -} - -.icon-comment-yes { - @include icon-color('comment', 'actions', $fg-yes, 1, true); -} - -.icon-comment-no { - @include icon-color('comment', 'actions', $fg-no, 1, true); -} - -.icon-no { - @include icon-color('close', 'actions', $fg-no, 1, true); -} - -.icon-maybe { - @include icon-color('maybe-vote-variant', 'forms', $fg-maybe); -} diff --git a/css/forms.scss b/css/forms.scss new file mode 100644 index 0000000..93649ee --- /dev/null +++ b/css/forms.scss @@ -0,0 +1,23 @@ +/** + * @copyright Copyright (c) 2020 John Molakvoæ + * + * @author John Molakvoæ + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +@import 'icons' diff --git a/css/icons.scss b/css/icons.scss new file mode 100644 index 0000000..a799705 --- /dev/null +++ b/css/icons.scss @@ -0,0 +1,24 @@ + +// Icon definitions +@include icon-black-white('forms', 'forms', 3); +@include icon-black-white('clone', 'forms', 1); + +.icon-yes { + @include icon-color('checkmark', 'actions', $color-success, 1, true); +} + +.icon-comment-yes { + @include icon-color('comment', 'actions', $color-success, 1, true); +} + +.icon-comment-no { + @include icon-color('comment', 'actions', $color-error, 1, true); +} + +.icon-no { + @include icon-color('close', 'actions', $color-error, 1, true); +} + +.icon-maybe { + @include icon-color('maybe-vote-variant', 'forms', $color-warning); +} diff --git a/css/sidebar.scss b/css/sidebar.scss deleted file mode 100644 index eb8cf38..0000000 --- a/css/sidebar.scss +++ /dev/null @@ -1,214 +0,0 @@ -@import 'colors.scss'; - -$border_current_user: 2px solid; -$border_user: 1px solid var(--color-border-dark); -$user-column-width: 265px; - -#forms-sidebar { - width: 520px; - flex-grow: 0; - flex-shrink: 1; - min-width: 300px; - border-left: 1px solid var(--color-border); - transition: margin-right 300ms; - z-index: 500; - > div, - > ul { - padding: 8px; - } -} - -.authorRow { - align-items: center; - .author { - margin-left: 8px; - opacity: 0.5; - flex-grow: 1; - &.external { - margin-right: 33px; - opacity: 1; - > input { - width: 100%; - } - } - } -} - -.detailsView { - z-index: 1000 !important; - .close.flex-row { - justify-content: flex-end; - margin: 8px 8px 0 0; - } - - .header.flex-row { - flex-direction: row; - flex-grow: 0; - align-items: flex-start; - margin-left: 0; - margin-top: 0; - padding: 0 17px; - } - - .formInformation { - width: 220px; - flex-grow: 1; - flex-shrink: 1; - padding-right: 15px; - - .authorRow { - .leftLabel { - margin-right: 4px; - } - } - - .cloud { - margin: 4px 0; - - > span { - color: var(--color-primary-text); - margin: 2px; - padding: 2px 4px; - border-radius: var(--border-radius); - float: left; - text-shadow: 1px 1px var(--color-box-shadow); - background-color: var(--color-loading-light); - } - .open { - background-color: $fg-yes; - } - .expired { - background-color: $fg-no; - } - .information { - background-color: $bg-information; - } - } - } - #expired_info { - margin: 0 15px; - } - - .formActions { - display: flex; - flex-direction: column; - margin-right: 15px; - - .close { - margin: 15px; - background-position: right top; - height: 30px; - } - - > ul > li { - &:focus, - &:hover, - &.active, - a.selected { - &, - > a { - opacity: 1; - box-shadow: inset 4px 0 var(--color-primary); - } - } - - > a[class*='icon-'], - > ul > li > a[class*='icon-'], - > a[style*='background-image'], - > ul > li > a[style*='background-image'] { - padding-left: 44px; - } - - > a, - > ul > li > a { - background-size: 16px 16px; - background-position: 14px center; - background-repeat: no-repeat; - display: block; - justify-content: space-between; - line-height: 44px; - min-height: 44px; - padding: 0 12px; - overflow: hidden; - box-sizing: border-box; - white-space: nowrap; - text-overflow: ellipsis; - color: var(--color-main-text); - opacity: 0.57; - flex: 1 1 0; - z-index: 100; - } - a, - .app-navigation-entry-deleted { - padding-left: 44px !important; - } - } - } - #configurationsTabView { - .configBox { - padding: 8px 8px; - - > .title { - font-weight: bold; - margin-bottom: 4px; - } - - > div { - padding-left: 4px; - } - - input.hasDatepicker { - margin-left: 17px; - } - &.oneline { - width: 100%; - } - } - } - #commentsTabView { - .newCommentForm div.message:empty:before { - content: attr(data-placeholder); - color: grey; - } - #commentBox { - border: 1px solid var(--color-border-dark); - border-radius: var(--border-radius); - padding: 7px 6px; - margin: 3px 3px 3px 40px; - cursor: text; - } - .comment { - margin-bottom: 30px; - - .date { - right: 0; - top: 5px; - opacity: 0.5; - } - } - - .message { - margin-left: 40px; - flex-grow: 1; - flex-shrink: 1; - } - - .new-comment { - .submitComment { - align-self: last baseline; - width: 30px; - margin: 0; - padding: 7px 9px; - background-color: transparent; - border: none; - opacity: 0.3; - } - - .icon-loading-small { - float: left; - margin-top: 10px; - display: none; - } - } - } -} diff --git a/img/app.png b/img/app.png deleted file mode 100644 index cf801c0..0000000 Binary files a/img/app.png and /dev/null differ diff --git a/img/app.svg b/img/app.svg index d85219c..63cfdc3 100644 --- a/img/app.svg +++ b/img/app.svg @@ -1 +1,8 @@ - + + + + + + + + diff --git a/img/clone.svg b/img/clone.svg new file mode 100644 index 0000000..469fd1b --- /dev/null +++ b/img/clone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/favicon-mask.svg b/img/favicon-mask.svg deleted file mode 100644 index 094e556..0000000 --- a/img/favicon-mask.svg +++ /dev/null @@ -1,45 +0,0 @@ - -image/svg+xml \ No newline at end of file diff --git a/img/favicon-touch.png b/img/favicon-touch.png deleted file mode 100644 index dec255f..0000000 Binary files a/img/favicon-touch.png and /dev/null differ diff --git a/img/favicon-touch.svg b/img/favicon-touch.svg deleted file mode 100644 index 6503143..0000000 --- a/img/favicon-touch.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/img/favicon.ico b/img/favicon.ico deleted file mode 100644 index b5c8ac6..0000000 Binary files a/img/favicon.ico and /dev/null differ diff --git a/img/favicon.png b/img/favicon.png deleted file mode 100644 index 75f5c15..0000000 Binary files a/img/favicon.png and /dev/null differ diff --git a/img/favicon.svg b/img/favicon.svg deleted file mode 100644 index 80b12d0..0000000 --- a/img/favicon.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/img/forms.svg b/img/forms.svg new file mode 100644 index 0000000..63cfdc3 --- /dev/null +++ b/img/forms.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/js/.jshintrc b/js/.jshintrc deleted file mode 100644 index 374bc06..0000000 --- a/js/.jshintrc +++ /dev/null @@ -1,46 +0,0 @@ -{ - "curly": true, - "eqeqeq": true, - "immed": true, - "indent": 4, - "latedef": true, - "noarg": true, - "noempty": true, - "nonew": true, - "plusplus": false, - "node": true, - "undef": true, - "unused": false, - "strict": false, - "maxparams": false, - "maxdepth": 4, - "esversion": 6, - "browser": true, - "devel": true, - "jquery": true, - "jasmine": true, - "laxbreak": true, - "globals": { - "jQuery": true, - "ICAL": true, - "jstz": true, - "moment": true, - "angular": true, - "app": true, - "OC": true, - "oc_current_user":true, - "oc_requesttoken": true, - "requestToken": true, - "inject": true, - "module": true, - "t": true, - "it": true, - "exports": true, - "escapeHTML": true, - "possible": true, - "dav": true, - "hslToRgb": true, - "autosize": true, - "_": true - } -} diff --git a/js/app.js b/js/app.js deleted file mode 100644 index d23b0b3..0000000 --- a/js/app.js +++ /dev/null @@ -1,14 +0,0 @@ -function deleteForm($formEl) { - var str = t('forms', 'Do you really want to delete this new form?') + '\n\n' + $($formEl).attr('data-value'); - if (confirm(str)) { - var form = document.form_delete_form; - var hiddenId = document.createElement("input"); - hiddenId.setAttribute("name", "formId"); - hiddenId.setAttribute("type", "hidden"); - form.appendChild(hiddenId); - form.elements.formId.value = $formEl.id.split('_')[2]; - form.submit(); - } -} - - diff --git a/lib/Controller/ApiController.php b/lib/Controller/ApiController.php index 2387c33..ff41fcc 100644 --- a/lib/Controller/ApiController.php +++ b/lib/Controller/ApiController.php @@ -389,8 +389,9 @@ class ApiController extends Controller { * @NoAdminRequired * @param int $formId * @return DataResponse + * TODO: use hash instead of id ? */ - public function removeForm(int $id) { + public function deleteForm(int $id) { try { $formToDelete = $this->eventMapper->find($id); } catch (DoesNotExistException $e) { @@ -533,11 +534,6 @@ class ApiController extends Controller { $this->eventMapper->insert($event); - - - return new Http\JSONResponse([ - 'id' => $event->getId(), - 'hash' => $event->getHash(), - ]); + return new Http\JSONResponse($this->getForm($event->getHash())); } } diff --git a/lib/Controller/PageController.php b/lib/Controller/PageController.php index 1e2956b..982ffb0 100644 --- a/lib/Controller/PageController.php +++ b/lib/Controller/PageController.php @@ -7,6 +7,7 @@ * @author Inigo Jiron * @author Natalie Gilbert * @author Affan Hussain + * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * @@ -86,40 +87,63 @@ class PageController extends Controller { } /** - * @NoAdminRequired - * @NoCSRFRequired - */ + * @NoAdminRequired + * @NoCSRFRequired + * + * @return TemplateResponse + */ public function index(): TemplateResponse { - return new TemplateResponse('forms', 'forms.tmpl', - ['urlGenerator' => $this->urlGenerator]); - } - - /** - * @NoAdminRequired - */ - public function createForm(): TemplateResponse { - return new TemplateResponse('forms', 'forms.tmpl', - ['urlGenerator' => $this->urlGenerator]); - } - - /** - * @NoAdminRequired - */ - public function cloneForm(): TemplateResponse { - return new TemplateResponse('forms', 'forms.tmpl', - ['urlGenerator' => $this->urlGenerator]); + Util::addScript($this->appName, 'forms'); + Util::addStyle($this->appName, 'icons'); + return new TemplateResponse($this->appName, 'main'); } /** * @NoAdminRequired - * @param string $hash + * @NoCSRFRequired + * * @return TemplateResponse */ - public function editForm($hash): TemplateResponse { - return new TemplateResponse('forms', 'forms.tmpl', [ - 'urlGenerator' => $this->urlGenerator, - 'hash' => $hash - ]); + public function createForm(): TemplateResponse { + Util::addScript($this->appName, 'forms'); + Util::addStyle($this->appName, 'icons'); + return new TemplateResponse($this->appName, 'main'); + } + + /** + * @NoAdminRequired + * @NoCSRFRequired + * + * @return TemplateResponse + */ + public function cloneForm(): TemplateResponse { + Util::addScript($this->appName, 'forms'); + Util::addStyle($this->appName, 'icons'); + return new TemplateResponse($this->appName, 'main'); + } + + /** + * @NoAdminRequired + * @NoCSRFRequired + * + * @return TemplateResponse + */ + public function editForm(): TemplateResponse { + Util::addScript($this->appName, 'forms'); + Util::addStyle($this->appName, 'icons'); + return new TemplateResponse($this->appName, 'main'); + } + + /** + * @NoAdminRequired + * @NoCSRFRequired + * + * @return TemplateResponse + */ + public function getResult(): TemplateResponse { + Util::addScript($this->appName, 'forms'); + Util::addStyle($this->appName, 'icons'); + return new TemplateResponse($this->appName, 'main'); } /** @@ -402,13 +426,4 @@ class PageController extends Controller { } return false; } - - /** - * @NoAdminRequired - * @param int $id - * @return TemplateResponse - */ - public function getResult(int $id): TemplateResponse { - return new TemplateResponse('forms', 'forms.tmpl'); - } } diff --git a/package-lock.json b/package-lock.json index 44a68f3..b67e5d8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1668,6 +1668,22 @@ "integrity": "sha512-f+sKpdLZXkODV+OY39K1M+Spmd4RgxmtEXmNn4Bviv4R7uBFHXuw+JX9ZdfDeOryfHjJ/TRQxQEp0GMpBwZFUw==", "dev": true }, + "@nextcloud/dialogs": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@nextcloud/dialogs/-/dialogs-1.2.2.tgz", + "integrity": "sha512-N8A8J8UKSvz/hqNcm7gwpm70uAAsx0wurjhdYZ989jaMho+H/Hinjd2jkbV8UnsYYw0x/vWvEX5t6Lwbv08K0g==", + "requires": { + "core-js": "3.6.4", + "toastify-js": "^1.7.0" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } + } + }, "@nextcloud/eslint-config": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@nextcloud/eslint-config/-/eslint-config-1.0.0.tgz", @@ -1706,17 +1722,18 @@ } }, "@nextcloud/l10n": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@nextcloud/l10n/-/l10n-1.0.0.tgz", - "integrity": "sha512-A6zUwFWgwvQ5q86GdcfgD2t3uZ+H/k45S0OUlS6iMf0p5br9IrovF7hdv5+jaJcdQpkpOX2AKuordC1KheNGGA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@nextcloud/l10n/-/l10n-1.1.1.tgz", + "integrity": "sha512-aVGvOhXgBzGtgMTOIVov1T7jt35FjX2vCqWCT0C/t6T6VgRn6l2Wb3/jzQycyUgGe71VPqS/4TpSH21yyH99YA==", "requires": { - "core-js": "3.5.0" + "core-js": "3.6.4", + "node-gettext": "^2.0.0" }, "dependencies": { "core-js": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.5.0.tgz", - "integrity": "sha512-Ifh3kj78gzQ7NAoJXeTu+XwzDld0QRIwjBLRqAMhuLhP3d2Av5wmgE9ycfnvK6NAEjTkQ1sDPeoEZAWO3Hx1Uw==" + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" } } }, @@ -1729,6 +1746,23 @@ "core-js": "3.6.1", "i18next": "19.0.2", "moment": "2.24.0" + }, + "dependencies": { + "@nextcloud/l10n": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@nextcloud/l10n/-/l10n-1.0.0.tgz", + "integrity": "sha512-A6zUwFWgwvQ5q86GdcfgD2t3uZ+H/k45S0OUlS6iMf0p5br9IrovF7hdv5+jaJcdQpkpOX2AKuordC1KheNGGA==", + "requires": { + "core-js": "3.5.0" + }, + "dependencies": { + "core-js": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.5.0.tgz", + "integrity": "sha512-Ifh3kj78gzQ7NAoJXeTu+XwzDld0QRIwjBLRqAMhuLhP3d2Av5wmgE9ycfnvK6NAEjTkQ1sDPeoEZAWO3Hx1Uw==" + } + } + } } }, "@nextcloud/router": { @@ -3759,6 +3793,11 @@ "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", "dev": true }, + "debounce": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz", + "integrity": "sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg==" + }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -4421,15 +4460,6 @@ } } }, - "eslint-plugin-nextcloud": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-nextcloud/-/eslint-plugin-nextcloud-0.3.0.tgz", - "integrity": "sha512-LUD2qdirGL0BRt4uaMDGxen17mWVq9JwuGDt7P7Celz7bzdu0X48RrS8mhXn9e0w78+nYN5kPoULG2Bw04r4HA==", - "dev": true, - "requires": { - "requireindex": "~1.2.0" - } - }, "eslint-plugin-node": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-10.0.0.tgz", @@ -5279,22 +5309,26 @@ "dependencies": { "abbrev": { "version": "1.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "optional": true }, "ansi-regex": { "version": "2.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "optional": true }, "aproba": { "version": "1.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "optional": true }, "are-we-there-yet": { "version": "1.1.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "optional": true, "requires": { "delegates": "^1.0.0", @@ -5303,12 +5337,14 @@ }, "balanced-match": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "optional": true }, "brace-expansion": { "version": "1.1.11", - "bundled": true, + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "optional": true, "requires": { "balanced-match": "^1.0.0", @@ -5317,32 +5353,38 @@ }, "chownr": { "version": "1.1.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", + "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", "optional": true }, "code-point-at": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "optional": true }, "concat-map": { "version": "0.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "optional": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "optional": true }, "core-util-is": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "optional": true }, "debug": { "version": "3.2.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "optional": true, "requires": { "ms": "^2.1.1" @@ -5350,22 +5392,26 @@ }, "deep-extend": { "version": "0.6.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "optional": true }, "delegates": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "optional": true }, "detect-libc": { "version": "1.0.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "optional": true }, "fs-minipass": { "version": "1.2.7", - "bundled": true, + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "optional": true, "requires": { "minipass": "^2.6.0" @@ -5373,12 +5419,14 @@ }, "fs.realpath": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "optional": true }, "gauge": { "version": "2.7.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "optional": true, "requires": { "aproba": "^1.0.3", @@ -5393,7 +5441,8 @@ }, "glob": { "version": "7.1.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "optional": true, "requires": { "fs.realpath": "^1.0.0", @@ -5406,12 +5455,14 @@ }, "has-unicode": { "version": "2.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "optional": true }, "iconv-lite": { "version": "0.4.24", - "bundled": true, + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "optional": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" @@ -5419,7 +5470,8 @@ }, "ignore-walk": { "version": "3.0.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", "optional": true, "requires": { "minimatch": "^3.0.4" @@ -5427,7 +5479,8 @@ }, "inflight": { "version": "1.0.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "optional": true, "requires": { "once": "^1.3.0", @@ -5436,17 +5489,20 @@ }, "inherits": { "version": "2.0.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "optional": true }, "ini": { "version": "1.3.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "optional": true, "requires": { "number-is-nan": "^1.0.0" @@ -5454,12 +5510,14 @@ }, "isarray": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "optional": true }, "minimatch": { "version": "3.0.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "optional": true, "requires": { "brace-expansion": "^1.1.7" @@ -5467,12 +5525,14 @@ }, "minimist": { "version": "0.0.8", - "bundled": true, + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "optional": true }, "minipass": { "version": "2.9.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "optional": true, "requires": { "safe-buffer": "^5.1.2", @@ -5481,7 +5541,8 @@ }, "minizlib": { "version": "1.3.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "optional": true, "requires": { "minipass": "^2.9.0" @@ -5489,7 +5550,8 @@ }, "mkdirp": { "version": "0.5.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "optional": true, "requires": { "minimist": "0.0.8" @@ -5497,12 +5559,14 @@ }, "ms": { "version": "2.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "optional": true }, "needle": { "version": "2.4.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", + "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", "optional": true, "requires": { "debug": "^3.2.6", @@ -5512,7 +5576,8 @@ }, "node-pre-gyp": { "version": "0.14.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz", + "integrity": "sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==", "optional": true, "requires": { "detect-libc": "^1.0.2", @@ -5529,7 +5594,8 @@ }, "nopt": { "version": "4.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "optional": true, "requires": { "abbrev": "1", @@ -5538,7 +5604,8 @@ }, "npm-bundled": { "version": "1.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", + "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", "optional": true, "requires": { "npm-normalize-package-bin": "^1.0.1" @@ -5546,12 +5613,14 @@ }, "npm-normalize-package-bin": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", "optional": true }, "npm-packlist": { "version": "1.4.7", - "bundled": true, + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.7.tgz", + "integrity": "sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ==", "optional": true, "requires": { "ignore-walk": "^3.0.1", @@ -5560,7 +5629,8 @@ }, "npmlog": { "version": "4.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "optional": true, "requires": { "are-we-there-yet": "~1.1.2", @@ -5571,17 +5641,20 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "optional": true }, "object-assign": { "version": "4.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "optional": true }, "once": { "version": "1.4.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "optional": true, "requires": { "wrappy": "1" @@ -5589,17 +5662,20 @@ }, "os-homedir": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "optional": true }, "os-tmpdir": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "optional": true }, "osenv": { "version": "0.1.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "optional": true, "requires": { "os-homedir": "^1.0.0", @@ -5608,17 +5684,20 @@ }, "path-is-absolute": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "optional": true }, "process-nextick-args": { "version": "2.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "optional": true }, "rc": { "version": "1.2.8", - "bundled": true, + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "optional": true, "requires": { "deep-extend": "^0.6.0", @@ -5629,14 +5708,16 @@ "dependencies": { "minimist": { "version": "1.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "optional": true } } }, "readable-stream": { "version": "2.3.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "optional": true, "requires": { "core-util-is": "~1.0.0", @@ -5650,7 +5731,8 @@ }, "rimraf": { "version": "2.7.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "optional": true, "requires": { "glob": "^7.1.3" @@ -5658,37 +5740,44 @@ }, "safe-buffer": { "version": "5.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "optional": true }, "safer-buffer": { "version": "2.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "optional": true }, "sax": { "version": "1.2.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "optional": true }, "semver": { "version": "5.7.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "optional": true }, "set-blocking": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "optional": true }, "signal-exit": { "version": "3.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "optional": true }, "string-width": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "optional": true, "requires": { "code-point-at": "^1.0.0", @@ -5698,7 +5787,8 @@ }, "string_decoder": { "version": "1.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "optional": true, "requires": { "safe-buffer": "~5.1.0" @@ -5706,7 +5796,8 @@ }, "strip-ansi": { "version": "3.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "optional": true, "requires": { "ansi-regex": "^2.0.0" @@ -5714,12 +5805,14 @@ }, "strip-json-comments": { "version": "2.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "optional": true }, "tar": { "version": "4.4.13", - "bundled": true, + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", "optional": true, "requires": { "chownr": "^1.1.1", @@ -5733,12 +5826,14 @@ }, "util-deprecate": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "optional": true }, "wide-align": { "version": "1.1.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "optional": true, "requires": { "string-width": "^1.0.2 || 2" @@ -5746,12 +5841,14 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "optional": true }, "yallist": { "version": "3.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "optional": true } } @@ -10977,6 +11074,11 @@ } } }, + "toastify-js": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/toastify-js/-/toastify-js-1.7.0.tgz", + "integrity": "sha512-GmPy4zJ/ulCfmCHlfCtgcB+K2xhx2AXW3T/ZZOSjyjaIGevhz+uvR8HSCTay/wBq4tt2mUnBqlObP1sSWGlsnQ==" + }, "tough-cookie": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", @@ -11280,6 +11382,64 @@ } } }, + "url-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.0.0.tgz", + "integrity": "sha512-sPsoBs8NkSJt9k/2zLUMDAf0rYaG00EtrFQpHRIphKrR6stGsO92LUJf/uUeQNKEoxqoJ4R4qDLqHl+AOEqolA==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.26", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "ajv": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", + "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", + "dev": true + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ==", + "dev": true, + "requires": { + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" + } + } + } + }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", diff --git a/package.json b/package.json index 039863e..8657c61 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "main": "src/js/main.js", "scripts": { "build": "NODE_ENV=production webpack --progress --hide-modules --config webpack.prod.js", - "dev": "NODE_ENV=development webpack --progress --watch --config webpack.dev.js", + "dev": "NODE_ENV=development webpack --progress --config webpack.dev.js", "watch": "NODE_ENV=development webpack --progress --watch --config webpack.dev.js", "lint": "eslint --ext .js,.vue src", "lint:fix": "eslint --ext .js,.vue src --fix", @@ -69,9 +69,14 @@ "test:coverage": "jest --coverage" }, "dependencies": { + "@nextcloud/auth": "^1.2.2", "@nextcloud/axios": "^1.3.2", + "@nextcloud/dialogs": "^1.2.2", + "@nextcloud/l10n": "^1.1.1", "@nextcloud/moment": "^1.1.0", + "@nextcloud/router": "^1.0.2", "@nextcloud/vue": "^1.4.1", + "debounce": "^1.2.0", "json2csv": "5.0.0", "vue": "^2.6.11", "vue-clipboard2": "^0.3.1", @@ -98,7 +103,6 @@ "eslint-import-resolver-webpack": "^0.12.1", "eslint-loader": "^3.0.3", "eslint-plugin-import": "^2.20.1", - "eslint-plugin-nextcloud": "^0.3.0", "eslint-plugin-node": "^10.0.0", "eslint-plugin-promise": "^4.2.1", "eslint-plugin-standard": "^4.0.1", @@ -110,6 +114,7 @@ "stylelint-config-recommended-scss": "^3.3.0", "stylelint-scss": "^3.16.0", "stylelint-webpack-plugin": "^0.10.5", + "url-loader": "^4.0.0", "vue-loader": "^15.9.1", "vue-style-loader": "^4.1.1", "vue-template-compiler": "^2.6.11", diff --git a/src/Forms.vue b/src/Forms.vue new file mode 100644 index 0000000..9a8fb20 --- /dev/null +++ b/src/Forms.vue @@ -0,0 +1,162 @@ + + + + + diff --git a/src/components/AppNavigationForm.vue b/src/components/AppNavigationForm.vue new file mode 100644 index 0000000..c5a7372 --- /dev/null +++ b/src/components/AppNavigationForm.vue @@ -0,0 +1,179 @@ + + + + + diff --git a/src/App.vue b/src/components/EmptyContent.vue similarity index 56% rename from src/App.vue rename to src/components/EmptyContent.vue index 7a042c7..7047d18 100644 --- a/src/App.vue +++ b/src/components/EmptyContent.vue @@ -1,7 +1,7 @@ diff --git a/src/components/_base-SideBar.vue b/src/components/_base-SideBar.vue deleted file mode 100644 index 1c69330..0000000 --- a/src/components/_base-SideBar.vue +++ /dev/null @@ -1,39 +0,0 @@ - - - - - diff --git a/src/components/formListItem.vue b/src/components/formListItem.vue index 608d0c7..c41b87b 100644 --- a/src/components/formListItem.vue +++ b/src/components/formListItem.vue @@ -163,16 +163,6 @@ export default { } }, - formType() { - if (this.form.event.type === 'textForm') { - // TRANSLATORS This means that this is the type of the form. Another type is a 'date form'. - return t('forms', 'Text form') - } else { - // TRANSLATORS This means that this is the type of the form. Another type is a 'text form'. - return t('forms', 'Text form') - } - }, - timeSpanCreated() { return moment(this.form.event.created, 'YYYY-MM-DD HH:mm') }, diff --git a/src/components/shareDiv.vue b/src/components/shareDiv.vue index d9ec3e7..5c67d65 100644 --- a/src/components/shareDiv.vue +++ b/src/components/shareDiv.vue @@ -65,6 +65,7 @@ diff --git a/templates/main.php b/templates/main.php new file mode 100644 index 0000000..b4d8170 --- /dev/null +++ b/templates/main.php @@ -0,0 +1,25 @@ + + * + * @author John Molakvoæ + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +?> + +
diff --git a/webpack.common.js b/webpack.common.js index 4b486e1..8e996ba 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -8,48 +8,49 @@ module.exports = { path: path.resolve(__dirname, './js'), publicPath: '/js/', filename: 'forms.js', - chunkFilename: 'chunks/[name].js' + chunkFilename: 'chunks/[name].js', }, module: { rules: [ { test: /\.css$/, - use: ['vue-style-loader', 'css-loader'] + use: ['vue-style-loader', 'css-loader'], }, { test: /\.scss$/, - use: ['vue-style-loader', 'css-loader', 'sass-loader'] + use: ['vue-style-loader', 'css-loader', 'sass-loader'], }, { test: /\.(js|vue)$/, use: 'eslint-loader', exclude: /node_modules/, - enforce: 'pre' + enforce: 'pre', }, { test: /\.vue$/, loader: 'vue-loader', - exclude: /node_modules/ + exclude: /node_modules/, }, { test: /\.js$/, loader: 'babel-loader', - exclude: /node_modules/ + exclude: /node_modules/, }, { test: /\.(png|jpg|gif|svg)$/, - loader: 'file-loader', + loader: 'url-loader', options: { - name: '[name].[ext]?[hash]' - } - } - ] + limit: 8192, + }, + }, + ], }, plugins: [ new VueLoaderPlugin(), - new StyleLintPlugin() + new StyleLintPlugin(), ], resolve: { - extensions: ['*', '.js', '.vue'] - } + extensions: ['*', '.js', '.vue'], + symlinks: false, + }, } diff --git a/webpack.dev.js b/webpack.dev.js index da451cf..af71a3a 100644 --- a/webpack.dev.js +++ b/webpack.dev.js @@ -7,7 +7,7 @@ module.exports = merge(common, { devServer: { historyApiFallback: true, noInfo: true, - overlay: true + overlay: true, }, - devtool: 'source-map' + devtool: 'source-map', }) diff --git a/webpack.prod.js b/webpack.prod.js index 1c8b18c..f127f5e 100644 --- a/webpack.prod.js +++ b/webpack.prod.js @@ -3,5 +3,5 @@ const merge = require('webpack-merge') const common = require('./webpack.common.js') module.exports = merge(common, { - mode: 'production' + mode: 'production', })