From f956570593a6d89abe45d18cdb4c637a80b95b89 Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Wed, 28 Aug 2013 18:28:28 -0400 Subject: [PATCH] rewrite: start adding filters / tags --- archive/derby_controllers/filters.coffee | 20 +------- assets/js/controllers/filtersCtrl.js | 58 ++++++++++++++++++++++++ assets/js/controllers/rootCtrl.js | 7 +++ src/models/user.coffee | 3 +- views/index.jade | 1 + views/tasks/ads.jade | 2 +- views/tasks/filters.jade | 16 +++---- 7 files changed, 79 insertions(+), 28 deletions(-) create mode 100644 assets/js/controllers/filtersCtrl.js diff --git a/archive/derby_controllers/filters.coffee b/archive/derby_controllers/filters.coffee index a7c1a87dcf..d03d8424e4 100644 --- a/archive/derby_controllers/filters.coffee +++ b/archive/derby_controllers/filters.coffee @@ -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 diff --git a/assets/js/controllers/filtersCtrl.js b/assets/js/controllers/filtersCtrl.js new file mode 100644 index 0000000000..638184df59 --- /dev/null +++ b/assets/js/controllers/filtersCtrl.js @@ -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]; +// }); +// +// } + +}]); diff --git a/assets/js/controllers/rootCtrl.js b/assets/js/controllers/rootCtrl.js index 9dda986fd2..f1587d4320 100644 --- a/assets/js/controllers/rootCtrl.js +++ b/assets/js/controllers/rootCtrl.js @@ -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 !== ""; }; diff --git a/src/models/user.coffee b/src/models/user.coffee index 9c90fce605..bd34cd04f3 100644 --- a/src/models/user.coffee +++ b/src/models/user.coffee @@ -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() diff --git a/views/index.jade b/views/index.jade index 48692d8195..e1f8de7d00 100644 --- a/views/index.jade +++ b/views/index.jade @@ -61,6 +61,7 @@ html != js('controllers/statsCtrl') != js('controllers/tasksCtrl') != js('controllers/taskDetailsCtrl') + != js('controllers/filtersCtrl') != js('controllers/userAvatarCtrl') != js('controllers/footerCtrl') diff --git a/views/tasks/ads.jade b/views/tasks/ads.jade index 09111764a0..6a5281588b 100644 --- a/views/tasks/ads.jade +++ b/views/tasks/ads.jade @@ -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?') diff --git a/views/tasks/filters.jade b/views/tasks/filters.jade index 4f35ee3e49..07958fdf58 100644 --- a/views/tasks/filters.jade +++ b/views/tasks/filters.jade @@ -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 - a(rel='tooltip', title='Clear Filters', x-bind='click:clearFilters') + a(rel='tooltip', title='Clear Filters', ng-click='user.filters = {}') i.icon-remove-sign