PageRenderTime 41ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/public/scripts/files.js

https://bitbucket.org/mpuckett/iostudio-whiteboard
JavaScript | 80 lines | 70 code | 9 blank | 1 comment | 0 complexity | 8d06932e1605a4c54ccb8dd2678eaf54 MD5 | raw file
Possible License(s): Apache-2.0, BSD-3-Clause, MIT
  1. var FileModel = Backbone.Model.extend({
  2. defaults: {
  3. 'name': 'no-file.txt',
  4. 'data': 'data:',
  5. 'timestamp': 'New Date',
  6. 'location': {
  7. 'offsetX': 0,
  8. 'offsetY': 0
  9. }
  10. }
  11. });
  12. var FilesCollection = Backbone.Collection.extend({
  13. model: FileModel,
  14. initialize: function () {
  15. }
  16. });
  17. var FilesListView = Backbone.View.extend({
  18. el: '#files-list',
  19. //template: (function () { return Handlebars.compile( $('#template-file').html() ) }()),
  20. template: $('#template-file').html(),
  21. initialize: function () {
  22. this.on('add', this.add);
  23. },
  24. render: function (file) {
  25. return Mustache.render(this.template, file);
  26. },
  27. add: function (file) {
  28. var html = this.render(file);
  29. this.$el.append(html);
  30. }
  31. });
  32. var FileDropView = Backbone.View.extend({
  33. el: 'body',
  34. events: {
  35. 'dragover': function () {
  36. this.$el.addClass('dragover');
  37. },
  38. 'dragleave': function () {
  39. this.$el.removeClass('dragover');
  40. },
  41. 'drop': function (e) {
  42. e.preventDefault();
  43. this.$el.removeClass('dragover');
  44. this.trigger('_fileAdded', e.originalEvent.dataTransfer.files[0]);
  45. }
  46. }
  47. });
  48. var FilesController = Backbone.Controller.extend({
  49. initialize: function () {
  50. var t = this;
  51. var filesCollection = this.filesCollection = new FilesCollection();
  52. var filesListView = this.filesListView = new FilesListView();
  53. var fileDropView = this.fileDropView = new FileDropView();
  54. this.on('add', function (file) {
  55. filesCollection.add(file);
  56. });
  57. filesCollection.on('add', function (file) {
  58. filesListView.trigger('add', file.toJSON() );
  59. });
  60. fileDropView.on('_fileAdded', function (file) {
  61. var reader = new FileReader();
  62. reader.onload = function () {
  63. t.trigger('_fileAdded', { name: file.name, timestamp: new Date().getTime(), data: this.result });
  64. };
  65. reader.readAsDataURL(file);
  66. });
  67. },
  68. add: function (file) {
  69. this.filesCollection.add(file);
  70. }
  71. });