From c9755bee7ca912ff34466ba3a53e08be66e11019 Mon Sep 17 00:00:00 2001
From: Jim Pollaro <30908497+pollaro@users.noreply.github.com>
Date: Thu, 12 Jul 2018 15:07:08 -0500
Subject: [PATCH 01/15] Logout Changes #9915 (#10022)
* Added session check before route changes, but express isn't finding route
* Added a logout component. Changed route to logout on server. Typing 'logout' in URL will logout of Vue + Express
* Removed commented text from previous version
* Updated logout function to comply with formatting and eliminate unused blocks
* Added package-lock.json back
* package-lock.json
* recreated package-lock file
* fix(auth): allow logout from direct visit to /logout path
* fix(merge): clean up more misc changes
* fix(merge): remove extra file
---
webpack/config/index.js | 2 +-
website/client/components/auth/logout.vue | 13 +++++++++++++
website/client/router.js | 2 ++
website/client/store/actions/auth.js | 2 +-
website/server/controllers/top-level/auth.js | 4 ++--
5 files changed, 19 insertions(+), 4 deletions(-)
create mode 100644 website/client/components/auth/logout.vue
diff --git a/webpack/config/index.js b/webpack/config/index.js
index 463e6f3028..35fa37adc8 100644
--- a/webpack/config/index.js
+++ b/webpack/config/index.js
@@ -62,7 +62,7 @@ module.exports = {
target: DEV_BASE_URL,
changeOrigin: true,
},
- '/logout': {
+ '/logout-server': {
target: DEV_BASE_URL,
changeOrigin: true,
},
diff --git a/website/client/components/auth/logout.vue b/website/client/components/auth/logout.vue
new file mode 100644
index 0000000000..b826794272
--- /dev/null
+++ b/website/client/components/auth/logout.vue
@@ -0,0 +1,13 @@
+
diff --git a/website/client/router.js b/website/client/router.js
index bd74858d2c..6368e39744 100644
--- a/website/client/router.js
+++ b/website/client/router.js
@@ -27,6 +27,7 @@ const PrivacyPage = () => import(/* webpackChunkName: "static" */'./components/s
const TermsPage = () => import(/* webpackChunkName: "static" */'./components/static/terms');
const RegisterLoginReset = () => import(/* webpackChunkName: "auth" */'./components/auth/registerLoginReset');
+const Logout = () => import(/* webpackChunkName: "auth" */'./components/auth/logout');
// User Pages
// const StatsPage = () => import(/* webpackChunkName: "user" */'./components/userMenu/stats');
@@ -105,6 +106,7 @@ const router = new VueRouter({
routes: [
{ name: 'register', path: '/register', component: RegisterLoginReset, meta: {requiresLogin: false} },
{ name: 'login', path: '/login', component: RegisterLoginReset, meta: {requiresLogin: false} },
+ { name: 'logout', path: '/logout', component: Logout },
{ name: 'resetPassword', path: '/reset-password', component: RegisterLoginReset, meta: {requiresLogin: false} },
{ name: 'tasks', path: '/', component: UserTasks },
{
diff --git a/website/client/store/actions/auth.js b/website/client/store/actions/auth.js
index d5f8ebb618..02fd27d286 100644
--- a/website/client/store/actions/auth.js
+++ b/website/client/store/actions/auth.js
@@ -68,5 +68,5 @@ export async function socialAuth (store, params) {
export function logout () {
localStorage.removeItem(LOCALSTORAGE_AUTH_KEY);
localStorage.removeItem(LOCALSTORAGE_SOCIAL_AUTH_KEY);
- window.location.href = '/logout';
+ window.location.href = '/logout-server';
}
diff --git a/website/server/controllers/top-level/auth.js b/website/server/controllers/top-level/auth.js
index bfda8ab7e2..f7fd76fe2b 100644
--- a/website/server/controllers/top-level/auth.js
+++ b/website/server/controllers/top-level/auth.js
@@ -5,7 +5,7 @@ let api = {};
// Internal authentication routes
// Set a new password after having requested a password reset (GET route to input password)
-api.resetPasswordSetNewOne = {
+api.resetPasswordSetNewOne = {
method: 'GET',
url: '/static/user/auth/local/reset-password-set-new-one',
runCron: false,
@@ -24,7 +24,7 @@ api.resetPasswordSetNewOne = {
// Logout the user from the website.
api.logout = {
method: 'GET',
- url: '/logout',
+ url: '/logout-server',
async handler (req, res) {
if (req.logout) req.logout(); // passportjs method
req.session = null;
From 535ee2b2a706ac282d8f9ff069b8b1c92cc63ca4 Mon Sep 17 00:00:00 2001
From: Brian Fenton
Date: Thu, 12 Jul 2018 15:07:49 -0500
Subject: [PATCH 02/15] Adding hand cursor to FAQ headings, and ability to
address answers via URL hash (#10260)
* Turning H2s into anchors to add hand cursor and to create addressable page fragments
adding ref to target individual entries
adding scroll handler to make sure expanded result is in view.
* combining click handler directives as per CR
* changing question display to always render, then hide via CSS, vs only render when state changes.
* updating pug template to include heading in each URL fragment
* simplifying logic & moving to vue-bootstrap accordion since multiple open panels is not required
* adding pointer cursor to FAQ headings
* moving initial hash checking to data prop instead of mounted so it does not trigger oddities on on hash change (re-mount)
* using new pug HTML for bootstrap collapse
* removing extraneous markup
* updating styling to match existing page
* removing fancier than necessary markup, and attendant styles
* using more standard event property
---
website/client/components/static/faq.vue | 50 +++++++++++++++++-------
1 file changed, 35 insertions(+), 15 deletions(-)
diff --git a/website/client/components/static/faq.vue b/website/client/components/static/faq.vue
index a26e1260cd..e2ce08aa0c 100644
--- a/website/client/components/static/faq.vue
+++ b/website/client/components/static/faq.vue
@@ -1,18 +1,36 @@
- .container-fluid
+ .container-fluid(role="tablist")
.row
.col-12.col-md-6.offset-md-3
- h1 {{ $t('frequentlyAskedQuestions') }}
- .faq-question(v-for='(heading, index) in headings')
- h2.accordion(@click='setActivePage(heading)') {{ $t(`faqQuestion${index}`) }}
- div(v-if='pageState[heading]', v-markdown="$t('webFaqAnswer' + index, replacements)")
+ h1#faq-heading {{ $t('frequentlyAskedQuestions') }}
+ .faq-question(v-for='(heading, index) in headings', :key="index")
+ h2(role="tab", v-b-toggle="heading", @click="handleClick($event)", variant="info") {{ $t(`faqQuestion${index}`) }}
+ b-collapse(:id="heading", :visible="isVisible(heading)", accordion="faq", role="tabpanel")
+ div.card-body(v-markdown="$t('webFaqAnswer' + index, replacements)")
hr
p(v-markdown="$t('webFaqStillNeedHelp')")
+
diff --git a/website/client/components/groups/membersModal.vue b/website/client/components/groups/membersModal.vue
index c9ca4ca013..1ce8bc98af 100644
--- a/website/client/components/groups/membersModal.vue
+++ b/website/client/components/groups/membersModal.vue
@@ -53,6 +53,9 @@ div
span.dropdown-icon-item
.svg-icon.inline(v-html="icons.removeIcon")
span.text {{$t('removeManager2')}}
+ b-dropdown-item(@click='viewProgress(member)')
+ span.dropdown-icon-item
+ span.text {{ $t('viewProgress') }}
.row(v-if='isLoadMoreAvailable')
.col-12.text-center
button.btn.btn-secondary(@click='loadMoreMembers()') {{ $t('loadMore') }}
@@ -475,6 +478,11 @@ export default {
groupData.leader = member;
this.$root.$emit('updatedGroup', groupData);
},
+ viewProgress (member) {
+ this.$root.$emit('habitica:challenge:member-progress', {
+ progressMemberId: member._id,
+ });
+ },
},
};
diff --git a/website/common/locales/en/challenge.json b/website/common/locales/en/challenge.json
index 39d0342263..2953470e5f 100644
--- a/website/common/locales/en/challenge.json
+++ b/website/common/locales/en/challenge.json
@@ -132,6 +132,7 @@
"locationRequired": "Location of challenge is required ('Add to')",
"categoiresRequired": "One or more categories must be selected",
"viewProgressOf": "View Progress Of",
+ "viewProgress": "View Progress",
"selectMember": "Select Member",
"confirmKeepChallengeTasks": "Do you want to keep challenge tasks?",
"selectParticipant": "Select a Participant"
From 8eac8732c5f7817d81e23ca517676c0760880a7a Mon Sep 17 00:00:00 2001
From: Matteo Pagliazzi
Date: Mon, 16 Jul 2018 12:02:37 +0200
Subject: [PATCH 15/15] fix(tasks): do not load completed todos if not
necessary
---
website/client/components/tasks/column.vue | 1 +
1 file changed, 1 insertion(+)
diff --git a/website/client/components/tasks/column.vue b/website/client/components/tasks/column.vue
index 02693cbac3..eef611ca7a 100644
--- a/website/client/components/tasks/column.vue
+++ b/website/client/components/tasks/column.vue
@@ -450,6 +450,7 @@ export default {
if (this.type !== 'todo') return;
this.$root.$on('habitica::resync-requested', () => {
+ if (this.activeFilter.label !== 'complete2') return;
this.loadCompletedTodos(true);
});
},