Benjamin Renard commited on 2014-07-22 22:16:12
Showing 3 changed files, with 122 additions and 42 deletions.
| ... | ... |
@@ -103,8 +103,7 @@ view_home=function() {
|
| 103 | 103 |
sum+=value; |
| 104 | 104 |
diff='<td class="positive">+'+value.toFixed(2)+' €</td>'; |
| 105 | 105 |
} |
| 106 |
- menu='<div class="btn-group" data-grp="'+g+'"><button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-cog"></span></button><ul class="dropdown-menu"><li><a class="home_grp_cat_btn"><span class="glyphicon glyphicon-th-list"></span> Catégories</a></li></ul></div>'; |
|
| 107 |
- tbody.html(tbody.html()+'<tr><td><a class="group-link" data-uuid="'+g+'">'+balances[g].name+'</a></td>'+diff+'<td>'+menu+'</td></tr>'); |
|
| 106 |
+ tbody.html(tbody.html()+'<tr><td><a class="group-link" data-uuid="'+g+'">'+balances[g].name+'</a></td>'+diff+'</tr>'); |
|
| 108 | 107 |
} |
| 109 | 108 |
} |
| 110 | 109 |
$('#view-home #mybalances a.group-link').bind('click',function(e) {
|
| ... | ... |
@@ -130,18 +129,6 @@ view_home=function() {
|
| 130 | 129 |
view_part('#view-home');
|
| 131 | 130 |
} |
| 132 | 131 |
|
| 133 |
-on_home_grp_cat_btn_click=function(e) {
|
|
| 134 |
- grp_id=$(e.target).parents('div.btn-group').data('grp');
|
|
| 135 |
- grp=groups[grp_id]; |
|
| 136 |
- ul=$('#grp_cat_modal ul');
|
|
| 137 |
- html=""; |
|
| 138 |
- for(cid in grp.getSortedCategories()) {
|
|
| 139 |
- html+="<li><span class='cat-color' style='background-color: "+grp.categories[cid]['color']+"'></span> "+grp.categories[cid]['name']+"</li>"; |
|
| 140 |
- } |
|
| 141 |
- ul.html(html); |
|
| 142 |
- $('#grp_cat_modal').modal('show');
|
|
| 143 |
-} |
|
| 144 |
- |
|
| 145 | 132 |
/**************** |
| 146 | 133 |
* View group |
| 147 | 134 |
****************/ |
| ... | ... |
@@ -207,6 +194,77 @@ show_contributions=function(group,contributor_email) {
|
| 207 | 194 |
$('.contribution_edit_btn').bind('click',on_contribution_edit_btn_click);
|
| 208 | 195 |
} |
| 209 | 196 |
|
| 197 |
+on_categories_group_btn_click=function(e) {
|
|
| 198 |
+ group=groups[$('#view-group').data('uuid')];
|
|
| 199 |
+ $('#view-group-categories').data('group-uuid',$('#view-group').data('uuid'));
|
|
| 200 |
+ refresh_group_categories(group); |
|
| 201 |
+ view_part('#view-group-categories');
|
|
| 202 |
+} |
|
| 203 |
+ |
|
| 204 |
+refresh_group_categories=function(group) {
|
|
| 205 |
+ ul=$('#view-group-categories ul');
|
|
| 206 |
+ html=""; |
|
| 207 |
+ for(cid in group.getSortedCategories()) {
|
|
| 208 |
+ html+="<li data-uuid='"+cid+"'><span class='cat-color' style='background-color: "+group.categories[cid]['color']+"'></span> "+group.categories[cid]['name']+"</li>"; |
|
| 209 |
+ } |
|
| 210 |
+ ul.html(html); |
|
| 211 |
+ $('#view-group-categories ul li').bind('click',on_categories_group_cat_click);
|
|
| 212 |
+} |
|
| 213 |
+ |
|
| 214 |
+on_categories_group_cat_click=function(e) {
|
|
| 215 |
+ li=$(e.target); |
|
| 216 |
+ if (li.prop("tagName")!='LI') {
|
|
| 217 |
+ return true; |
|
| 218 |
+ } |
|
| 219 |
+ cid=li.data('uuid');
|
|
| 220 |
+ group=groups[$('#view-group-categories').data('group-uuid')];
|
|
| 221 |
+ cat=group.categories[cid]; |
|
| 222 |
+ li.html("<span class='cat-color' style='background-color: "+cat['color']+"'></span> "+
|
|
| 223 |
+ "<input type='text' value=\""+cat.name+"\"/> "+ |
|
| 224 |
+ "<button class='btn btn-default btn-xs cat_edit'><span class='glyphicon glyphicon-ok'></span></button>"+ |
|
| 225 |
+ "<button class='btn btn-default btn-xs cat_delete'><span class='glyphicon glyphicon-trash'></span></button>"); |
|
| 226 |
+ li.children('button.cat_edit').bind('click',{'li': li,'group': group,'cid': cid},on_categories_group_cat_edit_valid_btn_click);
|
|
| 227 |
+ li.children('button.cat_delete').bind('click',{'li': li,'group': group,'cid': cid},on_categories_group_cat_delete_btn_click);
|
|
| 228 |
+} |
|
| 229 |
+ |
|
| 230 |
+on_categories_group_cat_edit_valid_btn_click=function(e) {
|
|
| 231 |
+ name=e.data.li.children('input:first').val();
|
|
| 232 |
+ cat=e.data.group.categories[e.data.cid]; |
|
| 233 |
+ e.data.group.updateCategory(e.data.cid,new Category(name,cat.color)); |
|
| 234 |
+ groups.save(); |
|
| 235 |
+ refresh_group_categories(e.data.group); |
|
| 236 |
+} |
|
| 237 |
+ |
|
| 238 |
+on_categories_group_cat_delete_btn_click=function(e) {
|
|
| 239 |
+ e.data.group.deleteCategory(e.data.cid); |
|
| 240 |
+ groups.save(); |
|
| 241 |
+ refresh_group_categories(e.data.group); |
|
| 242 |
+} |
|
| 243 |
+ |
|
| 244 |
+on_categories_go_back_group_btn_click=function(e) {
|
|
| 245 |
+ view_group(groups[$('#view-group-categories').data('group-uuid')]);
|
|
| 246 |
+} |
|
| 247 |
+ |
|
| 248 |
+on_categories_group_add_btn_click=function(e) {
|
|
| 249 |
+ name=$('#add_category input')[0].value;
|
|
| 250 |
+ |
|
| 251 |
+ if (jQuery.type(name)!='string' || name=='') {
|
|
| 252 |
+ return; |
|
| 253 |
+ } |
|
| 254 |
+ group_uuid=$('#view-group-categories').data('group-uuid');
|
|
| 255 |
+ group=groups[group_uuid]; |
|
| 256 |
+ |
|
| 257 |
+ if (group.getCategoryByName(name,true)) {
|
|
| 258 |
+ alert('Cette catégorie existe déjà');
|
|
| 259 |
+ } |
|
| 260 |
+ else {
|
|
| 261 |
+ group.addCategory(new Category(name)); |
|
| 262 |
+ $('#add_category input')[0].value='';
|
|
| 263 |
+ refresh_group_categories(group); |
|
| 264 |
+ } |
|
| 265 |
+} |
|
| 266 |
+ |
|
| 267 |
+ |
|
| 210 | 268 |
/***************************** |
| 211 | 269 |
* Trash |
| 212 | 270 |
*****************************/ |
| ... | ... |
@@ -856,8 +914,13 @@ $( document ).ready( function() {
|
| 856 | 914 |
$("#view-group-trash #go-back-group").bind('click',on_go_back_group_btn_click);
|
| 857 | 915 |
$("#view-group-trash-contributors #go-back-group").bind('click',on_go_back_group_trash_contributors_btn_click);
|
| 858 | 916 |
|
| 917 |
+ $('#categories_group_btn').bind('click',on_categories_group_btn_click);
|
|
| 859 | 918 |
$('#trash_group_btn').bind('click',on_trash_group_btn_click);
|
| 860 | 919 |
$('#remove_group_btn').bind('click',on_remove_group_btn_click);
|
| 920 |
+ |
|
| 921 |
+ $('#view-group-categories span.input-group-addon').bind('click',on_categories_group_add_btn_click);
|
|
| 922 |
+ $("#view-group-categories button.go-back-group").bind('click',on_categories_go_back_group_btn_click);
|
|
| 923 |
+ |
|
| 861 | 924 |
view_home(); |
| 862 | 925 |
pleaseWaitHide(); |
| 863 | 926 |
} ); |
| ... | ... |
@@ -352,21 +352,39 @@ function Group(uuid,name,data) {
|
| 352 | 352 |
|
| 353 | 353 |
this.deleteCategory=function(uuid,time) {
|
| 354 | 354 |
this.categories[uuid].lastChange=time || new Date().getTime(); |
| 355 |
- this.deletedCategory[uuid]=this.categories[uuid].export(); |
|
| 355 |
+ this.deletedCategories[uuid]=this.categories[uuid].export(); |
|
| 356 | 356 |
delete this.categories[uuid]; |
| 357 | 357 |
} |
| 358 | 358 |
|
| 359 | 359 |
this.restoreCategory=function(uuid) {
|
| 360 |
- this.deletedCategory[uuid].lastChange=new Date().getTime(); |
|
| 361 |
- this.categories[uuid]=this.importCategory(this.deletedCategory[uuid]); |
|
| 362 |
- delete this.deletedCategory[uuid]; |
|
| 360 |
+ this.deletedCategories[uuid].lastChange=new Date().getTime(); |
|
| 361 |
+ this.categories[uuid]=this.importCategory(this.deletedCategories[uuid]); |
|
| 362 |
+ delete this.deletedCategories[uuid]; |
|
| 363 |
+ } |
|
| 364 |
+ |
|
| 365 |
+ this.getCategoryByName=function(name,approx) {
|
|
| 366 |
+ if(approx) {
|
|
| 367 |
+ name=String(name).replace(/^\s+|\s+$/g, '').toLowerCase(); |
|
| 368 |
+ } |
|
| 369 |
+ for (uuid in this.categories) {
|
|
| 370 |
+ if (approx) {
|
|
| 371 |
+ if (String(this.categories[uuid].name).replace(/^\s+|\s+$/g, '').toLowerCase()==name) {
|
|
| 372 |
+ return this.categories[uuid]; |
|
| 373 |
+ } |
|
| 374 |
+ } |
|
| 375 |
+ else if(this.categories[uuid].name==name) {
|
|
| 376 |
+ return this.categories[uuid] |
|
| 377 |
+ } |
|
| 378 |
+ } |
|
| 379 |
+ return false; |
|
| 363 | 380 |
} |
| 364 | 381 |
|
| 365 | 382 |
this.importCategory=function(data) {
|
| 366 | 383 |
return new Category( |
| 367 | 384 |
decodeURIComponent(data.name), |
| 368 | 385 |
data.color, |
| 369 |
- data.lastChange |
|
| 386 |
+ data.lastChange, |
|
| 387 |
+ data.uuid |
|
| 370 | 388 |
); |
| 371 | 389 |
} |
| 372 | 390 |
|
| ... | ... |
@@ -452,7 +470,6 @@ function Group(uuid,name,data) {
|
| 452 | 470 |
this.deletedContributions[uuid]=data.deletedContributions[uuid]; |
| 453 | 471 |
} |
| 454 | 472 |
} |
| 455 |
- console.log(data.categories); |
|
| 456 | 473 |
if (jQuery.type(data.categories) == 'object') {
|
| 457 | 474 |
for (uuid in data.categories) {
|
| 458 | 475 |
this.categories[uuid]=this.importCategory(data.categories[uuid]); |
| ... | ... |
@@ -497,15 +514,17 @@ function Contributor(name,email) {
|
| 497 | 514 |
} |
| 498 | 515 |
} |
| 499 | 516 |
|
| 500 |
-function Category(name,color,lastChange) {
|
|
| 517 |
+function Category(name,color,lastChange,uuid) {
|
|
| 501 | 518 |
this.name=name; |
| 502 | 519 |
this.color=color || '#'+(0x1000000+(Math.random())*0xffffff).toString(16).substr(1,6); |
| 503 | 520 |
this.lastChange=lastChange || new Date().getTime(); |
| 521 |
+ this.uuid=uuid || generate_uuid(); |
|
| 504 | 522 |
this.export=function() {
|
| 505 | 523 |
return {
|
| 506 | 524 |
'name': encodeURIComponent(this.name), |
| 507 | 525 |
'color': this.color, |
| 508 |
- 'lastChange': this.lastChange |
|
| 526 |
+ 'lastChange': this.lastChange, |
|
| 527 |
+ 'uuid': this.uuid |
|
| 509 | 528 |
}; |
| 510 | 529 |
} |
| 511 | 530 |
} |
| ... | ... |
@@ -67,7 +67,7 @@ span.cat-color {
|
| 67 | 67 |
display: inline-block; |
| 68 | 68 |
} |
| 69 | 69 |
|
| 70 |
-#grp_cat_modal ul {
|
|
| 70 |
+#view-group-categories ul {
|
|
| 71 | 71 |
list-style-type: none; |
| 72 | 72 |
padding: 0; |
| 73 | 73 |
} |
| ... | ... |
@@ -132,6 +132,10 @@ span.cat-color {
|
| 132 | 132 |
.group-title {
|
| 133 | 133 |
font-weight: bold; |
| 134 | 134 |
} |
| 135 |
+ |
|
| 136 |
+.nav a, #mybalances a, #add_category span {
|
|
| 137 |
+ cursor: pointer; |
|
| 138 |
+} |
|
| 135 | 139 |
</style> |
| 136 | 140 |
<body> |
| 137 | 141 |
<div class="navbar navbar-inverse navbar-fixed-top" role="navigation"> |
| ... | ... |
@@ -175,7 +179,6 @@ span.cat-color {
|
| 175 | 179 |
<tr> |
| 176 | 180 |
<th>Groupe</th> |
| 177 | 181 |
<th>Balance</th> |
| 178 |
- <th> </th> |
|
| 179 | 182 |
</tr> |
| 180 | 183 |
</thead> |
| 181 | 184 |
<tbody></tbody> |
| ... | ... |
@@ -183,7 +186,6 @@ span.cat-color {
|
| 183 | 186 |
<tr> |
| 184 | 187 |
<td id='total-label'>Total :</td> |
| 185 | 188 |
<td id='total-value'></td> |
| 186 |
- <td> </td> |
|
| 187 | 189 |
</tr> |
| 188 | 190 |
</tfoot> |
| 189 | 191 |
</table> |
| ... | ... |
@@ -256,6 +258,7 @@ span.cat-color {
|
| 256 | 258 |
</div> |
| 257 | 259 |
<div class="collapse navbar-collapse" id="bottom-navbar-collapse-1"> |
| 258 | 260 |
<ul class="nav navbar-nav navbar-right"> |
| 261 |
+ <li><a id='categories_group_btn'><span class='glyphicon glyphicon-th-list'></span> Catégories</span></a></li> |
|
| 259 | 262 |
<li><a id='trash_group_btn'><span class='glyphicon glyphicon-trash'></span> Corbeille</span></a></li> |
| 260 | 263 |
<li><a id='remove_group_btn'><span class='glyphicon glyphicon-floppy-remove'></span> Supprimer le groupe</span></a></li> |
| 261 | 264 |
</ul> |
| ... | ... |
@@ -309,6 +312,18 @@ span.cat-color {
|
| 309 | 312 |
</table> |
| 310 | 313 |
</div> |
| 311 | 314 |
|
| 315 |
+<div id='view-group-categories' class='part row'> |
|
| 316 |
+ <h1>Catégories <button type="button" class="btn btn-default go-back-group"><span class="glyphicon glyphicon-arrow-left"> Retour</span></button></h1> |
|
| 317 |
+ <div class='col-xs-6'> |
|
| 318 |
+ <ul> |
|
| 319 |
+ </ul> |
|
| 320 |
+ <div id="add_category" class='input-group'> |
|
| 321 |
+ <input type='text' class="form-control" placeholder='nom'/> |
|
| 322 |
+ <span class="input-group-addon"><span class="glyphicon glyphicon-plus"></span></span> |
|
| 323 |
+ </div> |
|
| 324 |
+ </div> |
|
| 325 |
+</div> |
|
| 326 |
+ |
|
| 312 | 327 |
<div class="modal fade" id="add_group_modal" tabindex="-1" role="dialog" aria-labelledby="addGroupModal" aria-hidden="true"> |
| 313 | 328 |
<div class="modal-dialog"> |
| 314 | 329 |
<div class="modal-content"> |
| ... | ... |
@@ -615,23 +630,6 @@ span.cat-color {
|
| 615 | 630 |
</div><!-- /.modal-dialog --> |
| 616 | 631 |
</div> |
| 617 | 632 |
|
| 618 |
-<div class="modal fade" id="grp_cat_modal" tabindex="-1" role="dialog" aria-labelledby="grpCatModal" aria-hidden="true"> |
|
| 619 |
- <div class="modal-dialog"> |
|
| 620 |
- <div class="modal-content"> |
|
| 621 |
- <div class="modal-header"> |
|
| 622 |
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> |
|
| 623 |
- <h4 class="modal-title">Catégories</h4> |
|
| 624 |
- </div> |
|
| 625 |
- <div class="modal-body"> |
|
| 626 |
- <ul id='grp_cat_list'></ul> |
|
| 627 |
- </div> |
|
| 628 |
- <div class="modal-footer"> |
|
| 629 |
- <button type="button" class="btn btn-default" data-dismiss="modal">Ok</button> |
|
| 630 |
- </div> |
|
| 631 |
- </div><!-- /.modal-content --> |
|
| 632 |
- </div><!-- /.modal-dialog --> |
|
| 633 |
-</div> |
|
| 634 |
- |
|
| 635 | 633 |
|
| 636 | 634 |
</div> |
| 637 | 635 |
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> |
| 638 | 636 |