diff --git a/.github/scripts/prepare.sh b/.github/scripts/prepare.sh new file mode 100755 index 000000000..ffc8a3123 --- /dev/null +++ b/.github/scripts/prepare.sh @@ -0,0 +1,25 @@ +#!/bin/bash +source "./.github/scripts/functions.sh" +BRANCH=${GITHUB_REF##*/} + +if [ -z $GIT_TOKEN ] || [ -z $BRANCH ] || [ $GITHUB_REPOSITORY != 'moodlehq/moodleapp' ]; then + print_error "Env vars not correctly defined" + exit 1 +fi + +print_title "Run prepare scripts" +# TODO Change branch name. +git clone --depth 1 --single-branch --branch ionic5 https://$GIT_TOKEN@github.com/moodlemobile/apps-scripts.git ../scripts +cp ../scripts/*.sh scripts/ + +if [ ! -f scripts/prepare.sh ]; then + print_error "Prepare file not found" + exit 1 +fi + +print_title 'Prepare Build' +./scripts/prepare.sh + +if [ $? -ne 0 ]; then + exit 1 +fi diff --git a/.github/workflows/prepare.yml b/.github/workflows/prepare.yml new file mode 100644 index 000000000..20e9bde60 --- /dev/null +++ b/.github/workflows/prepare.yml @@ -0,0 +1,20 @@ +name: Prepare + +on: + push: + branches: [ master, integration, ionic5, workplace, freemium-master ] + +jobs: + prepare: + if: github.repository == 'moodlemobile/moodleapp' + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + with: + persist-credentials: false + fetch-depth: 0 + - name: Prepare builds + env: + GIT_TOKEN: ${{ secrets.GIT_TOKEN }} + run: ./.github/scripts/prepare.sh diff --git a/package-lock.json b/package-lock.json index 9f28b40e0..9dc24bbf0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2280,9 +2280,9 @@ } }, "@ionic-native/badge": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@ionic-native/badge/-/badge-5.30.0.tgz", - "integrity": "sha512-9bz8AsdiJVAPEGGRLihoWWkikJf38xjCBgshBpgMxlXGmaDKMQQ2PHl8EeSlzjDCZy3POLbtAQnLTfYp+zqXEg==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@ionic-native/badge/-/badge-5.33.0.tgz", + "integrity": "sha512-g/E2HLB53csZq5hWeyWUFj6r7CrllSPuOkV88XotIFTQFNuY7TaLtiFUVFSvWXRh0Kvu+w7TI5Hys67d/v7F/g==", "requires": { "@types/cordova": "^0.0.34" }, @@ -2295,9 +2295,9 @@ } }, "@ionic-native/camera": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@ionic-native/camera/-/camera-5.29.0.tgz", - "integrity": "sha512-JOmFb2eWeh8zZWu2JlNVRbhcSvOcwiTSdoabEfGtw0ITXs0FzuRmzAQgF2PQGyPA8844wkr3T5IUhcMpYxW6UQ==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@ionic-native/camera/-/camera-5.33.0.tgz", + "integrity": "sha512-cLAxM4e8IrTECvlszyUe9FnUjE4PbWR99NNDwkOuB85yJ3diyKxiQhHu89Qh9A6qzHTJQLa93iknY2Q40VM/5Q==", "requires": { "@types/cordova": "^0.0.34" }, @@ -2310,9 +2310,9 @@ } }, "@ionic-native/chooser": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@ionic-native/chooser/-/chooser-5.29.0.tgz", - "integrity": "sha512-1/+zr+SbijWqd0FomOh83aQb8vqH2qO2CAlgX2FyjJuK4fgt3BF9GMXpzTjkd/qrHO9rbxUMFAcrQAv/HAVNiA==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@ionic-native/chooser/-/chooser-5.33.0.tgz", + "integrity": "sha512-hz2OtB8UsJpKdXZByDzGS6+U1FK8toIjKmIVCDQAuOXxjbw9dU2Ef+MSUKXOpK6MYnP56oP80JdSX9LDEFJnRA==", "requires": { "@types/cordova": "^0.0.34" }, @@ -2325,9 +2325,9 @@ } }, "@ionic-native/clipboard": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@ionic-native/clipboard/-/clipboard-5.28.0.tgz", - "integrity": "sha512-RrnssToxCM0oWcDmrkzhac98+Z8BmUiWI7ME1qIdHqL2MB6sdU+a9es0vSVv2bWIdd19xdwXDTp0j97OSCSACg==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@ionic-native/clipboard/-/clipboard-5.33.0.tgz", + "integrity": "sha512-HFZN4tsAjFJ9Se9ik0/IOUvApL4zNPEKQAtUsjqP7vCnTsdrgS+FDMln1UDEKXCQ/dEEwU1N1ndFmPBGxjkGzQ==", "requires": { "@types/cordova": "^0.0.34" }, @@ -2340,17 +2340,24 @@ } }, "@ionic-native/core": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@ionic-native/core/-/core-5.28.0.tgz", - "integrity": "sha512-YmR70U+bIk1e4V36bke8HCol2XwuplAr4OTok4Jdx6MaAfJ1xR1AWt2PiQOIgM8bAq8qkVlbgsYi2rEOzKVc7A==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@ionic-native/core/-/core-5.33.0.tgz", + "integrity": "sha512-dnZHu7SadvQvliGJPndk2ohdoPvwiyBWJjsJw33BKyhadnmLlmkYKkRgPPI+i22BZofDKq4YiAfIIqhvfHU6gw==", "requires": { "@types/cordova": "^0.0.34" + }, + "dependencies": { + "@types/cordova": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz", + "integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ=" + } } }, "@ionic-native/device": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@ionic-native/device/-/device-5.28.0.tgz", - "integrity": "sha512-9uPnXz4McQnrEDjGLRUJg133maPCDMRjpXSMJmeO2pizKTeeQGadfp63EDUPDCromBXzkhF7GqDxDbPCgP3TWg==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@ionic-native/device/-/device-5.33.0.tgz", + "integrity": "sha512-KYQvVsN98bGTEomI193Jf9r1vaXBFJQXuhkhwBI6lajynAlf2SIVJwthNUXnK43kNXy1cOelYxScUuKyPwqudw==", "requires": { "@types/cordova": "^0.0.34" }, @@ -2363,49 +2370,84 @@ } }, "@ionic-native/diagnostic": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@ionic-native/diagnostic/-/diagnostic-5.28.0.tgz", - "integrity": "sha512-Xw4+aYp8A0VFQMv4FIeggioBrB2giXXlXy2BwU69Is4vb5HZGx6bR49EM/cw7C4ar2biLtyZBdawgTWvT3Nt9w==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@ionic-native/diagnostic/-/diagnostic-5.33.0.tgz", + "integrity": "sha512-zBDv/yNMvUkXfxy17rgrGVU3+XKREXRI7cqy/DyvpjdomOnmx2pnFvhszgMEgeD03LkXXKiFOR5yUAVNgYirmg==", "requires": { "@types/cordova": "^0.0.34" + }, + "dependencies": { + "@types/cordova": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz", + "integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ=" + } } }, "@ionic-native/file": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@ionic-native/file/-/file-5.28.0.tgz", - "integrity": "sha512-8Luf0uY/RX/JAzMDDYk1oWyUJ4u0JmC334HQJjFeKRouBn1AV1Zge8ODQbMhOHHpyJz2zHHRc+cZlSNv6FKd/A==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@ionic-native/file/-/file-5.33.0.tgz", + "integrity": "sha512-RisSGJl2t8JrBgw30Vn5hJYYKEDTHR9f3KbQDfe1MQg+VrZo7vnbml/vk4l55u65c1TYZDH+F6i7s9nyif1QVQ==", "requires": { "@types/cordova": "^0.0.34" + }, + "dependencies": { + "@types/cordova": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz", + "integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ=" + } } }, "@ionic-native/file-opener": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@ionic-native/file-opener/-/file-opener-5.28.0.tgz", - "integrity": "sha512-oQTfkLH5gnfDZ8TELzhy/iyYzChBKXS78/N0wQ0lB7Xe4rkJnD9J9A6dtGksIWNcEt22jOre5YgboA/mMjyh5g==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@ionic-native/file-opener/-/file-opener-5.33.0.tgz", + "integrity": "sha512-v7t1ndalAPYT9gvMAhxAup8tg1NPV415cfG6tzs1foPFP91UZC3MQny0tup8AgFivugT1GRdoSk1NMuK1jy8Cw==", "requires": { "@types/cordova": "^0.0.34" + }, + "dependencies": { + "@types/cordova": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz", + "integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ=" + } } }, "@ionic-native/file-transfer": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@ionic-native/file-transfer/-/file-transfer-5.28.0.tgz", - "integrity": "sha512-f+BgasUIVXA1vvdl7VocEuQugVPb1WO1fv7YM/NNRZ1Mf+Ry/wdByXm3vXUzBgggy96IShtqhIPeXpl081ZtLA==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@ionic-native/file-transfer/-/file-transfer-5.33.0.tgz", + "integrity": "sha512-xDUpdJVgTBP6aEiU08iZ/pa9aMoGSMB9391dQKk+VSDs0hdbIwk+Cx4V40GIE4QF3TI06sUMdKXD2sIhVsr2QA==", "requires": { "@types/cordova": "^0.0.34" + }, + "dependencies": { + "@types/cordova": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz", + "integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ=" + } } }, "@ionic-native/geolocation": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@ionic-native/geolocation/-/geolocation-5.28.0.tgz", - "integrity": "sha512-SwzZdLhcX8aZ2oV5yInGDaCYkTV/bQMPuv5Ug1HC6kPj11BnMmHWcHdhIpXaxBYz5rtadkZJEsJRmWnFnBE3YQ==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@ionic-native/geolocation/-/geolocation-5.33.0.tgz", + "integrity": "sha512-oE6pi6l8/Wsv94vpJmPlPqE1LheP6cQTJrC78WYQp9WVDOOCGZnFznNoH8BlQfnfjuDx/kUARxzEJBO/gbUg1A==", "requires": { "@types/cordova": "^0.0.34" + }, + "dependencies": { + "@types/cordova": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz", + "integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ=" + } } }, "@ionic-native/http": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@ionic-native/http/-/http-5.28.0.tgz", - "integrity": "sha512-b8mmUw8GIAMdbH3Ycnz8tp2vFcVO59u1a3pVcJQ2l1fttFxsAGHTM8xSyeeZPvG+tiMoSCRGCiVelG3vvVltXA==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@ionic-native/http/-/http-5.33.0.tgz", + "integrity": "sha512-dqcPu3igSLlfDUK8Mvma/6o6aq7WtKBlcR8xXwE8tVsO/r4fEB6NevLLN4S4zCr381Jy+RxIIjn3CZx5XHF6JQ==", "requires": { "@types/cordova": "^0.0.34" }, @@ -2418,17 +2460,24 @@ } }, "@ionic-native/in-app-browser": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@ionic-native/in-app-browser/-/in-app-browser-5.28.0.tgz", - "integrity": "sha512-HxzfbbybYv8xGnS1CvCAKyRuQ9aQ7QDcA0nnRspgmDD+hU196rUzvS2F0Lnhm9G9j9+952ypgFL2ftCcpvUVxg==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@ionic-native/in-app-browser/-/in-app-browser-5.33.0.tgz", + "integrity": "sha512-GGIvnYHf8FgaIae9yfRzxqxj0ZAxrYhOJpsHVSq1YKjxnDpRe6ImWWaHHfaeXE5IdUUMUXVuf75VTSBN00VBvA==", "requires": { "@types/cordova": "^0.0.34" + }, + "dependencies": { + "@types/cordova": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz", + "integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ=" + } } }, "@ionic-native/ionic-webview": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@ionic-native/ionic-webview/-/ionic-webview-5.28.0.tgz", - "integrity": "sha512-Ex/IH/LIa+4X4yGFgo4/W00IWaVsF6KkZuwIG2s3zZQEgXU3tvcgxAOEzkNCbcDC5dXcFH0z/41twZ+YC6gu+A==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@ionic-native/ionic-webview/-/ionic-webview-5.33.0.tgz", + "integrity": "sha512-Jbr4M6z/Fya51F+QXuPLm/crFlZ9T6YvRM1cygGmFwZ7SgDAimYnjgSO8SEGJmvO2ZekYmFuF56qiVPSvx2wUA==", "requires": { "@types/cordova": "^0.0.34" }, @@ -2441,25 +2490,39 @@ } }, "@ionic-native/keyboard": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@ionic-native/keyboard/-/keyboard-5.28.0.tgz", - "integrity": "sha512-qoTm/PClwANP08TFbEMye6z6ocEorfNZlkxOZq7cjUV2Vd2oCNOYMfT7saNUnsyv2pDlBgxs/x8XE2EDVd33qQ==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@ionic-native/keyboard/-/keyboard-5.33.0.tgz", + "integrity": "sha512-TIYU3LC+Yz/pcpBuHcxLThMNuN9y1E1wBu4SlmS6VlO3/D3R3At2WOg2UK3iA66G2kTJubed5haqTYZjeoA6Uw==", "requires": { "@types/cordova": "^0.0.34" + }, + "dependencies": { + "@types/cordova": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz", + "integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ=" + } } }, "@ionic-native/local-notifications": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@ionic-native/local-notifications/-/local-notifications-5.28.0.tgz", - "integrity": "sha512-cJDlRbYG+r1kzFEJEu7yU9kMgyWeh/K1cdGE4n6ff9I+Dcp9pBsL5owGnNj/4dg88pErHUmPzhbvzwbnuWvzbQ==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@ionic-native/local-notifications/-/local-notifications-5.33.0.tgz", + "integrity": "sha512-ljn2uq0rFWpjG1I1qK+mPVX8T3T+09fsF8sZ9nK7uvD9YWShCVz2e2ctf8qPRFq+TWDeDqlnwXz3wCvWmbBUWw==", "requires": { "@types/cordova": "^0.0.34" + }, + "dependencies": { + "@types/cordova": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz", + "integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ=" + } } }, "@ionic-native/media": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@ionic-native/media/-/media-5.29.0.tgz", - "integrity": "sha512-XC8MtrbeR0X0I6B0FABStc2mSAmgIQidaRjFqP4jBAElAwjZC7PHwaDyyVJUOR1Rx5Nest46hZAU6jpAPZ8+pw==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@ionic-native/media/-/media-5.33.0.tgz", + "integrity": "sha512-nUu7/FSH41j9+BqHXYVMBd3EifNsTNOufD3NEiMVpHVDWLWqG7tG5h5cFlsVACxUaP4kNpSEke2mjom6CKyjxQ==", "requires": { "@types/cordova": "^0.0.34" }, @@ -2472,9 +2535,9 @@ } }, "@ionic-native/media-capture": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@ionic-native/media-capture/-/media-capture-5.29.0.tgz", - "integrity": "sha512-5NdTXQGbrpXLeeLbI+cGQaeNmpmOrPC9vgX4jvUT6whUdDXGZ93wLT1/eeRj208czNiqbdetjG8Dji3OJZ5MKA==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@ionic-native/media-capture/-/media-capture-5.33.0.tgz", + "integrity": "sha512-aQTnonVSeijpuZ9B7oYJCjIDqgFVhNdvqkx9vUoaO359BtJGpGS1rNPjEovt4DsqV7oe7TkbmBd8DMEwnB3A2g==", "requires": { "@types/cordova": "^0.0.34" }, @@ -2487,75 +2550,131 @@ } }, "@ionic-native/network": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@ionic-native/network/-/network-5.28.0.tgz", - "integrity": "sha512-tkYCJd9R2t2gTo+0Ds2zyOgDjggbL7lZFWJ/MN7K3KIuSLRLvfsob0IC9hblY3giwP1kPTBi62KhjcBXtotHQg==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@ionic-native/network/-/network-5.33.0.tgz", + "integrity": "sha512-J+3+rbDTMVNUspa/nV+P8a0hFKDicJK1rVIrm5aLBQdmN9n7WaqJmeMYTptyWOnZxQpktJAJDdhJTEvVmKQjjw==", "requires": { "@types/cordova": "^0.0.34" + }, + "dependencies": { + "@types/cordova": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz", + "integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ=" + } } }, "@ionic-native/push": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@ionic-native/push/-/push-5.28.0.tgz", - "integrity": "sha512-vF6oxtZpJylv2PxGHKzBR/OIZhp2p4wEmWyaDNMdT2xiv6goXHvLnuSnGko5alvZqCo8qxWjYirrvLk4vzWz7g==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@ionic-native/push/-/push-5.33.0.tgz", + "integrity": "sha512-H4gOkMbOaNvi97cKKJDggWvAR1BVCUbtdLyWInA0q3cZBHWSc6KcRJGz+hcdDndCQJUnHofs1Tpw8LN3zhjYyQ==", "requires": { "@types/cordova": "^0.0.34" + }, + "dependencies": { + "@types/cordova": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz", + "integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ=" + } } }, "@ionic-native/qr-scanner": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@ionic-native/qr-scanner/-/qr-scanner-5.28.0.tgz", - "integrity": "sha512-TRWO/e7HsSyLtQ+ucOmBT03bnBEVz9xNLIY0TcWrkItQ4RIvtH+NW66BNJ27TVQim4/F4ToB2dkD6VSQz6BRVQ==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@ionic-native/qr-scanner/-/qr-scanner-5.33.0.tgz", + "integrity": "sha512-cyiQv0Rje/fN9/JYoDXP1+ILJkRkjvPtoSx4vd2FsKAuJB60U2DpQfmVEE/KMF4iceTpx4MK/kGzr2WE2AYnIg==", "requires": { "@types/cordova": "^0.0.34" + }, + "dependencies": { + "@types/cordova": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz", + "integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ=" + } } }, "@ionic-native/splash-screen": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@ionic-native/splash-screen/-/splash-screen-5.28.0.tgz", - "integrity": "sha512-qhr/i320BgFNFvzNOoPe2G3bDF4YN7LjpKPp9JoP+Tr1JjWwok02gT896q5GgUxYMuTCRKVQMTkp4C3J1Q8/Qg==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@ionic-native/splash-screen/-/splash-screen-5.33.0.tgz", + "integrity": "sha512-6PHk5WJeUoc3zru6wTvUmd9DCASvRQoQq1dysYI3JCECaAJ6X0x1RbzM8dBFs3JPLfWtDn+P8eTp+KaA0Xf58w==", "requires": { "@types/cordova": "^0.0.34" + }, + "dependencies": { + "@types/cordova": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz", + "integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ=" + } } }, "@ionic-native/sqlite": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@ionic-native/sqlite/-/sqlite-5.28.0.tgz", - "integrity": "sha512-tDanTJmBwkb2UlH9vjZJKVtOyTD9TcQBjkk1oMh8PMsTdWlUVo4hrojMrL9K03X59Z8oQE0aX1C/K/3RPCPdOw==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@ionic-native/sqlite/-/sqlite-5.33.0.tgz", + "integrity": "sha512-JIdQJr6bcksotF/3ZMJQZo9lHgaHXvHOOK9R30mM/5Ds5fFu+rUoUf0wvyqaGzEFu94pGw2uPGnfD+WI7x7+1A==", "requires": { "@types/cordova": "^0.0.34" + }, + "dependencies": { + "@types/cordova": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz", + "integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ=" + } } }, "@ionic-native/status-bar": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@ionic-native/status-bar/-/status-bar-5.28.0.tgz", - "integrity": "sha512-efY1PGYHi6WSab1EvoLAMNnjrKtX1nQEkJHBMahHozZ0draBRkSfTjCYM8hRKQ/cD3SxZvcficBEj+js8OAsJg==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@ionic-native/status-bar/-/status-bar-5.33.0.tgz", + "integrity": "sha512-cnyfd42N9gGfhyDtF7wbWoacKg/jfsoJQHOHltfhS4/EjxsVu4bjkwq1YBLMcMY3OIqFDSn2aFcejHn8wVNkDQ==", "requires": { "@types/cordova": "^0.0.34" + }, + "dependencies": { + "@types/cordova": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz", + "integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ=" + } } }, "@ionic-native/web-intent": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@ionic-native/web-intent/-/web-intent-5.28.0.tgz", - "integrity": "sha512-2uZKsSmoRj5s73fln3nXDs7unazrDux7h1UcrxhlUa2qI20LML/Ye3/ZFc5Wy8GB+mQOwQtJjTQPT6Gpl4fQTw==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@ionic-native/web-intent/-/web-intent-5.33.0.tgz", + "integrity": "sha512-3CIAofrg9nkJQbSftFdMKYOduXy9Ra/a1Q0it6ysm9NFeAQn7iZPThSexBeZ9xiKKj/QTPZtnqAJ0MQ+4mkGag==", "requires": { "@types/cordova": "^0.0.34" + }, + "dependencies": { + "@types/cordova": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz", + "integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ=" + } } }, "@ionic-native/zip": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@ionic-native/zip/-/zip-5.28.0.tgz", - "integrity": "sha512-K5I0TSwCEW1XrdrD3x8NjJbheWD5AEMEzRWLqVvO7IKbuDySRuINW4h6fzOWgrpiP11uNW7r2mMUqBt0TNeEPw==", + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/@ionic-native/zip/-/zip-5.33.0.tgz", + "integrity": "sha512-hErISQ6/xqVErmVnnha5BR+3GWRNQIVfMTXzprEpNZxQl3iDe1UTIVQdFnMd3Nasz/naY+61Vq/y91PZ1Rrajw==", "requires": { "@types/cordova": "^0.0.34" + }, + "dependencies": { + "@types/cordova": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz", + "integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ=" + } } }, "@ionic/angular": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-5.6.3.tgz", - "integrity": "sha512-6MUQV+K0xrrdTHZle+HXIOEk5TIAsFt5r6hbhfzknfZT1IMNtoEgh1xpvoEjOpjvPa84mQo7oe6Hy4kM7TQmIQ==", + "version": "5.6.6", + "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-5.6.6.tgz", + "integrity": "sha512-0psh2n4Y/3sx0e2Yj4WmNcukz0nrETEiJE6Fl4CldoB8QHZcXGi0hKrPAcbGSAF0+lAJ58+Z5Gp/HQVm/MQOMA==", "requires": { - "@ionic/core": "5.6.3", + "@ionic/core": "5.6.6", "tslib": "^1.9.3" }, "dependencies": { @@ -2595,9 +2714,9 @@ } }, "@ionic/cli": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/@ionic/cli/-/cli-6.12.3.tgz", - "integrity": "sha512-o4gm4ZoKrlzL8Gs1XZR+kVaMYghvKX8t/XJrQKr4EN/DQAM03KNMxsfm+RV3wFTnM8dgFywHzCuiw+5hY1oxEg==", + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/@ionic/cli/-/cli-6.14.1.tgz", + "integrity": "sha512-QGmA5hjW4PvS8o0f+ptJ2bOknu4dPKzlECFApBiR7ayDgGTDMwmbxrtNpRhDnjdsVlMAzWq8eo9l76831+DBjQ==", "dev": true, "requires": { "@ionic/cli-framework": "5.1.0", @@ -2629,9 +2748,9 @@ }, "dependencies": { "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -2698,9 +2817,9 @@ }, "dependencies": { "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -2765,12 +2884,12 @@ }, "dependencies": { "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "requires": { - "type-fest": "^0.11.0" + "type-fest": "^0.21.3" } }, "ansi-regex": { @@ -2780,9 +2899,9 @@ "dev": true }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -2872,9 +2991,9 @@ } }, "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -2889,9 +3008,9 @@ } }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "requires": { "emoji-regex": "^8.0.0", @@ -2909,17 +3028,17 @@ } }, "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true } } }, "@ionic/core": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-5.6.3.tgz", - "integrity": "sha512-RPugxDcCwB5rgEh6yR2QDTzblT8BRBktsW6y+VBt62yHRzgEAENEfVyvkADz+CkGAsmZuPmC8OQC2jJrx/fJFA==", + "version": "5.6.6", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-5.6.6.tgz", + "integrity": "sha512-EbVIXOTVVPxBo7hsarBpRSFNsQ22wBFtWkKmrmliieknG5LUkf5WZBpj4EENQhzYA6c+//7/nfhcD9pWgtAofA==", "requires": { "@stencil/core": "^2.4.0", "ionicons": "^5.5.1", @@ -2927,9 +3046,9 @@ }, "dependencies": { "tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" } } }, @@ -3155,12 +3274,6 @@ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, "debug": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", @@ -3188,21 +3301,10 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "requires": { "emoji-regex": "^8.0.0", @@ -3870,9 +3972,9 @@ } }, "@stencil/core": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-2.5.1.tgz", - "integrity": "sha512-SHVX/XaMYEzZJr7ttFSU9a1GmZRMUS9l7f/hbWnKYRn4S9zl1CqGf2iR/ofJ7B+vKaHLjapCAVrzCrkciVIpXA==" + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-2.5.2.tgz", + "integrity": "sha512-bgjPXkSzzg1WnTgVUm6m5ZzpKt602WmA/QljODAW1xVN40OHJdbGblzF/F6MFzqv2c5Cy30CB41arc8qADIdcQ==" }, "@szmarczak/http-timer": { "version": "1.1.2", @@ -15844,9 +15946,9 @@ "dev": true }, "netmask": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz", - "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", "dev": true }, "next-tick": { @@ -16787,14 +16889,14 @@ } }, "pac-resolver": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-4.1.0.tgz", - "integrity": "sha512-d6lf2IrZJJ7ooVHr7BfwSjRO1yKSJMaiiWYSHcrxSIUtZrCa4KKGwcztdkZ/E9LFleJfjoi1yl+XLR7AX24nbQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-4.2.0.tgz", + "integrity": "sha512-rPACZdUyuxT5Io/gFKUeeZFfE5T7ve7cAkE5TUZRRfuKP0u5Hocwe48X7ZEm6mYB+bTB0Qf+xlVlA/RM/i6RCQ==", "dev": true, "requires": { "degenerator": "^2.2.0", "ip": "^1.1.5", - "netmask": "^1.0.6" + "netmask": "^2.0.1" } }, "package-json": { @@ -19951,6 +20053,25 @@ "dev": true, "optional": true }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "dependencies": { + "object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "dev": true + } + } + }, "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", @@ -21022,9 +21143,9 @@ } }, "form-data": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", - "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, "requires": { "asynckit": "^0.4.0", @@ -21033,9 +21154,9 @@ } }, "mime": { - "version": "2.4.7", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.7.tgz", - "integrity": "sha512-dhNd1uA2u397uQk3Nv5LM4lm93WYDUXFn3Fu291FJerns4jyTudqhIWe4W04YLy7Uk1tm1Ore04NpjRvQp/NPA==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", "dev": true }, "ms": { @@ -21045,10 +21166,13 @@ "dev": true }, "qs": { - "version": "6.9.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", - "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==", - "dev": true + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } }, "readable-stream": { "version": "3.6.0", @@ -21926,9 +22050,9 @@ } }, "typescript": { - "version": "3.9.7", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", - "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", + "version": "3.9.9", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz", + "integrity": "sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w==", "dev": true }, "uglify-js": { diff --git a/package.json b/package.json index 13a3becb5..73602ebcc 100644 --- a/package.json +++ b/package.json @@ -40,33 +40,33 @@ "@angular/platform-browser": "~10.0.0", "@angular/platform-browser-dynamic": "~10.0.0", "@angular/router": "~10.0.0", - "@ionic-native/badge": "^5.30.0", - "@ionic-native/camera": "^5.29.0", - "@ionic-native/chooser": "^5.29.0", - "@ionic-native/clipboard": "^5.28.0", - "@ionic-native/core": "^5.0.0", - "@ionic-native/device": "^5.28.0", - "@ionic-native/diagnostic": "^5.28.0", - "@ionic-native/file": "^5.28.0", - "@ionic-native/file-opener": "^5.28.0", - "@ionic-native/file-transfer": "^5.28.0", - "@ionic-native/geolocation": "^5.28.0", - "@ionic-native/http": "^5.28.0", - "@ionic-native/in-app-browser": "^5.28.0", - "@ionic-native/ionic-webview": "^5.28.0", - "@ionic-native/keyboard": "^5.28.0", - "@ionic-native/local-notifications": "^5.28.0", - "@ionic-native/media": "^5.29.0", - "@ionic-native/media-capture": "^5.29.0", - "@ionic-native/network": "^5.28.0", - "@ionic-native/push": "^5.28.0", - "@ionic-native/qr-scanner": "^5.28.0", - "@ionic-native/splash-screen": "^5.28.0", - "@ionic-native/sqlite": "^5.28.0", - "@ionic-native/status-bar": "^5.0.0", - "@ionic-native/web-intent": "^5.28.0", - "@ionic-native/zip": "^5.28.0", - "@ionic/angular": "^5.6.3", + "@ionic-native/badge": "^5.33.0", + "@ionic-native/camera": "^5.33.0", + "@ionic-native/chooser": "^5.33.0", + "@ionic-native/clipboard": "^5.33.0", + "@ionic-native/core": "^5.33.0", + "@ionic-native/device": "^5.33.0", + "@ionic-native/diagnostic": "^5.33.0", + "@ionic-native/file": "^5.33.0", + "@ionic-native/file-opener": "^5.33.0", + "@ionic-native/file-transfer": "^5.33.0", + "@ionic-native/geolocation": "^5.33.0", + "@ionic-native/http": "^5.33.0", + "@ionic-native/in-app-browser": "^5.33.0", + "@ionic-native/ionic-webview": "^5.33.0", + "@ionic-native/keyboard": "^5.33.0", + "@ionic-native/local-notifications": "^5.33.0", + "@ionic-native/media": "^5.33.0", + "@ionic-native/media-capture": "^5.33.0", + "@ionic-native/network": "^5.33.0", + "@ionic-native/push": "^5.33.0", + "@ionic-native/qr-scanner": "^5.33.0", + "@ionic-native/splash-screen": "^5.33.0", + "@ionic-native/sqlite": "^5.33.0", + "@ionic-native/status-bar": "^5.33.0", + "@ionic-native/web-intent": "^5.33.0", + "@ionic-native/zip": "^5.33.0", + "@ionic/angular": "^5.6.6", "@ngx-translate/core": "^13.0.0", "@ngx-translate/http-loader": "^6.0.0", "@types/chart.js": "^2.9.31", @@ -136,7 +136,7 @@ "@angular/compiler-cli": "~10.0.0", "@angular/language-service": "~10.0.0", "@ionic/angular-toolkit": "^2.3.0", - "@ionic/cli": "^6.12.3", + "@ionic/cli": "^6.14.1", "@ionic/v4-migration-tslint": "^1.7.1", "@types/faker": "^5.1.3", "@types/node": "^12.12.64", @@ -166,7 +166,7 @@ "jsonc-parser": "^2.3.1", "ts-jest": "^26.4.1", "ts-node": "~8.3.0", - "typescript": "~3.9.5" + "typescript": "^3.9.9" }, "engines": { "node": ">=12.x" diff --git a/src/addons/badges/pages/issued-badge/issued-badge.html b/src/addons/badges/pages/issued-badge/issued-badge.html index 451668078..fab2dabc6 100644 --- a/src/addons/badges/pages/issued-badge/issued-badge.html +++ b/src/addons/badges/pages/issued-badge/issued-badge.html @@ -121,7 +121,7 @@

- + @@ -147,7 +147,7 @@

- +
diff --git a/src/addons/block/myoverview/components/myoverview/myoverview.ts b/src/addons/block/myoverview/components/myoverview/myoverview.ts index c2c4fe7c4..182120e83 100644 --- a/src/addons/block/myoverview/components/myoverview/myoverview.ts +++ b/src/addons/block/myoverview/components/myoverview/myoverview.ts @@ -347,7 +347,7 @@ export class AddonBlockMyOverviewComponent extends CoreBlockBaseComponent implem if (!newValue || this.courses.allincludinghidden.length <= 0) { this.filteredCourses = this.courses.allincludinghidden; } else { - // Use displayname if avalaible, or fullname if not. + // Use displayname if available, or fullname if not. if (this.courses.allincludinghidden.length > 0 && typeof this.courses.allincludinghidden[0].displayname != 'undefined') { this.filteredCourses = this.courses.allincludinghidden.filter((course) => diff --git a/src/addons/block/recentlyaccesseditems/components/recentlyaccesseditems/recentlyaccesseditems.scss b/src/addons/block/recentlyaccesseditems/components/recentlyaccesseditems/recentlyaccesseditems.scss index fc9edbddf..14a35cad6 100644 --- a/src/addons/block/recentlyaccesseditems/components/recentlyaccesseditems/recentlyaccesseditems.scss +++ b/src/addons/block/recentlyaccesseditems/components/recentlyaccesseditems/recentlyaccesseditems.scss @@ -4,4 +4,8 @@ .core-horizontal-scroll > div { @include horizontal_scroll_item(80%, 250px, 300px); } + + .core-course-module-handler { + --inner-border-width: 0; + } } diff --git a/src/addons/calendar/components/calendar/calendar.scss b/src/addons/calendar/components/calendar/calendar.scss index b6c5e1d61..848d6357c 100644 --- a/src/addons/calendar/components/calendar/calendar.scss +++ b/src/addons/calendar/components/calendar/calendar.scss @@ -146,8 +146,7 @@ .core-module-icon { margin-right: 1px; margin-left: 1px; - width: 16px; - height: 16px; + --size: 16px; display: inline-block; vertical-align: bottom; } diff --git a/src/addons/calendar/components/filter/addon-calendar-filter-popover.html b/src/addons/calendar/components/filter/addon-calendar-filter-popover.html index 5d998548a..8c2d75c7d 100644 --- a/src/addons/calendar/components/filter/addon-calendar-filter-popover.html +++ b/src/addons/calendar/components/filter/addon-calendar-filter-popover.html @@ -4,9 +4,7 @@ {{ 'addon.calendar.' + type + 'events' | translate}} - - - + diff --git a/src/addons/competency/pages/competency/competency.html b/src/addons/competency/pages/competency/competency.html index 1c943317d..cbd573cdd 100644 --- a/src/addons/competency/pages/competency/competency.html +++ b/src/addons/competency/pages/competency/competency.html @@ -43,8 +43,7 @@  /  - + {{ ancestor.name }} {{ ancestor.name }} @@ -60,7 +59,7 @@

- + {{ relatedcomp.shortname }} - {{ relatedcomp.idnumber }}

diff --git a/src/addons/mod/assign/components/index/addon-mod-assign-index.html b/src/addons/mod/assign/components/index/addon-mod-assign-index.html index de43a804a..da491f51d 100644 --- a/src/addons/mod/assign/components/index/addon-mod-assign-index.html +++ b/src/addons/mod/assign/components/index/addon-mod-assign-index.html @@ -31,7 +31,7 @@ - + + [detail]="needsGradingAvailable" [button]="needsGradingAvailable" + (click)="goToSubmissionList(needGrading, needsGradingAvailable)">

{{ 'addon.mod_assign.numberofsubmissionsneedgrading' | translate }}

{{ summary.submissionsneedgradingcount }} diff --git a/src/addons/mod/assign/components/index/index.ts b/src/addons/mod/assign/components/index/index.ts index 24fb456a9..86da7c0c7 100644 --- a/src/addons/mod/assign/components/index/index.ts +++ b/src/addons/mod/assign/components/index/index.ts @@ -65,7 +65,7 @@ export class AddonModAssignIndexComponent extends CoreCourseModuleMainActivityCo lateSubmissions?: string; // Message about late submissions. showNumbers = true; // Whether to show number of submissions with each status. summary?: AddonModAssignSubmissionGradingSummary; // The grading summary. - needsGradingAvalaible = false; // Whether we can see the submissions that need grading. + needsGradingAvailable = false; // Whether we can see the submissions that need grading. groupInfo: CoreGroupInfo = { groups: [], @@ -275,7 +275,7 @@ export class AddonModAssignIndexComponent extends CoreCourseModuleMainActivityCo this.summary = submissionStatus.gradingsummary; if (!this.summary) { - this.needsGradingAvalaible = false; + this.needsGradingAvailable = false; return; } @@ -296,7 +296,7 @@ export class AddonModAssignIndexComponent extends CoreCourseModuleMainActivityCo } } - this.needsGradingAvalaible = + this.needsGradingAvailable = (submissionStatus.gradingsummary?.submissionsneedgradingcount || 0) > 0 && this.currentSite!.isVersionGreaterEqualThan('3.2'); } diff --git a/src/addons/mod/assign/components/submission/submission.ts b/src/addons/mod/assign/components/submission/submission.ts index 827ba257c..e98b0c5a8 100644 --- a/src/addons/mod/assign/components/submission/submission.ts +++ b/src/addons/mod/assign/components/submission/submission.ts @@ -1123,7 +1123,7 @@ export class AddonModAssignSubmissionComponent implements OnInit, OnDestroy, Can ) { if (this.previousAttempt && this.previousAttempt.submission!.plugins && this.userSubmission.status == this.statusReopened) { - // Get latest attempt if avalaible. + // Get latest attempt if available. this.submissionPlugins = this.previousAttempt.submission!.plugins; } else { this.submissionPlugins = this.userSubmission.plugins!; diff --git a/src/addons/mod/assign/services/assign.ts b/src/addons/mod/assign/services/assign.ts index 72eb9e60e..501865309 100644 --- a/src/addons/mod/assign/services/assign.ts +++ b/src/addons/mod/assign/services/assign.ts @@ -849,13 +849,13 @@ export class AddonModAssignProvider { return this.gradingOfflineEnabled[siteId]; } - this.gradingOfflineEnabled[siteId] = await CoreGrades.isGradeItemsAvalaible(siteId); + this.gradingOfflineEnabled[siteId] = await CoreGrades.isGradeItemsAvailable(siteId); return this.gradingOfflineEnabled[siteId]; } /** - * Outcomes only can be edited if mod_assign_submit_grading_form is avalaible. + * Outcomes only can be edited if mod_assign_submit_grading_form is available. * * @param siteId Site ID. If not defined, current site. * @return Promise resolved with true if outcomes edit is enabled, rejected or resolved with false otherwise. diff --git a/src/addons/mod/feedback/pages/attempt/attempt.html b/src/addons/mod/feedback/pages/attempt/attempt.html index cd14c1419..1c9e6ce9c 100644 --- a/src/addons/mod/feedback/pages/attempt/attempt.html +++ b/src/addons/mod/feedback/pages/attempt/attempt.html @@ -33,9 +33,7 @@
- - - +

diff --git a/src/addons/mod/feedback/pages/form/form.html b/src/addons/mod/feedback/pages/form/form.html index 2bd0091ab..63acf1936 100644 --- a/src/addons/mod/feedback/pages/form/form.html +++ b/src/addons/mod/feedback/pages/form/form.html @@ -21,9 +21,7 @@ - - - + diff --git a/src/addons/mod/folder/services/folder.ts b/src/addons/mod/folder/services/folder.ts index d2a861557..fd73dcd51 100644 --- a/src/addons/mod/folder/services/folder.ts +++ b/src/addons/mod/folder/services/folder.ts @@ -125,7 +125,7 @@ export class AddonModFolderProvider { /** * Returns whether or not getFolder WS available or not. * - * @return If WS is avalaible. + * @return If WS is available. * @since 3.3 */ isGetFolderWSAvailable(): boolean { diff --git a/src/addons/mod/forum/pages/discussion/discussion.html b/src/addons/mod/forum/pages/discussion/discussion.html index 2f85f8fb2..ed7efa355 100644 --- a/src/addons/mod/forum/pages/discussion/discussion.html +++ b/src/addons/mod/forum/pages/discussion/discussion.html @@ -101,7 +101,7 @@ - + {{ 'addon.mod_lesson.enterpassword' | translate }} + core-auto-focus #passwordinput [clearOnEdit]="false"> diff --git a/src/addons/mod/lesson/components/password-modal/password-modal.html b/src/addons/mod/lesson/components/password-modal/password-modal.html index 13d6c63c6..4996d156f 100644 --- a/src/addons/mod/lesson/components/password-modal/password-modal.html +++ b/src/addons/mod/lesson/components/password-modal/password-modal.html @@ -15,7 +15,7 @@ {{ 'addon.mod_lesson.enterpassword' | translate }} + core-auto-focus #passwordinput [clearOnEdit]="false"> diff --git a/src/addons/mod/page/services/page.ts b/src/addons/mod/page/services/page.ts index a18111297..42cb139f4 100644 --- a/src/addons/mod/page/services/page.ts +++ b/src/addons/mod/page/services/page.ts @@ -127,7 +127,7 @@ export class AddonModPageProvider { /** * Returns whether or not getPage WS available or not. * - * @return If WS is avalaible. + * @return If WS is available. * @since 3.3 */ isGetPageWSAvailable(): boolean { diff --git a/src/addons/mod/quiz/components/preflight-modal/preflight-modal.html b/src/addons/mod/quiz/components/preflight-modal/preflight-modal.html index 40b872183..c45b9eeee 100644 --- a/src/addons/mod/quiz/components/preflight-modal/preflight-modal.html +++ b/src/addons/mod/quiz/components/preflight-modal/preflight-modal.html @@ -18,7 +18,7 @@

Couldn't find the directive to render this access rule.

- +
diff --git a/src/addons/mod/resource/services/handlers/module.ts b/src/addons/mod/resource/services/handlers/module.ts index ea4e3ee50..24590f58a 100644 --- a/src/addons/mod/resource/services/handlers/module.ts +++ b/src/addons/mod/resource/services/handlers/module.ts @@ -198,7 +198,7 @@ export class AddonModResourceModuleHandlerService implements CoreCourseModuleHan } if (options.showtype) { - // We should take it from options.filedetails.size if avalaible but it's already translated. + // We should take it from options.filedetails.size if available but it's already translated. extra.push(CoreMimetypeUtils.getMimetypeDescription(file)); } diff --git a/src/core/classes/aria-role-button.ts b/src/core/classes/aria-role-button.ts index b55fbc876..db15a0f9a 100644 --- a/src/core/classes/aria-role-button.ts +++ b/src/core/classes/aria-role-button.ts @@ -21,7 +21,7 @@ export abstract class CoreAriaRoleButton { } /** - * A11y key functionallity that prevents keyDown events. + * A11y key functionality that prevents keyDown events. * * @param event Event. */ @@ -33,7 +33,7 @@ export abstract class CoreAriaRoleButton { } /** - * A11y key functionallity that translates space and enter keys to click action. + * A11y key functionality that translates space and enter keys to click action. * * @param event Event. */ @@ -47,7 +47,7 @@ export abstract class CoreAriaRoleButton { } /** - * A11y click functionallity. + * A11y click functionality. * * @param event Event. */ diff --git a/src/core/classes/aria-role-tab.ts b/src/core/classes/aria-role-tab.ts index 12c54b8c6..fcaf1c86b 100644 --- a/src/core/classes/aria-role-tab.ts +++ b/src/core/classes/aria-role-tab.ts @@ -21,7 +21,7 @@ export class CoreAriaRoleTab { } /** - * A11y key functionallity that prevents keyDown events. + * A11y key functionality that prevents keyDown events. * * @param e Event. */ @@ -39,7 +39,7 @@ export class CoreAriaRoleTab { } /** - * A11y key functionallity. + * A11y key functionality. * * Enter or Space: When a tab has focus, activates the tab, causing its associated panel to be displayed. * Right Arrow: When a tab has focus: Moves focus to the next tab. If focus is on the last tab, moves focus to the first tab. diff --git a/src/core/components/components.module.ts b/src/core/components/components.module.ts index f319a9ff2..0ca148450 100644 --- a/src/core/components/components.module.ts +++ b/src/core/components/components.module.ts @@ -56,6 +56,7 @@ import { CoreTabsOutletComponent } from './tabs-outlet/tabs-outlet'; import { CoreTimerComponent } from './timer/timer'; import { CoreUserAvatarComponent } from './user-avatar/user-avatar'; import { CoreComboboxComponent } from './combobox/combobox'; +import { CoreSpacerComponent } from './spacer/spacer'; @NgModule({ declarations: [ @@ -94,6 +95,7 @@ import { CoreComboboxComponent } from './combobox/combobox'; CoreTimerComponent, CoreUserAvatarComponent, CoreComboboxComponent, + CoreSpacerComponent, ], imports: [ CommonModule, @@ -139,6 +141,7 @@ import { CoreComboboxComponent } from './combobox/combobox'; CoreTimerComponent, CoreUserAvatarComponent, CoreComboboxComponent, + CoreSpacerComponent, ], }) export class CoreComponentsModule {} diff --git a/src/core/components/iframe/core-iframe.html b/src/core/components/iframe/core-iframe.html index def2619f3..f4bca836c 100644 --- a/src/core/components/iframe/core-iframe.html +++ b/src/core/components/iframe/core-iframe.html @@ -5,11 +5,15 @@ [attr.allowfullscreen]="allowFullscreen ? 'allowfullscreen' : null"> -
- - {{ 'core.iframehelp' | translate }} - -
+ + {{ 'core.iframehelp' | translate }} + diff --git a/src/core/components/local-file/core-local-file.html b/src/core/components/local-file/core-local-file.html index 0c8339af2..1fb756998 100644 --- a/src/core/components/local-file/core-local-file.html +++ b/src/core/components/local-file/core-local-file.html @@ -14,7 +14,7 @@ + (click)="$event.stopPropagation()" core-auto-focus [(ngModel)]="newFileName" *ngIf="editMode">
diff --git a/src/core/components/navigation-bar/core-navigation-bar.html b/src/core/components/navigation-bar/core-navigation-bar.html index 4e5528ec7..b04994a15 100644 --- a/src/core/components/navigation-bar/core-navigation-bar.html +++ b/src/core/components/navigation-bar/core-navigation-bar.html @@ -1,7 +1,7 @@ - - + */ +@Component({ + selector: 'core-spacer', + template: '', + styles: [':host {--item-divider-min-height: 30px;}'], +}) +export class CoreSpacerComponent { + +} diff --git a/src/core/components/user-avatar/core-user-avatar.html b/src/core/components/user-avatar/core-user-avatar.html index 60b0a32e2..4b8d7819d 100644 --- a/src/core/components/user-avatar/core-user-avatar.html +++ b/src/core/components/user-avatar/core-user-avatar.html @@ -1,8 +1,17 @@ - + [attr.tabindex]="linkProfile ? 0 : null" + [class.clickable]="linkProfile" +> + * The value of the input will decide if show keyboard when focusing the element (only on Android). + * In case value is nofocus, the directive is disabled. * - * @deprecated since 3.9.5. ion-input now supports an [autofocus] attribute, please use that one instead. + * */ @Directive({ selector: '[core-auto-focus]', }) -export class CoreAutoFocusDirective implements OnInit { +export class CoreAutoFocusDirective implements AfterViewInit { - @Input('core-auto-focus') coreAutoFocus: boolean | string = true; + @Input('core-auto-focus') showKeyboard: boolean | string = true; protected element: HTMLElement; @@ -38,31 +39,54 @@ export class CoreAutoFocusDirective implements OnInit { } /** - * Component being initialized. + * @inheritdoc */ - ngOnInit(): void { - this.autoFocus(); + ngAfterViewInit(): void { + if (this.showKeyboard === 'nofocus') { + return; + } + + this.setFocus(); } /** - * Function after the view is initialized. + * Function to focus the element. + * + * @param retries Internal param to stop retrying then 0. */ - protected autoFocus(): void { - const autoFocus = CoreUtils.isTrueOrOne(this.coreAutoFocus); - if (autoFocus) { - // Wait a bit to make sure the view is loaded. - setTimeout(() => { - // If it's a ion-input or ion-textarea, search the right input to use. - let element = this.element; - if (this.element.tagName == 'ION-INPUT') { - element = this.element.querySelector('input') || element; - } else if (this.element.tagName == 'ION-TEXTAREA') { - element = this.element.querySelector('textarea') || element; - } - - CoreDomUtils.focusElement(element); - }, 200); + protected setFocus(retries = 10): void { + if (retries == 0) { + return; } + + // Wait a bit to make sure the view is loaded. + setTimeout(() => { + // If it's a ion-input or ion-textarea, search the right input to use. + let element: HTMLElement | null = null; + + if (this.element.tagName == 'ION-INPUT') { + element = this.element.querySelector('input'); + } else if (this.element.tagName == 'ION-TEXTAREA') { + element = this.element.querySelector('textarea'); + } else { + element = this.element; + } + + if (!element) { + this.setFocus(retries - 1); + + return; + } + + const showKeyboard = this.showKeyboard === '' || CoreUtils.isTrueOrOne(this.showKeyboard); + CoreDomUtils.focusElement(element, showKeyboard); + + if (element != document.activeElement) { + this.setFocus(retries - 1); + + return; + } + }, 200); } } diff --git a/src/core/features/course/classes/main-resource-component.ts b/src/core/features/course/classes/main-resource-component.ts index 4aa56ece4..ad336718e 100644 --- a/src/core/features/course/classes/main-resource-component.ts +++ b/src/core/features/course/classes/main-resource-component.ts @@ -57,7 +57,7 @@ export class CoreCourseModuleMainResourceComponent implements OnInit, OnDestroy, loaded = false; // If the component has been loaded. component?: string; // Component name. componentId?: number; // Component ID. - blog?: boolean; // If blog is avalaible. + blog?: boolean; // If blog is available. // Data for context menu. externalUrl?: string; // External URL to open in browser. diff --git a/src/core/features/course/components/format/core-course-format.html b/src/core/features/course/components/format/core-course-format.html index fb53e6f8c..8f7e56516 100644 --- a/src/core/features/course/components/format/core-course-format.html +++ b/src/core/features/course/components/format/core-course-format.html @@ -92,7 +92,7 @@ - + + + - + diff --git a/src/core/features/course/components/module-completion/module-completion.scss b/src/core/features/course/components/module-completion/module-completion.scss index 664cb4eef..a0fd0020d 100644 --- a/src/core/features/course/components/module-completion/module-completion.scss +++ b/src/core/features/course/components/module-completion/module-completion.scss @@ -1,13 +1,20 @@ :host { - button { - display: block; - background-color: transparent; + min-width: var(--a11y-min-target-size); + min-height: var(--a11y-min-target-size); + --size: 30px; - img { - padding: 5px; - width: 30px; - vertical-align: middle; - max-width: none; - } + img { + padding: 5px; + width: var(--size); + vertical-align: middle; + max-width: none; + margin: 7px; + } + + ion-button { + --padding-top: 0; + --padding-start: 0; + --padding-end: 0; + --padding-bottom: 0; } } diff --git a/src/core/features/course/components/module/core-course-module.html b/src/core/features/course/components/module/core-course-module.html index a6a942e03..453f5098c 100644 --- a/src/core/features/course/components/module/core-course-module.html +++ b/src/core/features/course/components/module/core-course-module.html @@ -1,22 +1,57 @@ - + + + - - - -
- - + + +

+ + +

+ + + + + {{ 'core.course.hiddenfromstudents' | translate }} + + + {{ 'core.course.hiddenoncoursepage' | translate }} + +
+ {{ 'core.restricted' | translate }} + + +
+ + {{ 'core.course.manualcompletionnotsynced' | translate }} + +
-
+
@@ -37,39 +72,34 @@
-
- -
- - - - - {{ 'core.course.hiddenfromstudents' | translate }} - - - {{ 'core.course.hiddenoncoursepage' | translate }} - -
- {{ 'core.restricted' | translate }} - + + + + -
- - {{ 'core.course.manualcompletionnotsynced' | translate }} - -
+
+
+
- - - -
- - - - - + + + + + diff --git a/src/core/features/course/components/module/module.scss b/src/core/features/course/components/module/module.scss index 5ded99475..017a6d617 100644 --- a/src/core/features/course/components/module/module.scss +++ b/src/core/features/course/components/module/module.scss @@ -1,45 +1,10 @@ :host { - // @todo Review commented styles. - background: white; - display: block; - - .item.core-course-module-handler { - align-items: flex-start; - min-height: 52px; - cursor: pointer; - -// &.item .item-inner { -// @include safe-area-padding(null, 0px, null, null); -// } -// .label { -// @include margin(0, 0, 0, null); -// } - .core-module-icon { - align-items: flex-start; - width: 24px; - height: 24px; - margin-top: 11px; - } - -// &.item-ios:active, -// &.item-ios.activated { -// background-color: $list-ios-activated-background-color; -// } -// &.item-md:active, -// &.item-md.activated { -// background-color: $list-md-activated-background-color; -// } + .item.core-module-main-item { + --min-height: 52px; } - .core-module-title { - display: flex; - flex-flow: row; - align-items: flex-start; - - core-format-text { - flex-grow: 2; - } + .core-module-main-item { .core-module-buttons, .buttons.core-module-buttons { margin: 0; @@ -66,10 +31,10 @@ } } - .core-module-more-info { - // ion-badge { - // @include text-align('start'); - // } + .core-module-module-description { + ion-badge { + text-align: start; + } .core-module-availabilityinfo { font-size: 90%; @@ -79,86 +44,23 @@ } } - .core-not-clickable { - cursor: initial; - -// &:active, -// &.activated { -// background-color: $list-background-color; -// } - } - .core-module-loading { width: 100%; text-align: center; padding-top: 10px; clear: both; -// @include darkmode() { -// color: $core-dark-text-color; -// } } -// @include darkmode() { -// .item.core-course-module-handler { -// background: $core-dark-item-bg-color; -// &.item-ios:active, -// &.item-ios.activated, -// &.item-md:active, -// &.item-md.activated { -// background-color: $core-dark-background-color; -// } -// } + .core-module-main-item + .core-module-module-description ion-label { + margin-top: 0px; + } + + .core-module-main-item.has-module-description { + --inner-border-width: 0; + } + + .core-module-module-description ion-label { + margin-inline-start: 50px; + } -// .core-not-clickable:active, -// .core-not-clickable.activated { -// background-color: $core-dark-item-bg-color; -// } -// } } - -// ion-app.app-root.md core-course-module { -// .core-module-description { -// @include padding(null, $label-md-margin-end, null, null); -// margin-bottom: $label-md-margin-bottom; - -// .core-show-more { -// @include padding(null, $label-md-margin-end, null, null); -// } -// } - -// .core-module-title core-format-text { -// padding-top: $label-md-margin-top + 3; -// } -// .button-md { -// margin-top: 8px; -// margin-bottom: 8px; -// } -// .core-module-buttons-more { -// min-height: 52px; -// min-width: 53px; -// } -// } - -// ion-app.app-root.ios core-course-module { -// .core-module-description { -// @include padding(null, $label-ios-margin-end, null, null); -// margin-bottom: $label-md-margin-bottom; - -// .core-show-more { -// @include padding(null, $label-ios-margin-end, null, null); -// } -// } - -// .core-module-title core-format-text { -// padding-top: $label-ios-margin-top + 3; -// } - -// .core-module-buttons-more { -// min-height: 53px; -// min-width: 58px; -// } -// } - -// ion-app.app-root .core-course-module-handler.item [item-start] + .item-inner { -// @include margin-horizontal(4px, null); -// } diff --git a/src/core/features/course/components/module/module.ts b/src/core/features/course/components/module/module.ts index 0241aa2a5..abe5646e4 100644 --- a/src/core/features/course/components/module/module.ts +++ b/src/core/features/course/components/module/module.ts @@ -44,14 +44,14 @@ import { }) export class CoreCourseModuleComponent implements OnInit, OnDestroy { - @Input() module?: CoreCourseModule; // The module to render. + @Input() module!: CoreCourseModule; // The module to render. @Input() courseId?: number; // The course the module belongs to. @Input() section?: CoreCourseSection; // The section the module belongs to. // eslint-disable-next-line @angular-eslint/no-input-rename @Input('downloadEnabled') set enabled(value: boolean) { this.downloadEnabled = value; - if (!this.module?.handlerData?.showDownloadButton || !this.downloadEnabled || this.statusCalculated) { + if (!this.module.handlerData?.showDownloadButton || !this.downloadEnabled || this.statusCalculated) { return; } @@ -81,10 +81,6 @@ export class CoreCourseModuleComponent implements OnInit, OnDestroy { * Component being initialized. */ ngOnInit(): void { - if (!this.module) { - return; - } - this.courseId = this.courseId || this.module.course; this.modNameTranslated = CoreCourse.translateModuleName(this.module.modname) || ''; @@ -125,7 +121,7 @@ export class CoreCourseModuleComponent implements OnInit, OnDestroy { * @param event Click event. */ moduleClicked(event: Event): void { - if (this.module?.uservisible !== false && this.module?.handlerData?.action) { + if (this.module.uservisible !== false && this.module.handlerData?.action) { this.module.handlerData.action(event, this.module, this.courseId!); } } @@ -195,7 +191,7 @@ export class CoreCourseModuleComponent implements OnInit, OnDestroy { this.spinner = false; this.downloadStatus = status; - this.module?.handlerData?.updateStatus?.(status); + this.module.handlerData?.updateStatus?.(status); } /** @@ -218,7 +214,7 @@ export class CoreCourseModuleComponent implements OnInit, OnDestroy { */ ngOnDestroy(): void { // this.statusObserver?.off(); - this.module?.handlerData?.onDestroy?.(); + this.module.handlerData?.onDestroy?.(); this.isDestroyed = true; } diff --git a/src/core/features/course/pages/preview/preview.html b/src/core/features/course/pages/preview/preview.html index 166ee40f1..02223dce5 100644 --- a/src/core/features/course/pages/preview/preview.html +++ b/src/core/features/course/pages/preview/preview.html @@ -58,7 +58,7 @@

{{contact.fullname}}

- + diff --git a/src/core/features/courses/components/self-enrol-password/self-enrol-password.html b/src/core/features/courses/components/self-enrol-password/self-enrol-password.html index 5de62417d..b1c6c8b3b 100644 --- a/src/core/features/courses/components/self-enrol-password/self-enrol-password.html +++ b/src/core/features/courses/components/self-enrol-password/self-enrol-password.html @@ -20,7 +20,7 @@ type="password" placeholder="{{ 'core.courses.password' | translate }}" [(ngModel)]="password" - [autofocus]="true" + core-auto-focus [clearOnEdit]="false">
diff --git a/src/core/features/courses/pages/categories/categories.html b/src/core/features/courses/pages/categories/categories.html index 190552887..e1216beb6 100644 --- a/src/core/features/courses/pages/categories/categories.html +++ b/src/core/features/courses/pages/categories/categories.html @@ -39,9 +39,8 @@
- +

diff --git a/src/core/features/courses/pages/categories/categories.ts b/src/core/features/courses/pages/categories/categories.ts index f38243bbe..1714f4ebb 100644 --- a/src/core/features/courses/pages/categories/categories.ts +++ b/src/core/features/courses/pages/categories/categories.ts @@ -117,4 +117,13 @@ export class CoreCoursesCategoriesPage implements OnInit { }); } + /** + * Open a category. + * + * @param categoryId Category Id. + */ + openCategory(categoryId: number): void { + CoreNavigator.navigateToSitePath('courses/categories/' + categoryId); + } + } diff --git a/src/core/features/courses/pages/my-courses/my-courses.ts b/src/core/features/courses/pages/my-courses/my-courses.ts index e23121503..eb5f2d0b8 100644 --- a/src/core/features/courses/pages/my-courses/my-courses.ts +++ b/src/core/features/courses/pages/my-courses/my-courses.ts @@ -163,7 +163,7 @@ export class CoreCoursesMyCoursesPage implements OnInit, OnDestroy { if (!newValue || !this.courses) { this.filteredCourses = this.courses; } else { - // Use displayname if avalaible, or fullname if not. + // Use displayname if available, or fullname if not. if (this.courses.length > 0 && typeof this.courses[0].displayname != 'undefined') { this.filteredCourses = this.courses.filter((course) => course.displayname!.toLowerCase().indexOf(newValue) > -1); } else { diff --git a/src/core/features/courses/services/courses.ts b/src/core/features/courses/services/courses.ts index 0e4d56c9b..acf54ef00 100644 --- a/src/core/features/courses/services/courses.ts +++ b/src/core/features/courses/services/courses.ts @@ -526,7 +526,7 @@ export class CoreCoursesProvider { response.courses = response.courses.filter((course) => courseIds.indexOf(course.id) >= 0); } - // Courses will be sorted using sortorder if avalaible. + // Courses will be sorted using sortorder if available. return response.courses.sort((a, b) => { if (typeof a.sortorder == 'undefined' && typeof b.sortorder == 'undefined') { return b.id - a.id; diff --git a/src/core/features/editor/components/rich-text-editor/core-editor-rich-text-editor.html b/src/core/features/editor/components/rich-text-editor/core-editor-rich-text-editor.html index ef4b82745..15e0859a2 100644 --- a/src/core/features/editor/components/rich-text-editor/core-editor-rich-text-editor.html +++ b/src/core/features/editor/components/rich-text-editor/core-editor-rich-text-editor.html @@ -16,98 +16,120 @@
- - - - - - - - - - - -
diff --git a/src/core/features/editor/components/rich-text-editor/rich-text-editor.ts b/src/core/features/editor/components/rich-text-editor/rich-text-editor.ts index 3605d5c53..b1990106d 100644 --- a/src/core/features/editor/components/rich-text-editor/rich-text-editor.ts +++ b/src/core/features/editor/components/rich-text-editor/rich-text-editor.ts @@ -511,6 +511,10 @@ export class CoreEditorRichTextEditorComponent implements OnInit, AfterContentIn * @param event The event. */ async toggleEditor(event: Event): Promise { + if (event.type == 'keyup' && !this.isValidKeyboardKey(event)) { + return; + } + this.stopBubble(event); this.setContent(this.control?.value || ''); @@ -654,6 +658,10 @@ export class CoreEditorRichTextEditorComponent implements OnInit, AfterContentIn * toolbar styles button when set. */ buttonAction(event: Event, command: string, parameters?: string): void { + if (event.type == 'keyup' && !this.isValidKeyboardKey(event)) { + return; + } + this.stopBubble(event); if (!command) { @@ -725,6 +733,10 @@ export class CoreEditorRichTextEditorComponent implements OnInit, AfterContentIn * Hide the toolbar in phone mode. */ hideToolbar(event: Event): void { + if (event.type == 'keyup' && !this.isValidKeyboardKey(event)) { + return; + } + this.element.classList.remove('has-focus'); this.stopBubble(event); @@ -734,6 +746,16 @@ export class CoreEditorRichTextEditorComponent implements OnInit, AfterContentIn } } + /** + * Checks if Space or Enter have been pressed. + * + * @param event Keyboard Event. + * @returns Wether space or enter have been pressed. + */ + protected isValidKeyboardKey(event: KeyboardEvent): boolean { + return event.key == ' ' || event.key == 'Enter'; + } + /** * Show the toolbar. */ @@ -754,7 +776,7 @@ export class CoreEditorRichTextEditorComponent implements OnInit, AfterContentIn * @param event Event. */ stopBubble(event: Event): void { - if (event.type != 'mouseup') { + if (event.type != 'mouseup' && event.type != 'keyup') { event.preventDefault(); } event.stopPropagation(); @@ -765,7 +787,11 @@ export class CoreEditorRichTextEditorComponent implements OnInit, AfterContentIn * * @param event Event. */ - mouseDownAction(event: Event): void { + downAction(event: Event): void { + if (event.type == 'keydown' && !this.isValidKeyboardKey(event)) { + return; + } + const selection = window.getSelection()?.toString(); // When RTE is focused with a whole paragraph in desktop the stopBubble will not fire click. @@ -778,6 +804,10 @@ export class CoreEditorRichTextEditorComponent implements OnInit, AfterContentIn * Method that shows the next toolbar buttons. */ async toolbarNext(event: Event): Promise { + if (event.type == 'keyup' && !this.isValidKeyboardKey(event)) { + return; + } + this.stopBubble(event); if (!this.toolbarNextHidden) { @@ -792,6 +822,10 @@ export class CoreEditorRichTextEditorComponent implements OnInit, AfterContentIn * Method that shows the previous toolbar buttons. */ async toolbarPrev(event: Event): Promise { + if (event.type == 'keyup' && !this.isValidKeyboardKey(event)) { + return; + } + this.stopBubble(event); if (!this.toolbarPrevHidden) { diff --git a/src/core/features/grades/services/grades-helper.ts b/src/core/features/grades/services/grades-helper.ts index baf9cfbe8..4f45ee75d 100644 --- a/src/core/features/grades/services/grades-helper.ts +++ b/src/core/features/grades/services/grades-helper.ts @@ -471,7 +471,7 @@ export class CoreGradesHelperProvider { } // Try to open the module grade directly. Check if it's possible. - const grades = await CoreGrades.isGradeItemsAvalaible(siteId); + const grades = await CoreGrades.isGradeItemsAvailable(siteId); if (!grades) { throw new CoreError('No grades found.'); @@ -543,7 +543,7 @@ export class CoreGradesHelperProvider { const site = await CoreSites.getSite(siteId); userId = userId || site.getUserId(); - const enabled = await CoreGrades.isGradeItemsAvalaible(siteId); + const enabled = await CoreGrades.isGradeItemsAvailable(siteId); return enabled ? CoreGrades.invalidateCourseGradesItemsData(courseId, userId, groupId, siteId) diff --git a/src/core/features/grades/services/grades.ts b/src/core/features/grades/services/grades.ts index 2e40eab8f..42551d176 100644 --- a/src/core/features/grades/services/grades.ts +++ b/src/core/features/grades/services/grades.ts @@ -87,7 +87,7 @@ export class CoreGradesProvider { /** * Get the grade items for a certain module. Keep in mind that may have more than one item to include outcomes and scales. - * Fallback function only used if 'gradereport_user_get_grade_items' WS is not avalaible Moodle < 3.2. + * Fallback function only used if 'gradereport_user_get_grade_items' WS is not available Moodle < 3.2. * * @param courseId ID of the course to get the grades from. * @param userId ID of the user to get the grades from. If not defined use site's current user. @@ -109,7 +109,7 @@ export class CoreGradesProvider { userId = userId || site.getUserId(); - const enabled = await this.isGradeItemsAvalaible(siteId); + const enabled = await this.isGradeItemsAvailable(siteId); if (enabled) { try { @@ -340,13 +340,13 @@ export class CoreGradesProvider { } /** - * Returns whether or not WS Grade Items is avalaible. + * Returns whether or not WS Grade Items is available. * * @param siteId Site ID. If not defined, current site. - * @return True if ws is avalaible, false otherwise. + * @return True if ws is available, false otherwise. * @since Moodle 3.2 */ - async isGradeItemsAvalaible(siteId?: string): Promise { + async isGradeItemsAvailable(siteId?: string): Promise { const site = await CoreSites.getSite(siteId); return site.wsAvailable('gradereport_user_get_grade_items'); diff --git a/src/core/features/login/pages/credentials/credentials.html b/src/core/features/login/pages/credentials/credentials.html index 7594c44cc..5d34e1eef 100644 --- a/src/core/features/login/pages/credentials/credentials.html +++ b/src/core/features/login/pages/credentials/credentials.html @@ -7,8 +7,7 @@ {{ 'core.login.login' | translate }} - + @@ -34,7 +33,7 @@ + required="true" core-auto-focus> @@ -63,11 +62,16 @@ - + diff --git a/src/core/features/login/pages/credentials/credentials.ts b/src/core/features/login/pages/credentials/credentials.ts index 61cdeb2d5..ebde590b7 100644 --- a/src/core/features/login/pages/credentials/credentials.ts +++ b/src/core/features/login/pages/credentials/credentials.ts @@ -287,6 +287,20 @@ export class CoreLoginCredentialsPage implements OnInit, OnDestroy { } } + /** + * Open email signup page. + */ + openEmailSignup(): void { + CoreNavigator.navigate('/login/emailsignup', { params: { siteUrl: this.siteUrl } }); + } + + /** + * Open settings page. + */ + openSettings(): void { + CoreNavigator.navigate('/settings'); + } + /** * View destroyed. */ diff --git a/src/core/features/login/pages/forgotten-password/forgotten-password.html b/src/core/features/login/pages/forgotten-password/forgotten-password.html index 615048cae..b7ddc1d03 100644 --- a/src/core/features/login/pages/forgotten-password/forgotten-password.html +++ b/src/core/features/login/pages/forgotten-password/forgotten-password.html @@ -31,7 +31,7 @@ + formControlName="value" autocapitalize="none" autocorrect="off" [core-auto-focus]="showKeyboard"> diff --git a/src/core/features/login/pages/forgotten-password/forgotten-password.ts b/src/core/features/login/pages/forgotten-password/forgotten-password.ts index e6aa8a6b0..5e54a3ce6 100644 --- a/src/core/features/login/pages/forgotten-password/forgotten-password.ts +++ b/src/core/features/login/pages/forgotten-password/forgotten-password.ts @@ -35,7 +35,7 @@ export class CoreLoginForgottenPasswordPage implements OnInit { myForm!: FormGroup; siteUrl!: string; - autoFocus!: boolean; + showKeyboard!: boolean; constructor( protected formBuilder: FormBuilder, @@ -55,7 +55,7 @@ export class CoreLoginForgottenPasswordPage implements OnInit { } this.siteUrl = siteUrl; - this.autoFocus = Platform.is('tablet'); + this.showKeyboard = Platform.is('tablet'); this.myForm = this.formBuilder.group({ field: ['username', Validators.required], value: [CoreNavigator.getRouteParam('username') || '', Validators.required], diff --git a/src/core/features/login/pages/reconnect/reconnect.html b/src/core/features/login/pages/reconnect/reconnect.html index 2fec459d3..10db38476 100644 --- a/src/core/features/login/pages/reconnect/reconnect.html +++ b/src/core/features/login/pages/reconnect/reconnect.html @@ -7,7 +7,7 @@ {{ 'core.login.reconnect' | translate }} - +
+ autocomplete="current-password" enterkeyhint="go" required="true" core-auto-focus> @@ -71,13 +71,16 @@ - + diff --git a/src/core/features/login/pages/reconnect/reconnect.ts b/src/core/features/login/pages/reconnect/reconnect.ts index 8eeb846b1..21c3c4f9a 100644 --- a/src/core/features/login/pages/reconnect/reconnect.ts +++ b/src/core/features/login/pages/reconnect/reconnect.ts @@ -271,4 +271,27 @@ export class CoreLoginReconnectPage implements OnInit, OnDestroy { } } + /** + * A11y key functionality that prevents keyDown events. + * + * @param e Event. + */ + keyDown(e: KeyboardEvent): void { + if (e.key == 'Escape') { + e.preventDefault(); + e.stopPropagation(); + } + } + + /** + * Cancel reconnect. + * + * @param e Event. + */ + keyUp(e: KeyboardEvent): void { + if (e.key == 'Escape') { + this.cancel(e); + } + } + } diff --git a/src/core/features/login/pages/site/site.html b/src/core/features/login/pages/site/site.html index abd234287..7b509ee74 100644 --- a/src/core/features/login/pages/site/site.html +++ b/src/core/features/login/pages/site/site.html @@ -7,8 +7,7 @@ {{ 'core.login.connecttomoodle' | translate }} - + @@ -27,7 +26,7 @@

{{ 'core.login.siteaddress' | translate }}

+ formControlName="siteUrl" [core-auto-focus]="showKeyboard"> @@ -37,7 +36,7 @@

{{ 'core.login.siteaddress' | translate }}

+ [core-auto-focus]="showKeyboard" (ionChange)="searchSite($event, siteForm.value.siteUrl)"> @@ -109,12 +108,16 @@ - - - + diff --git a/src/core/features/login/pages/site/site.scss b/src/core/features/login/pages/site/site.scss index 31d2a2823..bcc7e8f43 100644 --- a/src/core/features/login/pages/site/site.scss +++ b/src/core/features/login/pages/site/site.scss @@ -12,7 +12,6 @@ .item { &.core-login-need-help { - text-decoration: underline; margin-top: 16px; } &.core-login-site-qrcode { diff --git a/src/core/features/login/pages/site/site.ts b/src/core/features/login/pages/site/site.ts index 88ee2c599..b37642d19 100644 --- a/src/core/features/login/pages/site/site.ts +++ b/src/core/features/login/pages/site/site.ts @@ -567,6 +567,13 @@ export class CoreLoginSitePage implements OnInit { CoreCustomURLSchemes.treatHandleCustomURLError(error); } + /** + * Open settings page. + */ + openSettings(): void { + CoreNavigator.navigate('/settings'); + } + } /** diff --git a/src/core/features/login/pages/sites/sites.html b/src/core/features/login/pages/sites/sites.html index 20789cbb7..e9c437993 100644 --- a/src/core/features/login/pages/sites/sites.html +++ b/src/core/features/login/pages/sites/sites.html @@ -11,8 +11,7 @@ [attr.aria-label]="'core.delete' | translate"> - + diff --git a/src/core/features/login/pages/sites/sites.ts b/src/core/features/login/pages/sites/sites.ts index 7c5b778c5..34d4e873a 100644 --- a/src/core/features/login/pages/sites/sites.ts +++ b/src/core/features/login/pages/sites/sites.ts @@ -139,4 +139,11 @@ export class CoreLoginSitesPage implements OnInit { this.showDelete = !this.showDelete; } + /** + * Open settings page. + */ + openSettings(): void { + CoreNavigator.navigate('/settings'); + } + } diff --git a/src/core/features/mainmenu/pages/menu/menu.scss b/src/core/features/mainmenu/pages/menu/menu.scss index 151bea4ec..a7a70d8d4 100644 --- a/src/core/features/mainmenu/pages/menu/menu.scss +++ b/src/core/features/mainmenu/pages/menu/menu.scss @@ -1,9 +1,10 @@ +@import "~theme/globals"; + :host{ --menutabbar-size: 60px; - ion-tabs { - -webkit-filter: drop-shadow(0px 3px 3px rgba(var(--drop-shadow))); - filter: drop-shadow(0px 3px 3px rgba(var(--drop-shadow))); + ion-tab-bar { + box-shadow: 0px -3px 3px rgba(var(--drop-shadow)); } ion-tab-button ion-icon { @@ -28,6 +29,10 @@ width: var(--menutabbar-size); height: 100%; flex-direction: column; + @include border-end(var(--border)); + box-shadow: 3px 0 3px rgba(var(--drop-shadow)); + border-top: 0; + ion-tab-button { width: 100%; ion-badge { diff --git a/src/core/features/mainmenu/pages/more/more.html b/src/core/features/mainmenu/pages/more/more.html index 6f0fc716f..79b029c4e 100644 --- a/src/core/features/mainmenu/pages/more/more.html +++ b/src/core/features/mainmenu/pages/more/more.html @@ -20,7 +20,7 @@

{{ siteUrl }}

- + @@ -82,7 +82,7 @@

{{ logoutLabel | translate }}

- + diff --git a/src/core/features/search/components/search-box/core-search-box.html b/src/core/features/search/components/search-box/core-search-box.html index 8cc8753b9..8438c6237 100644 --- a/src/core/features/search/components/search-box/core-search-box.html +++ b/src/core/features/search/components/search-box/core-search-box.html @@ -3,7 +3,7 @@ {{ siteUrl }}

- + - - - + @@ -63,7 +61,7 @@ - +

{{ 'core.courses.availablecourses' | translate}}

@@ -77,7 +75,7 @@
- +

{{ 'core.courses.categories' | translate}}

@@ -86,7 +84,7 @@
- +

{{ 'core.courses.mycourses' | translate}}

@@ -94,7 +92,7 @@
- +

{{ 'core.courses.searchcourses' | translate}}

diff --git a/src/core/features/sitehome/pages/index/index.ts b/src/core/features/sitehome/pages/index/index.ts index 591da63fd..8976ef25e 100644 --- a/src/core/features/sitehome/pages/index/index.ts +++ b/src/core/features/sitehome/pages/index/index.ts @@ -221,6 +221,27 @@ export class CoreSiteHomeIndexPage implements OnInit, OnDestroy { CoreNavigator.navigateToSitePath('courses/search'); } + /** + * Go to available courses. + */ + openAvailableCourses(): void { + CoreNavigator.navigateToSitePath('courses/all'); + } + + /** + * Go to my courses. + */ + openMyCourses(): void { + CoreNavigator.navigateToSitePath('courses/my'); + } + + /** + * Go to course categories. + */ + openCourseCategories(): void { + CoreNavigator.navigateToSitePath('courses/categories'); + } + /** * Component being destroyed. */ diff --git a/src/core/features/user/pages/profile/profile.html b/src/core/features/user/pages/profile/profile.html index c25b6295d..ca5949996 100644 --- a/src/core/features/user/pages/profile/profile.html +++ b/src/core/features/user/pages/profile/profile.html @@ -14,11 +14,16 @@