From c4143c78057d13b07c75c3e4954a8a235ec52872 Mon Sep 17 00:00:00 2001 From: Verabird Date: Mon, 22 Dec 2014 15:19:53 -0500 Subject: [PATCH 1/8] added variable for date display and checking line ending issue --- views/shared/tasks/task.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/shared/tasks/task.jade b/views/shared/tasks/task.jade index 0466ff91e1..e8050f1f90 100644 --- a/views/shared/tasks/task.jade +++ b/views/shared/tasks/task.jade @@ -4,7 +4,7 @@ li(bindonce='list', id='task-{{::task.id}}', ng-repeat='task in obj[list.type+"s // Due Date span(ng-if='task.type=="todo" && task.date') - span(ng-class='{"label label-danger":(moment(task.date).isBefore(_today, "days") && !task.completed)}') {{moment(task.date).format('MM/DD')}} + span(ng-class='{"label label-danger":(moment(task.date).isBefore(_today, "days") && !task.completed)}') {{moment(task.date).format(env.t('shortdate'))}} // Streak |   span(ng-show='task.streak') {{task.streak}}  From 42cb93c67313f90be3de84dc8f0201603d2abb67 Mon Sep 17 00:00:00 2001 From: Verabird Date: Mon, 22 Dec 2014 22:23:11 -0500 Subject: [PATCH 2/8] Add variables for medium-length date display --- views/shared/modals/members.jade | 4 ++-- views/shared/tasks/task.jade | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index 595929c819..ba0f1449aa 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -15,12 +15,12 @@ script(type='text/ng-template', id='modals/member.html') |  =env.t('memberSince') |  - | {{::timestamp(profile.auth.timestamps.created)}} - + | {{::profile.auth.timestamps.created | date:env.t('mediumdate')}} - li(ng-show='::profile.auth.timestamps.loggedin') |  =env.t('lastLoggedIn') |  - | {{::timestamp(profile.auth.timestamps.loggedin)}} - + | {{::profile.auth.timestamps.loggedin | date:env.t('mediumdate')}} - h3=env.t('stats') .label.label-info {{:: {warrior:env.t("warrior"), wizard:env.t("mage"), rogue:env.t("rogue"), healer:env.t("healer")}[profile.stats.class] }} include ../profiles/stats diff --git a/views/shared/tasks/task.jade b/views/shared/tasks/task.jade index e8050f1f90..9a6a7e8561 100644 --- a/views/shared/tasks/task.jade +++ b/views/shared/tasks/task.jade @@ -184,7 +184,7 @@ li(bindonce='list', id='task-{{::task.id}}', ng-repeat='task in obj[list.type+"s // if Todos, the due date fieldset.option-group(ng-if='task.type=="todo" && !task.challenge.id') legend.option-title=env.t('dueDate') - input.option-content.datepicker(type='text', datepicker-popup='MM/dd/yyyy', ng-model='task.date', is-open='datepickerOpened', ng-click='datepickerOpened = true') + input.option-content.datepicker(type='text', datepicker-popup=env.t('mediumdate'), ng-model='task.date', is-open='datepickerOpened', ng-click='datepickerOpened = true') // Tags fieldset.option-group(ng-if='!$state.includes("options.social.challenges")') From 03f12a371855138ae14bfe401e0058d39a4b00e4 Mon Sep 17 00:00:00 2001 From: Verabird Date: Wed, 24 Dec 2014 22:18:50 -0500 Subject: [PATCH 3/8] Make it possible to choose between MM/dd and dd/MM date format --- public/js/controllers/settingsCtrl.js | 7 +++++++ src/models/user.js | 1 + views/options/settings.jade | 6 ++++++ views/options/social/chat-message.jade | 2 +- views/shared/modals/members.jade | 4 ++-- views/shared/tasks/task.jade | 5 +++-- 6 files changed, 20 insertions(+), 5 deletions(-) diff --git a/public/js/controllers/settingsCtrl.js b/public/js/controllers/settingsCtrl.js index 0c0123d1f3..fb1efe6a12 100644 --- a/public/js/controllers/settingsCtrl.js +++ b/public/js/controllers/settingsCtrl.js @@ -65,6 +65,13 @@ habitrpg.controller('SettingsCtrl', User.set({'preferences.language': $scope.language.code}); } + $scope.availableFormats = ['MM/dd/yyyy','dd/MM/yyyy','yyyy/MM/dd']; + $scope.changeDateFormat = function(){ + + var dateFormat= User.user.preferences.dateFormat; + User.set({'preferences.dateFormat': dateFormat}); + } + $scope.reroll = function(){ User.user.ops.reroll({}); $rootScope.$state.go('tasks'); diff --git a/src/models/user.js b/src/models/user.js index 3dbb7f0f29..a9527cd512 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -278,6 +278,7 @@ var UserSchema = new Schema({ automaticAllocation: Boolean, allocationMode: {type:String, enum: ['flat','classbased','taskbased'], 'default': 'flat'}, costume: Boolean, + dateFormat: {type: String, enum:['MM/dd/yyyy', 'dd/MM/yyyy', 'yyyy/MM/dd'], 'default': 'MM/dd/yyyy'}, sleep: {type: Boolean, 'default': false}, stickyHeader: {type: Boolean, 'default': true}, disableClasses: {type: Boolean, 'default': false}, diff --git a/views/options/settings.jade b/views/options/settings.jade index ef2727b4f6..85f731bd4c 100644 --- a/views/options/settings.jade +++ b/views/options/settings.jade @@ -36,6 +36,12 @@ script(type='text/ng-template', id='partials/options.settings.settings.html') br strong !=env.t('helpWithTranslation') + + .form-horizontal + h5=env.t('dateFormat') + select.form-control(ng-model='user.preferences.dateFormat', ng-options='DF for DF in availableFormats', ng-change='changeDateFormat()') + + .checkbox label input(type='checkbox', ng-click='hideHeader() ', ng-checked='user.preferences.hideHeader!==true') diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index 89ebc181e6..edfd3b476e 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -12,7 +12,7 @@ mixin chatMessages(inbox) // this invisible username label is here to push the message text far enough right that the visible label can be floated to this point without covering up any of the text markdown(ng-model='::message.text') | - - span.muted.time(from-now='::message.timestamp' tooltip="{{::message.timestamp | date:'short'}}") + span.muted.time(from-now='::message.timestamp' tooltip="{{::message.timestamp | date:user.preferences.dateFormat.concat(' HH:mm:ss')}}") unless inbox span a.label.label-default(ng-show='countExists(message.likes)', ng-class='{"label-success":message.likes[user._id]}', ng-click='likeChatMessage(group,message)') +{{countExists(message.likes)}} diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index ba0f1449aa..9f127f9f61 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -15,12 +15,12 @@ script(type='text/ng-template', id='modals/member.html') |  =env.t('memberSince') |  - | {{::profile.auth.timestamps.created | date:env.t('mediumdate')}} - + | {{::profile.auth.timestamps.created | date:user.preferences.dateFormat}} - li(ng-show='::profile.auth.timestamps.loggedin') |  =env.t('lastLoggedIn') |  - | {{::profile.auth.timestamps.loggedin | date:env.t('mediumdate')}} - + | {{::profile.auth.timestamps.loggedin | date:user.preferences.dateFormat}} - h3=env.t('stats') .label.label-info {{:: {warrior:env.t("warrior"), wizard:env.t("mage"), rogue:env.t("rogue"), healer:env.t("healer")}[profile.stats.class] }} include ../profiles/stats diff --git a/views/shared/tasks/task.jade b/views/shared/tasks/task.jade index 9a6a7e8561..6649113941 100644 --- a/views/shared/tasks/task.jade +++ b/views/shared/tasks/task.jade @@ -4,7 +4,8 @@ li(bindonce='list', id='task-{{::task.id}}', ng-repeat='task in obj[list.type+"s // Due Date span(ng-if='task.type=="todo" && task.date') - span(ng-class='{"label label-danger":(moment(task.date).isBefore(_today, "days") && !task.completed)}') {{moment(task.date).format(env.t('shortdate'))}} + span(ng-class='{"label label-danger":(moment(task.date).isBefore(_today, "days") && !task.completed)}') {{task.date | date:user.preferences.dateFormat.substr(0,5)}} + //{{::profile.auth.timestamps.created | date:user.preferences.dateFormat}} // Streak |   span(ng-show='task.streak') {{task.streak}}  @@ -184,7 +185,7 @@ li(bindonce='list', id='task-{{::task.id}}', ng-repeat='task in obj[list.type+"s // if Todos, the due date fieldset.option-group(ng-if='task.type=="todo" && !task.challenge.id') legend.option-title=env.t('dueDate') - input.option-content.datepicker(type='text', datepicker-popup=env.t('mediumdate'), ng-model='task.date', is-open='datepickerOpened', ng-click='datepickerOpened = true') + input.option-content.datepicker(type='text', datepicker-popup='{{user.preferences.dateFormat}}', ng-model='task.date', is-open='datepickerOpened', ng-click='datepickerOpened = true') // Tags fieldset.option-group(ng-if='!$state.includes("options.social.challenges")') From 13be267efbb340b6c8a4809358b5b2f73574bfed Mon Sep 17 00:00:00 2001 From: Verabird Date: Mon, 22 Dec 2014 15:19:53 -0500 Subject: [PATCH 4/8] added variable for date display and checking line ending issue --- views/shared/tasks/task.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/shared/tasks/task.jade b/views/shared/tasks/task.jade index f96b33cb57..5826fb6b3e 100644 --- a/views/shared/tasks/task.jade +++ b/views/shared/tasks/task.jade @@ -4,7 +4,7 @@ li(bindonce='list', id='task-{{::task.id}}', ng-repeat='task in obj[list.type+"s // Due Date span(ng-if='task.type=="todo" && task.date') - span(ng-class='{"label label-danger":(moment(task.date).isBefore(_today, "days") && !task.completed)}') {{moment(task.date).format('MM/DD')}} + span(ng-class='{"label label-danger":(moment(task.date).isBefore(_today, "days") && !task.completed)}') {{moment(task.date).format(env.t('shortdate'))}} // Streak |   span(ng-show='task.streak') {{task.streak}}  From e391fc04f0d0b508e47307d1679e111d636e8b5a Mon Sep 17 00:00:00 2001 From: Verabird Date: Mon, 22 Dec 2014 22:23:11 -0500 Subject: [PATCH 5/8] Add variables for medium-length date display --- views/shared/modals/members.jade | 4 ++-- views/shared/tasks/task.jade | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index 0255ab8e6d..b112fb059c 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -15,12 +15,12 @@ script(type='text/ng-template', id='modals/member.html') |  =env.t('memberSince') |  - | {{::timestamp(profile.auth.timestamps.created)}} - + | {{::profile.auth.timestamps.created | date:env.t('mediumdate')}} - li(ng-show='::profile.auth.timestamps.loggedin') |  =env.t('lastLoggedIn') |  - | {{::timestamp(profile.auth.timestamps.loggedin)}} - + | {{::profile.auth.timestamps.loggedin | date:env.t('mediumdate')}} - h3=env.t('stats') .label.label-info {{:: {warrior:env.t("warrior"), wizard:env.t("mage"), rogue:env.t("rogue"), healer:env.t("healer")}[profile.stats.class] }} include ../profiles/stats diff --git a/views/shared/tasks/task.jade b/views/shared/tasks/task.jade index 5826fb6b3e..29e5027cc7 100644 --- a/views/shared/tasks/task.jade +++ b/views/shared/tasks/task.jade @@ -190,7 +190,7 @@ li(bindonce='list', id='task-{{::task.id}}', ng-repeat='task in obj[list.type+"s // if Todos, the due date fieldset.option-group(ng-if='task.type=="todo" && !task.challenge.id') legend.option-title=env.t('dueDate') - input.option-content.datepicker(type='text', datepicker-popup='MM/dd/yyyy', ng-model='task.date', is-open='datepickerOpened', ng-click='datepickerOpened = true') + input.option-content.datepicker(type='text', datepicker-popup=env.t('mediumdate'), ng-model='task.date', is-open='datepickerOpened', ng-click='datepickerOpened = true') // Tags fieldset.option-group(ng-if='!$state.includes("options.social.challenges")') From 7297429888558745c71b104e8af22b0f5c02e61e Mon Sep 17 00:00:00 2001 From: Verabird Date: Wed, 24 Dec 2014 22:18:50 -0500 Subject: [PATCH 6/8] Make it possible to choose between MM/dd and dd/MM date format --- public/js/controllers/settingsCtrl.js | 7 +++++++ src/models/user.js | 1 + views/options/settings.jade | 6 ++++++ views/options/social/chat-message.jade | 2 +- views/shared/modals/members.jade | 4 ++-- views/shared/tasks/task.jade | 5 +++-- 6 files changed, 20 insertions(+), 5 deletions(-) diff --git a/public/js/controllers/settingsCtrl.js b/public/js/controllers/settingsCtrl.js index 0c0123d1f3..fb1efe6a12 100644 --- a/public/js/controllers/settingsCtrl.js +++ b/public/js/controllers/settingsCtrl.js @@ -65,6 +65,13 @@ habitrpg.controller('SettingsCtrl', User.set({'preferences.language': $scope.language.code}); } + $scope.availableFormats = ['MM/dd/yyyy','dd/MM/yyyy','yyyy/MM/dd']; + $scope.changeDateFormat = function(){ + + var dateFormat= User.user.preferences.dateFormat; + User.set({'preferences.dateFormat': dateFormat}); + } + $scope.reroll = function(){ User.user.ops.reroll({}); $rootScope.$state.go('tasks'); diff --git a/src/models/user.js b/src/models/user.js index 3dbb7f0f29..a9527cd512 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -278,6 +278,7 @@ var UserSchema = new Schema({ automaticAllocation: Boolean, allocationMode: {type:String, enum: ['flat','classbased','taskbased'], 'default': 'flat'}, costume: Boolean, + dateFormat: {type: String, enum:['MM/dd/yyyy', 'dd/MM/yyyy', 'yyyy/MM/dd'], 'default': 'MM/dd/yyyy'}, sleep: {type: Boolean, 'default': false}, stickyHeader: {type: Boolean, 'default': true}, disableClasses: {type: Boolean, 'default': false}, diff --git a/views/options/settings.jade b/views/options/settings.jade index ef2727b4f6..85f731bd4c 100644 --- a/views/options/settings.jade +++ b/views/options/settings.jade @@ -36,6 +36,12 @@ script(type='text/ng-template', id='partials/options.settings.settings.html') br strong !=env.t('helpWithTranslation') + + .form-horizontal + h5=env.t('dateFormat') + select.form-control(ng-model='user.preferences.dateFormat', ng-options='DF for DF in availableFormats', ng-change='changeDateFormat()') + + .checkbox label input(type='checkbox', ng-click='hideHeader() ', ng-checked='user.preferences.hideHeader!==true') diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index e93f304b7d..34ff439004 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -14,7 +14,7 @@ mixin chatMessages(inbox) // this invisible username label is here to push the message text far enough right that the visible label can be floated to this point without covering up any of the text markdown(ng-model='::message.text') | - - span.muted.time(from-now='::message.timestamp' tooltip="{{::message.timestamp | date:'short'}}") + span.muted.time(from-now='::message.timestamp' tooltip="{{::message.timestamp | date:user.preferences.dateFormat.concat(' HH:mm:ss')}}") unless inbox span a.label.label-default(ng-show='countExists(message.likes)', ng-class='{"label-success":message.likes[user._id]}', ng-click='likeChatMessage(group,message)') +{{countExists(message.likes)}} diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index b112fb059c..4fe8e2821a 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -15,12 +15,12 @@ script(type='text/ng-template', id='modals/member.html') |  =env.t('memberSince') |  - | {{::profile.auth.timestamps.created | date:env.t('mediumdate')}} - + | {{::profile.auth.timestamps.created | date:user.preferences.dateFormat}} - li(ng-show='::profile.auth.timestamps.loggedin') |  =env.t('lastLoggedIn') |  - | {{::profile.auth.timestamps.loggedin | date:env.t('mediumdate')}} - + | {{::profile.auth.timestamps.loggedin | date:user.preferences.dateFormat}} - h3=env.t('stats') .label.label-info {{:: {warrior:env.t("warrior"), wizard:env.t("mage"), rogue:env.t("rogue"), healer:env.t("healer")}[profile.stats.class] }} include ../profiles/stats diff --git a/views/shared/tasks/task.jade b/views/shared/tasks/task.jade index 29e5027cc7..7ce1d4cb14 100644 --- a/views/shared/tasks/task.jade +++ b/views/shared/tasks/task.jade @@ -4,7 +4,8 @@ li(bindonce='list', id='task-{{::task.id}}', ng-repeat='task in obj[list.type+"s // Due Date span(ng-if='task.type=="todo" && task.date') - span(ng-class='{"label label-danger":(moment(task.date).isBefore(_today, "days") && !task.completed)}') {{moment(task.date).format(env.t('shortdate'))}} + span(ng-class='{"label label-danger":(moment(task.date).isBefore(_today, "days") && !task.completed)}') {{task.date | date:user.preferences.dateFormat.substr(0,5)}} + //{{::profile.auth.timestamps.created | date:user.preferences.dateFormat}} // Streak |   span(ng-show='task.streak') {{task.streak}}  @@ -190,7 +191,7 @@ li(bindonce='list', id='task-{{::task.id}}', ng-repeat='task in obj[list.type+"s // if Todos, the due date fieldset.option-group(ng-if='task.type=="todo" && !task.challenge.id') legend.option-title=env.t('dueDate') - input.option-content.datepicker(type='text', datepicker-popup=env.t('mediumdate'), ng-model='task.date', is-open='datepickerOpened', ng-click='datepickerOpened = true') + input.option-content.datepicker(type='text', datepicker-popup='{{user.preferences.dateFormat}}', ng-model='task.date', is-open='datepickerOpened', ng-click='datepickerOpened = true') // Tags fieldset.option-group(ng-if='!$state.includes("options.social.challenges")') From 8852ad61b2a8c3211480510da6e01d65d7b862d6 Mon Sep 17 00:00:00 2001 From: Verabird Date: Fri, 26 Dec 2014 15:51:34 -0500 Subject: [PATCH 7/8] Add dateFormat preference field to user model and make settingsCtrl change the field when form is changed --- public/js/controllers/settingsCtrl.js | 2 +- src/models/user.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/public/js/controllers/settingsCtrl.js b/public/js/controllers/settingsCtrl.js index fb1efe6a12..781a08a2ad 100644 --- a/public/js/controllers/settingsCtrl.js +++ b/public/js/controllers/settingsCtrl.js @@ -65,7 +65,7 @@ habitrpg.controller('SettingsCtrl', User.set({'preferences.language': $scope.language.code}); } - $scope.availableFormats = ['MM/dd/yyyy','dd/MM/yyyy','yyyy/MM/dd']; + $scope.availableFormats = ['MM/dd/yyyy','dd/MM/yyyy']; $scope.changeDateFormat = function(){ var dateFormat= User.user.preferences.dateFormat; diff --git a/src/models/user.js b/src/models/user.js index a9527cd512..1c97b34a4e 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -278,7 +278,7 @@ var UserSchema = new Schema({ automaticAllocation: Boolean, allocationMode: {type:String, enum: ['flat','classbased','taskbased'], 'default': 'flat'}, costume: Boolean, - dateFormat: {type: String, enum:['MM/dd/yyyy', 'dd/MM/yyyy', 'yyyy/MM/dd'], 'default': 'MM/dd/yyyy'}, + dateFormat: {type: String, enum:['MM/dd/yyyy', 'dd/MM/yyyy'], 'default': 'MM/dd/yyyy'}, sleep: {type: Boolean, 'default': false}, stickyHeader: {type: Boolean, 'default': true}, disableClasses: {type: Boolean, 'default': false}, From 9b10081117aae900a5c61bb2b856859e2822b279 Mon Sep 17 00:00:00 2001 From: Verabird Date: Fri, 26 Dec 2014 16:07:54 -0500 Subject: [PATCH 8/8] Removed useless comment in task.jade --- views/shared/tasks/task.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/shared/tasks/task.jade b/views/shared/tasks/task.jade index 7ce1d4cb14..9feeb87a11 100644 --- a/views/shared/tasks/task.jade +++ b/views/shared/tasks/task.jade @@ -5,7 +5,7 @@ li(bindonce='list', id='task-{{::task.id}}', ng-repeat='task in obj[list.type+"s // Due Date span(ng-if='task.type=="todo" && task.date') span(ng-class='{"label label-danger":(moment(task.date).isBefore(_today, "days") && !task.completed)}') {{task.date | date:user.preferences.dateFormat.substr(0,5)}} - //{{::profile.auth.timestamps.created | date:user.preferences.dateFormat}} + // Streak |   span(ng-show='task.streak') {{task.streak}}