Skip to content

Commit c820099

Browse files
committed
Tag display
1 parent f8b7ec5 commit c820099

File tree

7 files changed

+242
-137
lines changed

7 files changed

+242
-137
lines changed

OpenNote/index.html

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
<script src="openNote/services/serverConfigService.js"></script>
5454
<script src="openNote/services/storageService.js"></script>
5555
<script src="openNote/services/legacyImportService.js"></script>
56+
<script src="openNote/services/tagService.js"></script>
5657

5758
<!-- Directives -->
5859
<script src="openNote/directives/randomFadeInDirective.js"></script>
@@ -71,9 +72,9 @@
7172
<body>
7273
<div id="menu" class="ng-hide fadeIn" ng-show="showMenu" ng-include="'openNote/partials/navBarPartial.html'"></div>
7374

74-
<div class="col-lg-2 col-md-3 col-sm-4 hidden-xs" ng-include="'openNote/partials/tagListPartial.html'"></div>
75+
<div class="col-lg-2 col-md-3 col-sm-4 col-xs-12" ng-include="'openNote/partials/tagListPartial.html'"></div>
7576

76-
<div class="col-lg-10 col-md-9 col-sm-8" ng-view data-intro="{{helpContent.viewArea}}"> </div>
77+
<div class="col-lg-10 col-md-9 col-sm-8 col-xs-12" ng-view data-intro="{{helpContent.viewArea}}"> </div>
7778

7879
<div id="copyRight" class="col-xs-12 fadeOutDirective">&#169; 2016 Jacob Liscom - Version {{version}}</div>
7980
</body>

OpenNote/openNote/controllers/noteController.js

Lines changed: 32 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ openNote.controller("noteController", function( $scope,
2626
return {
2727
text: "Save",
2828
action: function(){
29-
$scope.save();
29+
save();
3030
},
3131
helpText: $rootScope.helpContent.saveButton
3232
};
@@ -125,11 +125,39 @@ openNote.controller("noteController", function( $scope,
125125
/**
126126
* Save a note
127127
*/
128-
$scope.save = function(){
128+
var save = function(){
129129
$scope.note.note = CKEDITOR.instances.note.getData();
130130

131-
$(".notePartial").fadeOut(config.fadeSpeedShort());
132-
createNote($scope.note);
131+
$(".notePartial").fadeOut(config.fadeSpeedShort(),function(){
132+
$scope.note.type="note";
133+
134+
/**
135+
* Callback after successful save to reload note
136+
*/
137+
var saveCallback = function(response){
138+
if(!response.ok)
139+
throw "//FIXME";//FIXME
140+
detachWindowUnload();
141+
142+
//Tags
143+
$scope.note._id=response.id;
144+
$rootScope.$emit("noteSaved",$scope.note);//Let any number of services know we have saved a note
145+
146+
$location.url("/note/"+response.id+"?rev="+response.rev);//revision number is here only to force angular to reload
147+
alertify.success("Note Saved"); //all done. close the notify dialog
148+
$scope.$apply();
149+
};
150+
151+
//Upsert
152+
if(!$scope.note._id)
153+
storageService.database().post($scope.note).then(saveCallback,function(){
154+
alertify.error("Error saving note");
155+
});
156+
else
157+
storageService.database().put($scope.note).then(saveCallback,function(){
158+
alertify.error("Error modifing note");
159+
});
160+
});
133161
};
134162

135163
/**
@@ -193,33 +221,4 @@ openNote.controller("noteController", function( $scope,
193221
var detachWindowUnload = function(){
194222
window.onbeforeunload = null;
195223
};
196-
197-
/**
198-
* Create a note object
199-
*/
200-
var createNote = function(note){
201-
note.type="note";
202-
203-
/**
204-
* Callback after successful save to reload note
205-
*/
206-
var saveCallback = function(response){
207-
if(!response.ok)
208-
throw "//FIXME";//FIXME
209-
detachWindowUnload();
210-
$location.url("/note/"+response.id+"?rev="+response.rev);//revision number is here only to force angular to reload
211-
alertify.success("Note Saved"); //all done. close the notify dialog
212-
$scope.$apply();
213-
};
214-
215-
//Upsert
216-
if(!note._id)
217-
storageService.database().post(note).then(saveCallback).catch(function(){
218-
alertify.error("Error saving note");
219-
});
220-
else
221-
storageService.database().put(note).then(saveCallback).catch(function(){
222-
alertify.error("Error saving note");
223-
});
224-
};
225224
});

OpenNote/openNote/controllers/tagListController.js

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,26 @@
77
* Control
88
*/
99
openNote.controller("tagListController", function( $scope,
10-
$rootScope,
11-
storageService,
12-
userService,
13-
$timeout,
14-
config) {
15-
$scope.data = [];
10+
$rootScope,
11+
tagService,
12+
storageService) {
13+
$scope.tags = [];
14+
15+
var updateTags = function(){
16+
tagService.getMap().then(function(map){
17+
$scope.tags = [];
18+
for(var tag in map.tags)
19+
$scope.tags.push(tag);
20+
21+
$scope.$apply();
22+
});
23+
};
1624

1725
/**
18-
*
1926
* Move key
2027
* @param request.destFolder -
2128
* @param request.moveObject - object to move
29+
* TODO this is should be moved. It is left over from the list controller days
2230
*/
2331
$rootScope.$on("moveKey", function(event, request) {
2432
//Confirm action
@@ -40,4 +48,10 @@ openNote.controller("tagListController", function( $scope,
4048
return $rootScope.$emit("reloadListView", {});//Always reload
4149
});
4250
});
51+
52+
$rootScope.$on("tagsUpdated", function() {
53+
updateTags();
54+
});
55+
56+
updateTags();
4357
});

OpenNote/openNote/openNote.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,12 @@ openNote.run(function ( $rootScope,
1818
userService,
1919
config,
2020
serverConfigService,
21+
tagService,
2122
$http){
2223

2324
$rootScope.helpContent=config.getHelpContent();
2425
$rootScope.version=config.getVersion();
26+
tagService.bindHandlers();
2527
$rootScope.$on("$routeChangeStart", function () {
2628
//server config values
2729
serverConfigService.getConfig().then(function(config){
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
<div id="sideBar"
2+
class="startHidden randomFadeInDirective"
23
ng-controller="tagListController"
34
ng-show="showSideBar"
45
data-intro="{{helpContent.listArea}}">
56
<div>
6-
<h3>Tags</h3>
7-
<ul>
8-
<li>Tag1</li>
9-
<li>Todo</li>
7+
<h4>Tags</h4>
8+
<ul class=" list-unstyled">
9+
<li ng-repeat="tag in tags" class="startHidden randomFadeInDirective">{{tag}}</li>
1010
</ul>
1111
</div>
1212
</div>
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
openNote.service("tagService", function ($rootScope,storageService) {
2+
var service = this;
3+
var tagRegex = /(#[^\ <]*)/ig;
4+
5+
/**
6+
* Bind handlers to the root scope
7+
*/
8+
this.bindHandlers = function(){
9+
$rootScope.$on("noteSaved", function(event, note) {
10+
deleteTagsFromMap(note._id,function(){
11+
var results = note.note.match(tagRegex);
12+
if(!results||!results.length)
13+
return;
14+
addTagsToMap(results,note._id);
15+
});
16+
});
17+
};
18+
19+
/**
20+
* Add tags to the map
21+
* @param tags - array of tags present
22+
* @param id - ID of the note
23+
* @emmit - emiits tagsUpdated on success
24+
*/
25+
var addTagsToMap = function(tags,id){
26+
var saveCallback = function(response){
27+
if(!response.ok)
28+
throw response;
29+
$rootScope.$emit("tagsUpdated");
30+
};
31+
32+
var addTags = function(map){
33+
tags.forEach(function(tag){
34+
if(!map.tags[tag])
35+
return (map.tags[tag]=[id]);
36+
return map.tags[tag].push(id);
37+
});
38+
39+
map._id="tagMap";
40+
storageService.database().put(map).then(saveCallback);
41+
};
42+
service.getMap().then(addTags,function(err){
43+
if(err.status==404)
44+
return addTags({tags:{}});//Nothing found nothing to delete
45+
throw err;
46+
});
47+
};
48+
49+
/**
50+
* Remove all tags for an id
51+
* @param id - the id to remove tags for
52+
* @param callback - calls on sucessful return
53+
*/
54+
var deleteTagsFromMap = function(id,callback){
55+
service.getMap().then(function(map){
56+
//Remove all tags from array
57+
for(var tag in map.tags){
58+
var index = map.tags[tag].indexOf(id);
59+
if(index == -1)
60+
continue;
61+
map.tags[tag].splice(index, 1);
62+
if(!map.tags[tag].length)
63+
delete map.tags[tag];
64+
}
65+
66+
//Save
67+
storageService.database().put(map).then(function(response){
68+
if(!response.ok)
69+
throw response;
70+
$rootScope.$emit("tagsUpdated");
71+
return callback();
72+
});
73+
},function(err){
74+
if(err.status==404)
75+
return callback();//Nothing found nothing to delete
76+
throw err;
77+
});
78+
};
79+
80+
/**
81+
* Get the map
82+
* @return - a promise that when resolves return the tag map
83+
*/
84+
this.getMap = function(){
85+
return storageService.database().get("tagMap");
86+
};
87+
});

0 commit comments

Comments
 (0)