add categories

This commit is contained in:
Athou
2013-03-31 08:17:28 +02:00
parent 5a4d11c4de
commit 89c7a00ebf
8 changed files with 137 additions and 13 deletions

View File

@@ -7,6 +7,7 @@ import javax.ws.rs.core.Application;
import com.commafeed.frontend.rest.resources.AdminUsersREST;
import com.commafeed.frontend.rest.resources.EntriesREST;
import com.commafeed.frontend.rest.resources.SessionREST;
import com.commafeed.frontend.rest.resources.SettingsREST;
import com.commafeed.frontend.rest.resources.SubscriptionsREST;
import com.google.common.collect.Sets;
@@ -23,6 +24,7 @@ public class RESTApplication extends Application {
set.add(EntriesREST.class);
set.add(SettingsREST.class);
set.add(AdminUsersREST.class);
set.add(SessionREST.class);
return set;
}
}

View File

@@ -26,7 +26,7 @@ import com.google.common.collect.Maps;
@Path("entries")
public class EntriesREST extends AbstractREST {
private static final String ALL = "all";
public static final String ALL = "all";
public enum Type {
category, feed, entry;

View File

@@ -0,0 +1,29 @@
package com.commafeed.frontend.rest.resources;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import com.commafeed.backend.model.User;
import com.commafeed.backend.model.UserRole;
import com.commafeed.backend.model.UserRole.Role;
import com.commafeed.frontend.model.UserModel;
@Path("session")
public class SessionREST extends AbstractREST {
@Path("get")
@GET
public UserModel get() {
User user = getUser();
UserModel userModel = new UserModel();
userModel.setId(user.getId());
userModel.setName(user.getName());
userModel.setEnabled(!user.isDisabled());
for (UserRole role : userRoleService.findAll(user)) {
if (role.getRole() == Role.ADMIN) {
userModel.setAdmin(true);
}
}
return userModel;
}
}

View File

@@ -91,6 +91,30 @@ public class SubscriptionsREST extends AbstractREST {
return Response.ok(Status.OK).build();
}
@Path("addCategory")
@GET
public Response addCategory(@QueryParam("name") String name,
@QueryParam("parentId") String parentId) {
Preconditions.checkNotNull(name);
FeedCategory cat = new FeedCategory();
cat.setName(name);
cat.setUser(getUser());
if (parentId != null && !EntriesREST.ALL.equals(parentId)) {
FeedCategory parent = new FeedCategory();
parent.setId(Long.valueOf(parentId));
cat.setParent(parent);
}
feedCategoryService.save(cat);
return Response.ok().build();
}
@GET
@Path("deleteCategory")
public Response deleteCategory(@QueryParam("id") Long id) {
return Response.ok().build();
}
@POST
@Path("import")
@Consumes(MediaType.MULTIPART_FORM_DATA)

View File

@@ -9,6 +9,7 @@
<a ng-click="open()">Subscribe</a>
</li>
<li><a ng-click="openImport()">Import</a></li>
<li><a ng-click="openCategory()">New category</a></li>
</ul>
</div>
<div modal="isOpen" close="close()" options="opts">
@@ -44,7 +45,7 @@
</div>
</form>
<div class="modal-footer">
<button class="btn btn-warning cancel" ng-click="close()">Cancel</button>
<button class="btn cancel" ng-click="close()">Cancel</button>
<button class="btn btn-primary ok" type="submit">Save</button>
</div>
</div>
@@ -66,9 +67,39 @@
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-warning cancel" ng-click="closeImport()">Cancel</button>
<button type="button" class="btn cancel" ng-click="closeImport()">Cancel</button>
<button class="btn btn-primary ok" type="submit" upload-submit="uploadComplete(contents, completed)">Import</button>
</div>
</form>
</div>
<div modal="isOpenCategory" close="closeCategory()" options="opts">
<div class="modal-header">
<button type="button" class="close" ng-click="closeCategory()">&times;</button>
<h4>New category</h4>
</div>
<form name="categoryForm" class="form-horizontal" ng-submit="saveCategory()">
<div class="modal-body">
<div class="control-group" ng-class="{error : !categoryForm.name.$valid}">
<label class="control-label">Name</label>
<div class="controls">
<input type="text" name="name" ng-model="cat.name" required></input>
<span class="help-block" ng-show="!categoryForm.name.$valid">Required</span>
</div>
</div>
<div class="control-group" ng-class="{error : !categoryForm.category.$valid}">
<label class="control-label">Category</label>
<div class="controls">
<select name="category" ng-model="cat.parentId" class="input-block-level" required>
<option ng-repeat="cat in SubscriptionService.flatCategories" value="{{cat.id}}">{{cat.name}}</option>
</select>
<span class="help-block" ng-show="!categoryForm.category.$valid">Required</span>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn cancel" ng-click="closeCategory()">Cancel</button>
<button class="btn btn-primary ok" type="submit">Save</button>
</div>
</form>
</div>
</div>

View File

@@ -10,10 +10,10 @@
<button type="button" class="btn" ng-click="markAllAsRead()"><i class="icon-ok"></i> Mark all as read</button>
<div class="btn-group">
<a class="btn dropdown-toggle" data-toggle="dropdown" href="settings"><i class="icon-cog"></i><span class="caret"></span></a>
<a class="btn dropdown-toggle" data-toggle="dropdown" href="settings"><i class="icon-cog"></i> {{session.name}} <span class="caret"></span></a>
<ul class="dropdown-menu pull-right">
<li><a href="settings"><i class="icon-wrench"></i> Settings</a></li>
<li><a ng-click="toAdmin()"><i class="icon-edit"></i> Admin</a></li>
<li ng-show="session.admin"><a ng-click="toAdmin()"><i class="icon-edit"></i> Admin</a></li>
<li class="divider"></li>
<li><a href="logout"><i class="icon-user"></i> Logout</a></li>
</ul>

View File

@@ -88,6 +88,22 @@ module.directive('subscribe', function(SubscriptionService) {
SubscriptionService.init();
$scope.closeImport();
};
$scope.cat = {};
$scope.openCategory= function(){
$scope.isOpenCategory = true;
$scope.cat = {};
};
$scope.closeCategory= function(){
$scope.isOpenCategory = false;
};
$scope.saveCategory = function() {
SubscriptionService.addCategory($scope.cat);
$scope.closeCategory();
};
}
};
});
@@ -147,7 +163,7 @@ module.directive('category', function($compile) {
});
module.directive('toolbar', function($stateParams, $route, $location,
SettingsService, EntryService, SubscriptionService) {
SettingsService, EntryService, SubscriptionService, SessionService) {
return {
scope : {},
restrict : 'E',
@@ -158,6 +174,8 @@ module.directive('toolbar', function($stateParams, $route, $location,
function totalActiveAjaxRequests() {
return ($http.pendingRequests.length + $.active);
}
$scope.session = SessionService.get();
$scope.loading = true;
$scope.$watch(totalActiveAjaxRequests, function() {

View File

@@ -1,9 +1,10 @@
var module = angular.module('commafeed.services', [ 'ngResource' ]);
module.factory('SubscriptionService', [
'$resource',
'$http',
function($resource, $http) {
module.factory('SessionService', function($resource){
return $resource('rest/session/get');
});
module.factory('SubscriptionService', function($resource, $http) {
var flatten = function(category, parentName, array) {
if (!array)
@@ -50,6 +51,18 @@ module.factory('SubscriptionService', [
params : {
_method : 'collapse'
}
},
addCategory : {
method : 'GET',
params : {
_method : 'addCategory'
}
},
deleteCategory : {
method : 'GET',
params : {
_method : 'deleteCategory'
}
}
};
var s = {};
@@ -98,12 +111,19 @@ module.factory('SubscriptionService', [
id : id
});
};
s.addCategory = function(cat, callback) {
res.addCategory(cat, function(data) {
s.init();
if (callback)
callback(data);
});
};
s.collapse = res.collapse;
s.init();
return s;
} ]);
});
module.factory('EntryService', [ '$resource', '$http',
module.factory('EntryService',
function($resource, $http) {
var actions = {
get : {
@@ -121,7 +141,7 @@ module.factory('EntryService', [ '$resource', '$http',
};
var res = $resource('rest/entries/:_method', {}, actions);
return res;
} ]);
});
module.factory('SettingsService', function($resource) {
var s = {}