FrontEndDev #1

Merged
onsaliyo merged 3 commits from FrontEndDev into master 2021-02-19 13:17:31 +01:00
32 changed files with 952 additions and 92 deletions

View File

@ -91,6 +91,53 @@
<splash height="2208" src="resources/ios/splash/Default-736h.png" width="1242" /> <splash height="2208" src="resources/ios/splash/Default-736h.png" width="1242" />
<splash height="2436" src="resources/ios/splash/Default-2436h.png" width="1125" /> <splash height="2436" src="resources/ios/splash/Default-2436h.png" width="1125" />
<splash height="2732" src="resources/ios/splash/Default@2x~universal~anyany.png" width="2732" /> <splash height="2732" src="resources/ios/splash/Default@2x~universal~anyany.png" width="2732" />
<icon height="57" src="resources/ios/icon/icon.png" width="57" />
<icon height="114" src="resources/ios/icon/icon@2x.png" width="114" />
<icon height="20" src="resources/ios/icon/icon-20.png" width="20" />
<icon height="40" src="resources/ios/icon/icon-20@2x.png" width="40" />
<icon height="60" src="resources/ios/icon/icon-20@3x.png" width="60" />
<icon height="29" src="resources/ios/icon/icon-29.png" width="29" />
<icon height="58" src="resources/ios/icon/icon-29@2x.png" width="58" />
<icon height="87" src="resources/ios/icon/icon-29@3x.png" width="87" />
<icon height="48" src="resources/ios/icon/icon-24@2x.png" width="48" />
<icon height="55" src="resources/ios/icon/icon-27.5@2x.png" width="55" />
<icon height="88" src="resources/ios/icon/icon-44@2x.png" width="88" />
<icon height="172" src="resources/ios/icon/icon-86@2x.png" width="172" />
<icon height="196" src="resources/ios/icon/icon-98@2x.png" width="196" />
<icon height="216" src="resources/ios/icon/icon-108@2x.png" width="216" />
<icon height="40" src="resources/ios/icon/icon-40.png" width="40" />
<icon height="80" src="resources/ios/icon/icon-40@2x.png" width="80" />
<icon height="120" src="resources/ios/icon/icon-40@3x.png" width="120" />
<icon height="50" src="resources/ios/icon/icon-50.png" width="50" />
<icon height="100" src="resources/ios/icon/icon-50@2x.png" width="100" />
<icon height="60" src="resources/ios/icon/icon-60.png" width="60" />
<icon height="120" src="resources/ios/icon/icon-60@2x.png" width="120" />
<icon height="180" src="resources/ios/icon/icon-60@3x.png" width="180" />
<icon height="72" src="resources/ios/icon/icon-72.png" width="72" />
<icon height="144" src="resources/ios/icon/icon-72@2x.png" width="144" />
<icon height="76" src="resources/ios/icon/icon-76.png" width="76" />
<icon height="152" src="resources/ios/icon/icon-76@2x.png" width="152" />
<icon height="167" src="resources/ios/icon/icon-83.5@2x.png" width="167" />
<icon height="1024" src="resources/ios/icon/icon-1024.png" width="1024" />
<splash height="1136" src="resources/ios/splash/Default-568h@2x~iphone.png" width="640" />
<splash height="1334" src="resources/ios/splash/Default-667h.png" width="750" />
<splash height="2688" src="resources/ios/splash/Default-2688h~iphone.png" width="1242" />
<splash height="1242" src="resources/ios/splash/Default-Landscape-2688h~iphone.png" width="2688" />
<splash height="1792" src="resources/ios/splash/Default-1792h~iphone.png" width="828" />
<splash height="828" src="resources/ios/splash/Default-Landscape-1792h~iphone.png" width="1792" />
<splash height="2436" src="resources/ios/splash/Default-2436h.png" width="1125" />
<splash height="1125" src="resources/ios/splash/Default-Landscape-2436h.png" width="2436" />
<splash height="2208" src="resources/ios/splash/Default-736h.png" width="1242" />
<splash height="1242" src="resources/ios/splash/Default-Landscape-736h.png" width="2208" />
<splash height="1536" src="resources/ios/splash/Default-Landscape@2x~ipad.png" width="2048" />
<splash height="2048" src="resources/ios/splash/Default-Landscape@~ipadpro.png" width="2732" />
<splash height="768" src="resources/ios/splash/Default-Landscape~ipad.png" width="1024" />
<splash height="2048" src="resources/ios/splash/Default-Portrait@2x~ipad.png" width="1536" />
<splash height="2732" src="resources/ios/splash/Default-Portrait@~ipadpro.png" width="2048" />
<splash height="1024" src="resources/ios/splash/Default-Portrait~ipad.png" width="768" />
<splash height="960" src="resources/ios/splash/Default@2x~iphone.png" width="640" />
<splash height="480" src="resources/ios/splash/Default~iphone.png" width="320" />
<splash height="2732" src="resources/ios/splash/Default@2x~universal~anyany.png" width="2732" />
</platform> </platform>
<plugin name="cordova-plugin-whitelist" spec="1.3.3" /> <plugin name="cordova-plugin-whitelist" spec="1.3.3" />
<plugin name="cordova-plugin-statusbar" spec="2.4.2" /> <plugin name="cordova-plugin-statusbar" spec="2.4.2" />

412
package-lock.json generated
View File

@ -2020,6 +2020,25 @@
} }
} }
}, },
"@netflix/nerror": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/@netflix/nerror/-/nerror-1.1.3.tgz",
"integrity": "sha512-b+MGNyP9/LXkapreJzNUzcvuzZslj/RGgdVVJ16P2wSlYatfLycPObImqVJSmNAdyeShvNeM/pl3sVZsObFueg==",
"dev": true,
"requires": {
"assert-plus": "^1.0.0",
"extsprintf": "^1.4.0",
"lodash": "^4.17.15"
},
"dependencies": {
"extsprintf": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.0.tgz",
"integrity": "sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=",
"dev": true
}
}
},
"@ngtools/webpack": { "@ngtools/webpack": {
"version": "10.0.8", "version": "10.0.8",
"resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-10.0.8.tgz", "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-10.0.8.tgz",
@ -2404,6 +2423,12 @@
"integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==",
"dev": true "dev": true
}, },
"abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
"dev": true
},
"accepts": { "accepts": {
"version": "1.3.7", "version": "1.3.7",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
@ -2537,6 +2562,21 @@
"integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
"dev": true "dev": true
}, },
"android-versions": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/android-versions/-/android-versions-1.6.0.tgz",
"integrity": "sha512-ojC2Ig7b/KJ6iNtR8e4bacmOsJyEkoERk3CKMIsnH7kJz5z6551NMbrVaRb7KXYavu1d74Uhml/bfcmqT3nAcg==",
"dev": true,
"requires": {
"semver": "^5.7.1"
}
},
"ansi": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz",
"integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=",
"dev": true
},
"ansi-colors": { "ansi-colors": {
"version": "3.2.4", "version": "3.2.4",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
@ -2774,6 +2814,12 @@
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
"dev": true "dev": true
}, },
"at-least-node": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
"integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
"dev": true
},
"atob": { "atob": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
@ -2980,6 +3026,12 @@
"callsite": "1.0.0" "callsite": "1.0.0"
} }
}, },
"big-integer": {
"version": "1.6.48",
"resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz",
"integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==",
"dev": true
},
"big.js": { "big.js": {
"version": "5.2.2", "version": "5.2.2",
"resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
@ -3080,6 +3132,15 @@
"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
"dev": true "dev": true
}, },
"bplist-parser": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz",
"integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==",
"dev": true,
"requires": {
"big-integer": "^1.6.44"
}
},
"brace-expansion": { "brace-expansion": {
"version": "1.1.11", "version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@ -4049,6 +4110,241 @@
} }
} }
}, },
"cordova-android": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-9.0.0.tgz",
"integrity": "sha512-2ZEgApK4LPMYW0zh/mLAH3CabzCaKE0yxQTzA2wTf0Eo2HHTJnRtDCf9spGf3nPOkubyXS6+pvzz5QzNHpVTqQ==",
"dev": true,
"requires": {
"android-versions": "^1.5.0",
"cordova-common": "^4.0.1",
"execa": "^4.0.2",
"fs-extra": "^9.0.1",
"nopt": "^4.0.3",
"properties-parser": "^0.3.1",
"which": "^2.0.2"
},
"dependencies": {
"cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
"dev": true,
"requires": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
}
},
"execa": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
"integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
"dev": true,
"requires": {
"cross-spawn": "^7.0.0",
"get-stream": "^5.0.0",
"human-signals": "^1.1.1",
"is-stream": "^2.0.0",
"merge-stream": "^2.0.0",
"npm-run-path": "^4.0.0",
"onetime": "^5.1.0",
"signal-exit": "^3.0.2",
"strip-final-newline": "^2.0.0"
}
},
"fs-extra": {
"version": "9.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
"integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
"dev": true,
"requires": {
"at-least-node": "^1.0.0",
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
}
},
"get-stream": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
"integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
"dev": true,
"requires": {
"pump": "^3.0.0"
}
},
"is-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
"integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
"dev": true
},
"jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.6",
"universalify": "^2.0.0"
}
},
"mimic-fn": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true
},
"npm-run-path": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
"integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
"dev": true,
"requires": {
"path-key": "^3.0.0"
}
},
"onetime": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
"integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
"dev": true,
"requires": {
"mimic-fn": "^2.1.0"
}
},
"path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true
},
"shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true,
"requires": {
"shebang-regex": "^3.0.0"
}
},
"shebang-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true
},
"universalify": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
"integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
"dev": true
},
"which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
"requires": {
"isexe": "^2.0.0"
}
}
}
},
"cordova-common": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-4.0.2.tgz",
"integrity": "sha512-od7aNShyuBajzPY83mUEO8tERwwWdFklXETHiXP5Ft87CWeo/tSuwNPFztyTy8XYc74yXdogXKPTJeUHuVzB8Q==",
"dev": true,
"requires": {
"@netflix/nerror": "^1.1.3",
"ansi": "^0.3.1",
"bplist-parser": "^0.2.0",
"cross-spawn": "^7.0.1",
"elementtree": "^0.1.7",
"endent": "^1.4.1",
"fast-glob": "^3.2.2",
"fs-extra": "^9.0.0",
"glob": "^7.1.6",
"plist": "^3.0.1",
"q": "^1.5.1",
"read-chunk": "^3.2.0",
"strip-bom": "^4.0.0",
"underscore": "^1.9.2"
},
"dependencies": {
"cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
"dev": true,
"requires": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
}
},
"fs-extra": {
"version": "9.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
"integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
"dev": true,
"requires": {
"at-least-node": "^1.0.0",
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
}
},
"jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.6",
"universalify": "^2.0.0"
}
},
"path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true
},
"shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true,
"requires": {
"shebang-regex": "^3.0.0"
}
},
"shebang-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true
},
"universalify": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
"integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
"dev": true
},
"which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
"requires": {
"isexe": "^2.0.0"
}
}
}
},
"cordova-plugin-device": { "cordova-plugin-device": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/cordova-plugin-device/-/cordova-plugin-device-2.0.2.tgz", "resolved": "https://registry.npmjs.org/cordova-plugin-device/-/cordova-plugin-device-2.0.2.tgz",
@ -4556,6 +4852,12 @@
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
"dev": true "dev": true
}, },
"dedent": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
"integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
"dev": true
},
"deep-equal": { "deep-equal": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
@ -4928,6 +5230,23 @@
"integrity": "sha512-eFDC+yVQpEhtlapk4CYDPfV9ajF9cEof5TBcO49L1ETO+aYogrKWDmYpZyxBScMNe8Bo/gJamH4amQ4yyvXg4g==", "integrity": "sha512-eFDC+yVQpEhtlapk4CYDPfV9ajF9cEof5TBcO49L1ETO+aYogrKWDmYpZyxBScMNe8Bo/gJamH4amQ4yyvXg4g==",
"dev": true "dev": true
}, },
"elementtree": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz",
"integrity": "sha1-mskb5uUvtuYkTE5UpKw+2K6OKcA=",
"dev": true,
"requires": {
"sax": "1.1.4"
},
"dependencies": {
"sax": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz",
"integrity": "sha1-dLbTPJrh4AFRDxeakRaFiPGu2qk=",
"dev": true
}
}
},
"elliptic": { "elliptic": {
"version": "6.5.3", "version": "6.5.3",
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz",
@ -4998,6 +5317,17 @@
"once": "^1.4.0" "once": "^1.4.0"
} }
}, },
"endent": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/endent/-/endent-1.4.1.tgz",
"integrity": "sha512-buHTb5c8AC9NshtP6dgmNLYkiT+olskbq1z6cEGvfGCF3Qphbu/1zz5Xu+yjTDln8RbxNhPoUyJ5H8MSrp1olQ==",
"dev": true,
"requires": {
"dedent": "^0.7.0",
"fast-json-parse": "^1.0.3",
"objectorarray": "^1.0.4"
}
},
"engine.io": { "engine.io": {
"version": "3.4.2", "version": "3.4.2",
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.4.2.tgz", "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.4.2.tgz",
@ -5608,6 +5938,12 @@
"picomatch": "^2.2.1" "picomatch": "^2.2.1"
} }
}, },
"fast-json-parse": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz",
"integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==",
"dev": true
},
"fast-json-stable-stringify": { "fast-json-stable-stringify": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
@ -6526,6 +6862,12 @@
} }
} }
}, },
"human-signals": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
"integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
"dev": true
},
"humanize-ms": { "humanize-ms": {
"version": "1.2.1", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
@ -8433,6 +8775,16 @@
"integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==", "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==",
"dev": true "dev": true
}, },
"nopt": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz",
"integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==",
"dev": true,
"requires": {
"abbrev": "1",
"osenv": "^0.1.4"
}
},
"normalize-package-data": { "normalize-package-data": {
"version": "2.5.0", "version": "2.5.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
@ -8783,6 +9135,12 @@
"has": "^1.0.3" "has": "^1.0.3"
} }
}, },
"objectorarray": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.4.tgz",
"integrity": "sha512-91k8bjcldstRz1bG6zJo8lWD7c6QXcB4nTDUqiEvIL1xAsLoZlOOZZG+nd6YPz+V7zY1580J4Xxh1vZtyv4i/w==",
"dev": true
},
"obuf": { "obuf": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
@ -10030,6 +10388,15 @@
} }
} }
}, },
"properties-parser": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/properties-parser/-/properties-parser-0.3.1.tgz",
"integrity": "sha1-ExbpU5/7/ZOEXjabIRAiq9R4dxo=",
"dev": true,
"requires": {
"string.prototype.codepointat": "^0.2.0"
}
},
"protoduck": { "protoduck": {
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz",
@ -10611,6 +10978,16 @@
} }
} }
}, },
"read-chunk": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-3.2.0.tgz",
"integrity": "sha512-CEjy9LCzhmD7nUpJ1oVOE6s/hBkejlcJEgLQHVnQznOSilOPb+kpKktlLfFDK3/WP43+F80xkUTM2VOkYoSYvQ==",
"dev": true,
"requires": {
"pify": "^4.0.1",
"with-open-file": "^0.1.6"
}
},
"read-package-json": { "read-package-json": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz", "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz",
@ -12219,6 +12596,12 @@
} }
} }
}, },
"string.prototype.codepointat": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz",
"integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==",
"dev": true
},
"string.prototype.trimend": { "string.prototype.trimend": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz",
@ -12265,12 +12648,24 @@
} }
} }
}, },
"strip-bom": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
"integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
"dev": true
},
"strip-eof": { "strip-eof": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
"integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
"dev": true "dev": true
}, },
"strip-final-newline": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
"integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
"dev": true
},
"style-loader": { "style-loader": {
"version": "1.2.1", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.2.1.tgz", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.2.1.tgz",
@ -12773,6 +13168,12 @@
"integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==", "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==",
"dev": true "dev": true
}, },
"underscore": {
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.0.tgz",
"integrity": "sha512-21rQzss/XPMjolTiIezSu3JAjgagXKROtNrYFEOWK109qY1Uv2tVjPTZ1ci2HgvQDA16gHYSthQIJfB+XId/rQ==",
"dev": true
},
"unicode-canonical-property-names-ecmascript": { "unicode-canonical-property-names-ecmascript": {
"version": "1.0.4", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
@ -14057,6 +14458,17 @@
"integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
"dev": true "dev": true
}, },
"with-open-file": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/with-open-file/-/with-open-file-0.1.7.tgz",
"integrity": "sha512-ecJS2/oHtESJ1t3ZfMI3B7KIDKyfN0O16miWxdn30zdh66Yd3LsRFebXZXq6GU4xfxLf6nVxp9kIqElb5fqczA==",
"dev": true,
"requires": {
"p-finally": "^1.0.0",
"p-try": "^2.1.0",
"pify": "^4.0.1"
}
},
"worker-farm": { "worker-farm": {
"version": "1.7.0", "version": "1.7.0",
"resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",

View File

@ -40,6 +40,7 @@
"@types/jasminewd2": "~2.0.3", "@types/jasminewd2": "~2.0.3",
"@types/node": "^12.11.1", "@types/node": "^12.11.1",
"codelyzer": "^6.0.0", "codelyzer": "^6.0.0",
"cordova-android": "^9.0.0",
"cordova-plugin-device": "^2.0.2", "cordova-plugin-device": "^2.0.2",
"cordova-plugin-ionic-keyboard": "^2.2.0", "cordova-plugin-ionic-keyboard": "^2.2.0",
"cordova-plugin-ionic-webview": "^4.2.1", "cordova-plugin-ionic-webview": "^4.2.1",

View File

@ -1,16 +1,33 @@
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { PreloadAllModules, RouterModule, Routes } from '@angular/router'; import { PreloadAllModules, RouterModule, Routes } from '@angular/router';
import { LoginPage } from './login/login.page';
const routes: Routes = [ const routes: Routes = [
{ {
path: '', path: 'login',
component: LoginPage
},
{
path: 'tabs',
loadChildren: () => import('./tabs/tabs.module').then(m => m.TabsPageModule) loadChildren: () => import('./tabs/tabs.module').then(m => m.TabsPageModule)
}, },
{ {
path: 'view-evento', path: 'view-evento',
loadChildren: () => import('./view-evento/view-evento.module').then( m => m.ViewEventoPageModule) loadChildren: () => import('./view-evento/view-evento.module').then( m => m.ViewEventoPageModule)
}, },
{
path: 'galeriamodal',
loadChildren: () => import('./galeriamodal/galeriamodal.module').then( m => m.GaleriamodalPageModule)
},
{
path:'',
redirectTo: 'tabs',
pathMatch: 'full'
},
]; ];

View File

@ -5,16 +5,17 @@ import { ReactiveFormsModule } from '@angular/forms';
import { IonicModule, IonicRouteStrategy } from '@ionic/angular'; import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx'; import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx'; import { StatusBar } from '@ionic-native/status-bar/ngx';
import { AppRoutingModule } from './app-routing.module'; import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component'; import { AppComponent } from './app.component';
import { PerfilDiscotecaPage } from './perfil-discoteca/perfil-discoteca.page'; import { PerfilDiscotecaPage } from './perfil-discoteca/perfil-discoteca.page';
import { PromptEventoPage} from './prompt-evento/prompt-evento.page' import { PromptEventoPage} from './prompt-evento/prompt-evento.page'
import { GaleriamodalPageModule } from './galeriamodal/galeriamodal.module';
import { LoginPage } from './login/login.page';
@NgModule({ @NgModule({
declarations: [AppComponent, PerfilDiscotecaPage, PromptEventoPage], declarations: [AppComponent, PerfilDiscotecaPage, PromptEventoPage, LoginPage],
entryComponents: [], entryComponents: [],
imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule, ReactiveFormsModule], imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule, ReactiveFormsModule, GaleriamodalPageModule],
providers: [ providers: [
StatusBar, StatusBar,
SplashScreen, SplashScreen,

View File

@ -0,0 +1,17 @@
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { GaleriamodalPage } from './galeriamodal.page';
const routes: Routes = [
{
path: '',
component: GaleriamodalPage
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
})
export class GaleriamodalPageRoutingModule {}

View File

@ -0,0 +1,20 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { IonicModule } from '@ionic/angular';
import { GaleriamodalPageRoutingModule } from './galeriamodal-routing.module';
import { GaleriamodalPage } from './galeriamodal.page';
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
GaleriamodalPageRoutingModule
],
declarations: [GaleriamodalPage]
})
export class GaleriamodalPageModule {}

View File

@ -0,0 +1,15 @@
<ion-content fullscreen>
<ion-button (click)="close()">
<ion-icon name="close" slot="start"></ion-icon>
</ion-button>
<ion-slide>
<img src="{{foto}}">
</ion-slide>
<ion-button (click)="borrar()">
<ion-icon name="trash-outline"></ion-icon>
</ion-button>
</ion-content>

View File

@ -0,0 +1,4 @@
ion-content {
background: rgba(0, 0, 0, 0.589)
}

View File

@ -0,0 +1,24 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { IonicModule } from '@ionic/angular';
import { GaleriamodalPage } from './galeriamodal.page';
describe('GaleriamodalPage', () => {
let component: GaleriamodalPage;
let fixture: ComponentFixture<GaleriamodalPage>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ GaleriamodalPage ],
imports: [IonicModule.forRoot()]
}).compileComponents();
fixture = TestBed.createComponent(GaleriamodalPage);
component = fixture.componentInstance;
fixture.detectChanges();
}));
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,36 @@
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { ModalController, NavParams } from '@ionic/angular';
import { Tab1Service } from '../tab1/tab1.service';
@Component({
selector: 'app-galeriamodal',
templateUrl: './galeriamodal.page.html',
styleUrls: ['./galeriamodal.page.scss'],
})
export class GaleriamodalPage implements OnInit {
foto: string;
sliderOpts = {
}
constructor(private navParams: NavParams, private modalController: ModalController, private tab1Service: Tab1Service,
private router: Router) { }
ngOnInit() {
this.foto = this.navParams.get('foto');
}
borrar(){
let index = this.tab1Service.galeria.indexOf('foto');
this.tab1Service.galeria.slice[index];
this.close();
}
close(){
this.modalController.dismiss();
}
}

View File

@ -0,0 +1,16 @@
import { TestBed } from '@angular/core/testing';
import { LoginService } from './login.service';
describe('LoginService', () => {
let service: LoginService;
beforeEach(() => {
TestBed.configureTestingModule({});
service = TestBed.inject(LoginService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
});

9
src/app/login.service.ts Normal file
View File

@ -0,0 +1,9 @@
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class LoginService {
constructor() { }
}

View File

@ -0,0 +1,27 @@
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { LoginPage } from './login.page';
const routes: Routes = [
{
path: '',
component: LoginPage,
},
{
path: 'tabs',
loadChildren: () => import('../tabs/tabs.module').then(m => m.TabsPageModule)
},
{
path: '',
redirectTo: 'login'
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
})
export class LoginPageRoutingModule {}

View File

@ -0,0 +1,17 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { IonicModule } from '@ionic/angular';
import { LoginPageRoutingModule } from './login-routing.module';
import { LoginPage } from './login.page';
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
LoginPageRoutingModule
],
declarations: [LoginPage]
})
export class LoginPageModule {}

View File

@ -0,0 +1,11 @@
<ion-header>
<ion-toolbar>
<ion-title>Login</ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
<ion-button (click)="login()">
Login
</ion-button>
</ion-content>

View File

View File

@ -0,0 +1,24 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { IonicModule } from '@ionic/angular';
import { LoginPage } from './login.page';
describe('LoginPage', () => {
let component: LoginPage;
let fixture: ComponentFixture<LoginPage>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ LoginPage ],
imports: [IonicModule.forRoot()]
}).compileComponents();
fixture = TestBed.createComponent(LoginPage);
component = fixture.componentInstance;
fixture.detectChanges();
}));
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,20 @@
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
@Component({
selector: 'app-login',
templateUrl: './login.page.html',
styleUrls: ['./login.page.scss'],
})
export class LoginPage implements OnInit {
constructor(private router: Router) { }
ngOnInit() {
}
login(){
this.router.navigate(['/tabs']);
}
}

View File

@ -7,14 +7,11 @@
</ion-header> </ion-header>
<ion-content [fullscreen]="true"> <ion-content [fullscreen]="true">
<ion-header collapse="condense">
<ion-toolbar>
<ion-title class="titulo" size="large">Mi Perfil</ion-title>
</ion-toolbar>
</ion-header>
<ion-grid>
<div class='fotoPerfil'> <div class='fotoPerfil'>
<ion-grid>
<ion-row> <ion-row>
<ion-col> <ion-col>
<ion-img class="fotoPerfil" width="100%" height="100%" [src]='fotoSrc' alt='barraquinha'></ion-img> <ion-img class="fotoPerfil" width="100%" height="100%" [src]='fotoSrc' alt='barraquinha'></ion-img>
@ -55,17 +52,20 @@
<div [contentEditable]='editEnabled'>{{localizacion}}</div> <div [contentEditable]='editEnabled'>{{localizacion}}</div>
</div> </div>
</ion-col> </ion-col>
<ion-col> <ion-col>
<div class="galeria"> <div class="galeria">
Galería de Fotos Galería de Fotos
<input type="file" (change)="loadImageFromDevice($event)" id="file-input-galeria" accept="image/png, image/jpeg"> <input type="file" (change)="loadImageFromDevice($event)" id="file-input-galeria" accept="image/png, image/jpeg">
<ion-slides (ionDrag)="onSlideChanged()"> <ion-slides (ionDrag)="onSlideChanged()" [options]="sliderOpts">
<ion-slide *ngFor="let foto of galeriaFotos"> <ion-slide *ngFor="let foto of galeriaFotos">
<div class="fotoGaleria"><img src="{{foto}}"> <div class="fotoGaleria"><img src="{{foto}}" tappable (click)="openPreview(foto)">
<div class="botonesHidden" id="botonesHidden3">
<ion-button (click)="borrarDeGaleria()"> <ion-button (click)="borrarDeGaleria()">
<ion-icon name="trash-outline"></ion-icon> <ion-icon name="trash-outline"></ion-icon>
</ion-button> </ion-button>
</div> </div>
</div>
</ion-slide> </ion-slide>
</ion-slides> </ion-slides>
</div> </div>
@ -92,6 +92,7 @@
{{evento.fecha}} · {{evento.fecha}} ·
<ion-icon name="cash-outline"></ion-icon> <ion-icon name="cash-outline"></ion-icon>
{{evento.precio1}},{{evento.precio2}} {{evento.precio1}},{{evento.precio2}}
<ion-button (click)="editarEvento(evento);$event.stopPropagation();"><ion-icon name="pencil-outline"></ion-icon></ion-button>
</div> </div>
<div class="eventoDesc"> <div class="eventoDesc">
{{evento.descripcion}} {{evento.descripcion}}
@ -101,13 +102,13 @@
</ion-list> </ion-list>
</div> </div>
</ion-row> </ion-row>
</ion-grid>
</div> </div>
</ion-grid>
</ion-content> </ion-content>

View File

@ -7,13 +7,11 @@
*{ *{
padding: 5px; padding: 5px;
}
.titulo{
font: "arial";
}
.fotoPerfil{
display: block; display: block;
margin: auto;
}
.fotoPerfil{
text-align: end; text-align: end;
max-width: 800px; max-width: 800px;
max-height: auto; max-height: auto;
@ -76,5 +74,5 @@
} }
ion-slides { ion-slides {
height: 100%; height: 200px;
} }

View File

@ -1,13 +1,13 @@
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { NodeCompatibleEventEmitter } from 'rxjs/internal/observable/fromEvent'; import { Tab1Service } from '../tab1/tab1.service';
import { Tab1Service } from '../tab1/tab1.service' import { IonSlides, ModalController} from '@ionic/angular';
import { Discoteca } from '../discoteca'
import { IonSlides} from '@ionic/angular';
import { AlertController } from '@ionic/angular'; import { AlertController } from '@ionic/angular';
import { ViewChild } from '@angular/core'; import { ViewChild } from '@angular/core';
import { Evento } from '../evento'; import { Evento } from '../evento';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
import { THIS_EXPR } from '@angular/compiler/src/output/output_ast'; import { THIS_EXPR } from '@angular/compiler/src/output/output_ast';
import { GaleriamodalPage } from '../galeriamodal/galeriamodal.page';
import { stringify } from '@angular/compiler/src/util';
@Component({ @Component({
selector: 'app-perfil-discoteca', selector: 'app-perfil-discoteca',
@ -29,8 +29,13 @@ export class PerfilDiscotecaPage implements OnInit {
currentIndex: number; currentIndex: number;
eventos: Evento[]; eventos: Evento[];
alertCtrl: AlertController; alertCtrl: AlertController;
sliderOpts = {
slidesPerView: 1.5,
centeredSlides: true,
spaceBetween: 20,
};
constructor(private tab1Service: Tab1Service, private router: Router) { constructor(private tab1Service: Tab1Service, private router: Router, private modalController: ModalController) {
} }
@ -45,9 +50,9 @@ export class PerfilDiscotecaPage implements OnInit {
this.getEventos(); this.getEventos();
this.editDisabled="true"; this.editDisabled="true";
this.editEnabled="false"; this.editEnabled="false";
this.fotoSrc = '../assets/barraca.jpg'; this.fotoSrc = '../assets/img/barraca.jpg';
this.fotoLoaded = this.fotoSrc; this.fotoLoaded = this.fotoSrc;
this.galeriaFotos = []; this.galeriaFotos = this.tab1Service.galeria;
} }
@ -73,7 +78,8 @@ export class PerfilDiscotecaPage implements OnInit {
} }
addGaleria(){ addGaleria(){
this.galeriaFotos.push(this.someURL); this.tab1Service.galeria.push(this.someURL);
this.galeriaFotos = this.tab1Service.galeria;
this.slides.update(); this.slides.update();
@ -159,6 +165,7 @@ export class PerfilDiscotecaPage implements OnInit {
} }
addEvento() { addEvento() {
this.tab1Service.editarEvento=false;
this.router.navigate(['/tabs/tab1/prompt-evento']); this.router.navigate(['/tabs/tab1/prompt-evento']);
} }
@ -166,6 +173,21 @@ mostrarEvento(evento: Evento){
this.tab1Service.eventoIndex = this.eventos.indexOf(evento); this.tab1Service.eventoIndex = this.eventos.indexOf(evento);
this.router.navigate(['/tabs/tab1/view-evento']); this.router.navigate(['/tabs/tab1/view-evento']);
} }
editarEvento(evento: Evento){
this.tab1Service.eventoIndex = this.eventos.indexOf(evento);
this.tab1Service.editarEvento = true;
this.router.navigate(['/tabs/tab1/prompt-evento']);
}
openPreview(foto: string){
this.modalController.create({
component: GaleriamodalPage,
componentProps: {
foto: foto
}
}).then(modal=>modal.present());
}
} }

View File

@ -7,7 +7,9 @@ const routes: Routes = [
{ {
path: '', path: '',
component: PromptEventoPage component: PromptEventoPage
} },
]; ];
@NgModule({ @NgModule({

View File

@ -7,33 +7,50 @@
<ion-content> <ion-content>
<form [formGroup]="eventoForm" (ngSubmit)="onSubmit()"> <form [formGroup]="eventoForm" (ngSubmit)="onSubmit()">
<div class="campoInput"> <ion-item>
<label> <label>
Nombre del evento: Nombre del evento:
<input type="text" formControlName = "nombre"> <input type="text" id="nombre" formControlName = "nombre">
</label> </label>
</div> <span
*ngIf="nombre.errors.required && (nombre.touched||submitted)">
Tu evento necesita un nombre
</span>
</ion-item>
<div class="campoInput"> <ion-item>
<label> <label>
Fecha: Fecha:
<ion-datetime displayFormat="DD/MM, HH:mm"placeholder="Elegir Fecha" formControlName="fecha"></ion-datetime> <ion-datetime displayFormat="DD/MM, HH:mm"placeholder="Elegir Fecha" formControlName="fecha"></ion-datetime>
</label> </label>
</div> <span
*ngIf="fecha.errors.required && submitted">
Tu evento necesita una fecha
</span>
</ion-item>
<div class="campoInput">
<label>
Descripción:
<input type="text" formControlName = "descripcion">
</label>
</div>
<div class="campoInput"> <ion-item>
<label> <label>
Precio: Precio:
<input type="number" formControlName = "precio1"><label>, </label><input type="number" formControlName = "precio2"> <input type="number" formControlName = "precio1"><label>, </label><input type="number" formControlName = "precio2">
</label> </label>
</div> <span
*ngIf="precio1.errors.required && (precio1.touched||submitted)">
Tu evento necesita un precio (puede ser 0)
</span>
</ion-item>
<ion-item>
<label>
Descripción:
<textarea formControlName = "descripcion" rows="10"></textarea>
</label>
<span
*ngIf="descripcion.errors.required && (descripcion.touched||submitted)">
¡Dale una descripción a tu evento!
</span>
</ion-item>
<button type="submit">GUARDAR</button> <button type="submit">GUARDAR</button>
</form> </form>

View File

@ -1,12 +1,33 @@
*{ *{
--ion-text-color: #000000; --ion-text-color: #fbffc4;
padding: 5px; padding: 15px;
letter-spacing: 2px; letter-spacing: 2px;
} }
.campoInput{ ion-item{
display: block; text-align: center;
color: wheat,
} }
input{
display: inline-block;
text-align: left;
color: black;
}
label{
display: inline-block;
text-align: left;
color: wheat,
}
textarea{
color: black;
}
span{
color: red;
font-style: italic;
}

View File

@ -1,35 +1,43 @@
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { FormControl, FormGroup } from '@angular/forms'; import { FormControl, FormGroup, Validators } from '@angular/forms';
import { Tab1Service } from '../tab1/tab1.service'; import { Tab1Service } from '../tab1/tab1.service';
import { Evento } from '../evento'; import { Evento } from '../evento';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
import { FormBuilder } from '@angular/forms';
@Component({ @Component({
selector: 'app-prompt-evento', selector: 'app-prompt-evento',
templateUrl: './prompt-evento.page.html', templateUrl: './prompt-evento.page.html',
styleUrls: ['./prompt-evento.page.scss'], styleUrls: ['./prompt-evento.page.scss'],
}) })
export class PromptEventoPage{ export class PromptEventoPage implements OnInit{
submitted = false;
eventoForm = new FormGroup({ eventoForm = new FormGroup({
nombre: new FormControl(''), nombre: new FormControl('', Validators.required),
fecha: new FormControl(''), fecha: new FormControl('', Validators.required),
hora: new FormControl(''), precio1: new FormControl('', Validators.required),
precio1: new FormControl(''), precio2: new FormControl('', Validators.required),
precio2: new FormControl(''), descripcion: new FormControl('', Validators.required),
descripcion: new FormControl('')
}); });
eventos: Evento[]; eventos: Evento[];
constructor(private tab1Service: Tab1Service, private router: Router) { constructor(private tab1Service: Tab1Service, private router: Router) {
this.eventos = [];
} }
ngOnInit(){
if (this.tab1Service.editarEvento==true){
this.eventoForm = this.tab1Service.eventoForms[this.tab1Service.eventoIndex];
}
}
onSubmit(){ onSubmit(){
this.submitted = true;
if (this.eventoForm.valid){
let evento = new Evento(); let evento = new Evento();
this.asignarEvento(evento); this.asignarEvento(evento);
this.router.navigate(['/tabs/tab1/perfil-discoteca']); this.router.navigate(['/tabs']);
}
} }
asignarEvento(evento: Evento){ asignarEvento(evento: Evento){
evento.setNombre(this.eventoForm.get('nombre').value); evento.setNombre(this.eventoForm.get('nombre').value);
@ -41,7 +49,40 @@ export class PromptEventoPage{
//evento.setHora(evento.getFecha()); transformar en dia y hora //evento.setHora(evento.getFecha()); transformar en dia y hora
if (!this.tab1Service.eventos){ if (!this.tab1Service.eventos){
this.tab1Service.initEventos();} this.tab1Service.initEventos();}
if(!this.tab1Service.eventoForms){
this.tab1Service.initEventoForms();}
if(this.tab1Service.editarEvento==true){
this.tab1Service.eventos[this.tab1Service.eventoIndex] = evento;
this.tab1Service.eventoForms[this.tab1Service.eventoIndex] = this.eventoForm;
}
else{
this.tab1Service.eventos.push(evento); this.tab1Service.eventos.push(evento);
this.tab1Service.eventoForms.push(this.eventoForm);}
}
get nombre(){
return this.eventoForm.get('nombre');
}
get fecha(){
return this.eventoForm.get('fecha');
}
get hora(){
return this.eventoForm.get('hora');
}
get precio1() {
return this.eventoForm.get('precio1');
}
get precio2() {
return this.eventoForm.get('precio2');
}
get descripcion(){
return this.eventoForm.get('descripcion');
} }

View File

@ -6,17 +6,19 @@ import { PromptEventoPage } from '../prompt-evento/prompt-evento.page'
import { ViewEventoPage } from '../view-evento/view-evento.page' import { ViewEventoPage } from '../view-evento/view-evento.page'
const routes: Routes = [ const routes: Routes = [
{
path: '',
redirectTo: 'perfil-discoteca',
pathMatch: 'full',
},
{ {
path: 'perfil-discoteca', path: 'perfil-discoteca',
component: PerfilDiscotecaPage component: PerfilDiscotecaPage
}, },
{
path: '',
redirectTo: 'perfil-discoteca',
pathMatch: 'full,'
},
{ {
path: 'prompt-evento', path: 'prompt-evento',
component: PromptEventoPage component: PromptEventoPage

View File

@ -2,8 +2,8 @@ import { Injectable, OnInit } from '@angular/core';
import { stringify } from 'querystring'; import { stringify } from 'querystring';
import { Tab1Page } from './tab1.page' import { Tab1Page } from './tab1.page'
import { Discoteca } from '../discoteca' import { Discoteca } from '../discoteca'
import { Galeria } from '../galeria';
import { Evento } from '../evento'; import { Evento } from '../evento';
import { FormControl, FormGroup } from '@angular/forms';
import { NumericValueAccessor } from '@ionic/angular'; import { NumericValueAccessor } from '@ionic/angular';
@ -13,9 +13,11 @@ import { NumericValueAccessor } from '@ionic/angular';
export class Tab1Service implements OnInit{ export class Tab1Service implements OnInit{
discoteca: Discoteca; discoteca: Discoteca;
galeria: Galeria; galeria: string[];
eventos: Evento[]; eventos: Evento[];
eventoForms: FormGroup[];
eventoIndex: number; eventoIndex: number;
editarEvento: boolean;
constructor() { constructor() {
@ -30,9 +32,9 @@ export class Tab1Service implements OnInit{
this.discoteca.setNombre('Barraca'); this.discoteca.setNombre('Barraca');
this.discoteca.setTelefono(666666666); this.discoteca.setTelefono(666666666);
this.discoteca.setLocalizacion('Calle del Barquillo'); this.discoteca.setLocalizacion('Calle del Barquillo');
this.galeria = new Galeria(); this.galeria = [];
this.initEventos(); this.initEventos();
this.galeria.setDiscoteca(this.discoteca.getNombre()); this.editarEvento = false;
} }
getNombre(): string{ getNombre(): string{
@ -58,6 +60,10 @@ export class Tab1Service implements OnInit{
this.eventos = []; this.eventos = [];
} }
initEventoForms(): void{
this.eventoForms = [];
}
getEventobyIndex(eventoIndex: number){ getEventobyIndex(eventoIndex: number){
return this.eventos[eventoIndex]; return this.eventos[eventoIndex];
} }

View File

@ -4,12 +4,12 @@ import { TabsPage } from './tabs.page';
const routes: Routes = [ const routes: Routes = [
{ {
path: 'tabs', path: '',
component: TabsPage, component: TabsPage,
children: [ children: [
{ {
path: 'tab1', path: 'tab1',
loadChildren: () => import('../tab1/tab1.module').then(m => m.Tab1PageModule) loadChildren: () => import('../tab1/tab1.module').then(m => m.Tab1PageModule),
}, },
{ {
path: 'tab2', path: 'tab2',
@ -21,16 +21,14 @@ const routes: Routes = [
}, },
{ {
path: '', path: '',
redirectTo: '/tabs/tab1', redirectTo: 'tab1',
pathMatch: 'full' pathMatch: 'full'
}, },
] ]
}, },
{ {
path: '', path: '',
redirectTo: '/tabs/tab1', redirectTo: 'tabs',
pathMatch: 'full' pathMatch: 'full'
} }
]; ];

View File

@ -5,5 +5,22 @@
</ion-header> </ion-header>
<ion-content> <ion-content>
<label>{{evento.nombre}}</label> <ion-grid>
<div class="evento">
<ion-row>
<div class="eventoHeader">
{{evento.nombre}} ·
<ion-icon name="calendar-outline"></ion-icon>
{{evento.fecha}} ·
<ion-icon name="cash-outline"></ion-icon>
{{evento.precio1}},{{evento.precio2}}
</div>
</ion-row>
<ion-row>
<div class="eventoDesc">
{{evento.descripcion}}
</div>
</ion-row>
</div>
</ion-grid>
</ion-content> </ion-content>

View File

@ -0,0 +1,17 @@
.eventoHeader{
font-weight: bold;
}
.eventoDesc{
color: white;
margin-top: 20px;
}
.evento{
display: block;
max-width: 800px;
max-height: auto;
margin: auto;
text-align: justify;
}

View File

Before

Width:  |  Height:  |  Size: 87 KiB

After

Width:  |  Height:  |  Size: 87 KiB