PageRenderTime 34ms CodeModel.GetById 10ms RepoModel.GetById 0ms app.codeStats 0ms

/python/static/images.js

http://github.com/saaperezru/Zentity
JavaScript | 136 lines | 125 code | 2 blank | 9 comment | 3 complexity | 0ea0e4c8b34966f7970408574b48917f MD5 | raw file
  1. $(function(){
  2. // Image Model
  3. // ----------
  4. window.Image = Backbone.Model.extend({
  5. defaults: function() {
  6. return {
  7. selected: true,
  8. imgId: 0,
  9. };
  10. },
  11. toggle: function() {
  12. this.save({selected: !this.get("selected")});
  13. }
  14. });
  15. // Image Collection
  16. // ---------------
  17. window.ImageCollection = Backbone.Collection.extend({
  18. model: Image,
  19. localStorage: new Store("images"),
  20. selected: function() {
  21. return this.filter(function(image){ return image.get('selected'); });
  22. },
  23. remaining: function() {
  24. return this.without.apply(this, this.selected());
  25. },
  26. });
  27. window.Images = new ImageCollection;
  28. // Image Item View
  29. // --------------
  30. window.ImageView = Backbone.View.extend({
  31. tagName: "li",
  32. template: _.template(
  33. "<a class='<%= selected ? '' : 'deselected' %>'> \
  34. <img class=\"<%= selected ? '' : 'wrapper' %> thumbnail\" height=\"40\" width=\"40\"></img> \
  35. </a>"
  36. ),
  37. events: {
  38. "click img" : "toggleSelected",
  39. },
  40. initialize: function() {
  41. this.model.bind('change', this.render, this);
  42. this.model.bind('destroy', this.remove, this);
  43. },
  44. render: function() {
  45. $(this.el).html(this.template(this.model.toJSON()));
  46. this.setImage();
  47. return this;
  48. },
  49. setImage: function(){
  50. this.$('img').attr("src","/images/get?id=" + this.model.get('imgId'));
  51. },
  52. toggleSelected: function() {
  53. var model = this.model;
  54. $.ajax({
  55. url : "images/select?id=" + this.model.get("imgId") + "&s=" + !this.model.get("selected"),
  56. success: function(response){
  57. if(response.error) {
  58. console.log(data.error);
  59. }
  60. model.toggle();
  61. },
  62. });
  63. },
  64. remove: function() {
  65. $(this.el).remove();
  66. },
  67. clear: function() {
  68. this.model.destroy();
  69. }
  70. });
  71. // The Application
  72. // ---------------
  73. window.AppView = Backbone.View.extend({
  74. el : $('#imgapp'),
  75. statsTemplate : _.template(
  76. "<% if (total) { %> \
  77. <span class=\"image-count\"> \
  78. <span class=\"number\"><%= selected %></span> \
  79. <span class=\"word\"><%= selected == 1 ? 'item' : 'items' %></span> selected. \
  80. </span> \
  81. <% } %>"
  82. ),
  83. events : {
  84. "click #loadImages" : "createImages",
  85. "click .image-clear a": "clearDeselected",
  86. },
  87. initialize: function(){
  88. this.input = document.getElementById("imageInput");
  89. Images.bind('add', this.loadOne, this);
  90. Images.bind('reset', this.loadAll, this);
  91. Images.bind('all', this.render, this);
  92. this.createImages();
  93. },
  94. render: function() {
  95. this.$('#image-stats').html(this.statsTemplate({
  96. total: Images.length,
  97. selected: Images.selected().length,
  98. remaining: Images.remaining().length
  99. }));
  100. },
  101. loadOne :function(image) {
  102. var view = new ImageView({model:image});
  103. this.$('#image-list').append(view.render().el);
  104. },
  105. loadAll :function() {
  106. Images.each(this.loadOne)
  107. },
  108. createImages : function() {
  109. $.ajax({
  110. url : "/images/list",
  111. success: function(response){
  112. if(response.error) {
  113. console.log(data.error);
  114. }
  115. if(response.images) {
  116. console.log(response);
  117. _.each(response.images,function(image){
  118. Images.create({
  119. selected : image.selected,
  120. imgId : image.imgId,
  121. });
  122. });
  123. }
  124. }
  125. });
  126. },
  127. clearDeselected : function() {
  128. _.each(Images.remaining(), function(image){ image.destroy(); });
  129. return false;
  130. }
  131. });
  132. // Finally, we kick things off by creating the **App**.
  133. window.App = new AppView;
  134. });