rewrite: start adding filters / tags

This commit is contained in:
Tyler Renelle 2013-08-28 18:28:28 -04:00
parent b77021e745
commit f956570593
7 changed files with 79 additions and 28 deletions

View file

@ -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

View 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];
// });
//
// }
}]);

View file

@ -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 !== "";
};

View file

@ -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()

View file

@ -61,6 +61,7 @@ html
!= js('controllers/statsCtrl')
!= js('controllers/tasksCtrl')
!= js('controllers/taskDetailsCtrl')
!= js('controllers/filtersCtrl')
!= js('controllers/userAvatarCtrl')
!= js('controllers/footerCtrl')

View file

@ -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?')

View file

@ -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