mirror of
https://github.com/sudoxnym/habitica.git
synced 2026-07-22 03:34:14 +00:00
rewrite: start adding filters / tags
This commit is contained in:
parent
b77021e745
commit
f956570593
7 changed files with 79 additions and 28 deletions
|
|
@ -3,28 +3,12 @@ _ = require 'lodash'
|
|||
module.exports.app = (appExports, model) ->
|
||||
user = model.at('_user')
|
||||
|
||||
appExports.toggleFilterByTag = (e, el) ->
|
||||
tagId = $(el).attr('data-tag-id')
|
||||
path = 'filters.' + tagId
|
||||
user.set path, !(user.get path)
|
||||
|
||||
appExports.filtersNewTag = ->
|
||||
user.setNull 'tags', []
|
||||
user.push 'tags', {id: model.id(), name: model.get("_newTag")}
|
||||
model.set '_newTag', ''
|
||||
|
||||
appExports.toggleEditingTags = ->
|
||||
model.set '_editingTags', !model.get('_editingTags')
|
||||
|
||||
appExports.clearFilters = ->
|
||||
user.set 'filters', {}
|
||||
|
||||
appExports.filtersDeleteTag = (e, el) ->
|
||||
tags = user.get('tags')
|
||||
tag = e.at "_user.tags." + $(el).attr('data-index')
|
||||
tagId = tag.get('id')
|
||||
|
||||
#something got corrupted, let's clear the corrupt tags
|
||||
###something got corrupted, let's clear the corrupt tags###
|
||||
unless tagId
|
||||
user.set 'tags', _.filter( tags, ((t)-> t?.id) )
|
||||
user.set 'filters', {}
|
||||
|
|
@ -33,6 +17,6 @@ module.exports.app = (appExports, model) ->
|
|||
model.del "_user.filters.#{tagId}"
|
||||
tag.remove()
|
||||
|
||||
# remove tag from all tasks
|
||||
### remove tag from all tasks###
|
||||
_.each user.get("tasks"), (task) -> user.del "tasks.#{task.id}.tags.#{tagId}"; true
|
||||
|
||||
|
|
|
|||
58
assets/js/controllers/filtersCtrl.js
Normal file
58
assets/js/controllers/filtersCtrl.js
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
"use strict";
|
||||
|
||||
habitrpg.controller("FiltersCtrl", ['$scope', '$rootScope', 'User',
|
||||
function($scope, $rootScope, User) {
|
||||
var user = User.user;
|
||||
$scope._editing = false;
|
||||
|
||||
$scope.saveOrEdit = function(){
|
||||
if ($scope._editing) {
|
||||
User.log({op:'set',data:{'tags':user.tags}});
|
||||
}
|
||||
$scope._editing = !$scope._editing;
|
||||
}
|
||||
|
||||
|
||||
$scope.toggleFilter = function(tag) {
|
||||
// no longer persisting this, it was causing a lot of confusion - users thought they'd permanently lost tasks
|
||||
user.filters = user.filters ? user.filters : {};
|
||||
user.filters[tag.id] = !user.filters[tag.id];
|
||||
};
|
||||
|
||||
$scope.createTag = function(name) {
|
||||
user.tags = user.tags || [];
|
||||
user.tags.push({
|
||||
id: window.habitrpgShared.helpers.uuid(),
|
||||
name: name
|
||||
});
|
||||
User.log({op:'set',data:{'tags':user.tags}});
|
||||
$scope._newTag = '';
|
||||
};
|
||||
|
||||
|
||||
// $scope.remove = function(tag, $index){
|
||||
//
|
||||
// /*
|
||||
// something got corrupted, let's clear the corrupt tags
|
||||
// FIXME we can remove this once Angular has been live for a while
|
||||
// */
|
||||
// if (!tag.id) {
|
||||
// user.tags = _.filter(user.tags, (function(t) {
|
||||
// return t != null ? t.id : false;
|
||||
// }));
|
||||
// user.filters = {};
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// delete user.filters[tag.id];
|
||||
//
|
||||
// splice(user.tags,$index,1);
|
||||
//
|
||||
// // remove tag from all tasks
|
||||
// _.each(user.tasks, function(task) {
|
||||
// delete user.tasks[task.id].tags[tag.id];
|
||||
// });
|
||||
//
|
||||
// }
|
||||
|
||||
}]);
|
||||
|
|
@ -9,6 +9,9 @@ habitrpg.controller("RootCtrl", ['$scope', '$rootScope', '$location', 'User',
|
|||
$rootScope.User = User;
|
||||
$rootScope.user = User.user;
|
||||
$rootScope.settings = User.settings;
|
||||
$rootScope.notPorted = function(){
|
||||
alert("This feature is not yet ported from the original site.");
|
||||
}
|
||||
|
||||
/*
|
||||
FIXME this is dangerous, organize helpers.coffee better, so we can group them by which controller needs them,
|
||||
|
|
@ -27,6 +30,10 @@ habitrpg.controller("RootCtrl", ['$scope', '$rootScope', '$location', 'User',
|
|||
User.log(log);
|
||||
};
|
||||
|
||||
$rootScope.setMultiple = function(){
|
||||
|
||||
}
|
||||
|
||||
$rootScope.authenticated = function() {
|
||||
return User.settings.auth.apiId !== "";
|
||||
};
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ UserSchema = new Schema(
|
|||
todoIds: Array
|
||||
rewardIds: Array
|
||||
|
||||
filters: Schema.Types.Mixed #TODO
|
||||
# Removed `filters`, no longer persisting to the database
|
||||
|
||||
flags:
|
||||
ads: String #FIXME to boolean (currently show/hide)
|
||||
|
|
@ -184,6 +184,7 @@ UserSchema.methods.toJSON = () ->
|
|||
# Custom setter/getter virtuals?
|
||||
UserSchema.pre 'save', (next) ->
|
||||
@markModified('tasks')
|
||||
delete @filters if @filters
|
||||
@._v++ #our own version incrementer
|
||||
next()
|
||||
|
||||
|
|
|
|||
|
|
@ -61,6 +61,7 @@ html
|
|||
!= js('controllers/statsCtrl')
|
||||
!= js('controllers/tasksCtrl')
|
||||
!= js('controllers/taskDetailsCtrl')
|
||||
!= js('controllers/filtersCtrl')
|
||||
!= js('controllers/userAvatarCtrl')
|
||||
!= js('controllers/footerCtrl')
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
div(ng-if='authenticated() && user.flags.ads!="hide"')
|
||||
span.pull-right(ng-if='list.type!="reward"')
|
||||
a(x-bind='click:showStripe', tooltip='Remove Ads')
|
||||
a(x-bind='click:showStripe', tooltip='Remove Ads', ng-click='notPorted()')
|
||||
i.icon-remove
|
||||
br
|
||||
a(ng-click='modals.whyAds=true', tooltip='Why Ads?')
|
||||
|
|
|
|||
|
|
@ -1,23 +1,23 @@
|
|||
.filters
|
||||
.filters(ng-controller='FiltersCtrl')
|
||||
.pull-left.filter-description
|
||||
| Tags:
|
||||
ul.nav.nav-pills
|
||||
li
|
||||
a(rel='tooltip', title='Edit Tags', x-bind='click:toggleEditingTags')
|
||||
i(ng-class='{"icon-ok": _editingTags, "icon-pencil": !_editingTags}')
|
||||
a(rel='tooltip', title='Edit Tags', ng-click='saveOrEdit()')
|
||||
i(ng-class='{"icon-ok": _editing, "icon-pencil": !_editing}')
|
||||
li(ng-class='{active: user.filters[tag.id]}', ng-repeat='tag in user.tags', style='position: relative;')
|
||||
.input-append.option-group.tag-editing(ng-show='_editingTags && !tag.challenge')
|
||||
.input-append.option-group.tag-editing(ng-show='_editing && !tag.challenge')
|
||||
input.input.input-small.option-content.tag-editing-pill(type='text', ng-model='tag.name')
|
||||
span.add-on.tag-editing-pill
|
||||
a.pull-right(x-bind='click:filtersDeleteTag', data-index='{{$index}}')
|
||||
a.pull-right(x-bind='remove(tag,$index)', ng-click='notPorted()')
|
||||
i.icon-trash
|
||||
a(ng-hide='_editingTags && !tag.challenge', data-tag-id='{{tag.id}}', x-bind='click:toggleFilterByTag') {{tag.name}}
|
||||
a(ng-hide='_editing && !tag.challenge', data-tag-id='{{tag.id}}', ng-click='toggleFilter(tag)') {{tag.name}}
|
||||
li
|
||||
form.form-inline(ng-show='_editingTags', x-bind='submit:filtersNewTag')
|
||||
form.form-inline(ng-show='_editing', ng-submit='createTag(_newTag)')
|
||||
.input-append.tag-editing
|
||||
input.span2.tag-editing-pill(type='text', ng-model='_newTag', placeholder='New Tag')
|
||||
button.add-on.tag-editing-pill(type='submit') Add
|
||||
// <li class="{#unless activeFilters(users[_userId].filters)}hidden{/}">
|
||||
li
|
||||
a(rel='tooltip', title='Clear Filters', x-bind='click:clearFilters')
|
||||
a(rel='tooltip', title='Clear Filters', ng-click='user.filters = {}')
|
||||
i.icon-remove-sign
|
||||
|
|
|
|||
Loading…
Reference in a new issue