From 31c5d39eb7cbc0daf515defde4af1485dfcca5e0 Mon Sep 17 00:00:00 2001 From: jjousun Date: Tue, 13 Jun 2017 16:38:40 -0700 Subject: [PATCH 01/23] Created movie model, movies collection, and views for each --- build/index.html | 2 +- src/collections/movie_list.js | 11 ++++++ src/models/movie.js | 7 ++++ src/views/movie_list_view.js | 63 +++++++++++++++++++++++++++++++++++ src/views/movie_view.js | 27 +++++++++++++++ 5 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 src/collections/movie_list.js create mode 100644 src/models/movie.js create mode 100644 src/views/movie_list_view.js create mode 100644 src/views/movie_view.js diff --git a/build/index.html b/build/index.html index 03869595f..efd79870d 100644 --- a/build/index.html +++ b/build/index.html @@ -8,7 +8,7 @@ Backbone Baseline - +

HALP

diff --git a/src/collections/movie_list.js b/src/collections/movie_list.js new file mode 100644 index 000000000..1b6d2e12d --- /dev/null +++ b/src/collections/movie_list.js @@ -0,0 +1,11 @@ +import Backbone from 'backbone'; +import _ from 'underscore'; +import $ from 'jquery'; +import Movie from 'app/models/movie'; + +var MovieList = Backbone.Collection.extend({ + model: Movie, + url: "http://localhost:3000/movies" +}); + +export default MovieList; diff --git a/src/models/movie.js b/src/models/movie.js new file mode 100644 index 000000000..0fcda88ae --- /dev/null +++ b/src/models/movie.js @@ -0,0 +1,7 @@ +import Backbone from 'backbone'; + +var Movie = Backbone.Model.extend({ + +}); + +export default Movie; diff --git a/src/views/movie_list_view.js b/src/views/movie_list_view.js new file mode 100644 index 000000000..16fa7209a --- /dev/null +++ b/src/views/movie_list_view.js @@ -0,0 +1,63 @@ +import Backbone from 'backbone'; +import _ from 'underscore'; +import $ from 'jquery'; +import MovieView from './movie_view'; +import Movie from '../models/movie'; + +var MovieListView = Backbone.View.extend({ + initialize: function(params) { + this.template = params.template; + console.log(this.el); + this.listenTo(this.model, "update", this.render); + + // this.model.fetch({reset: true, success: function() {}}); + }, + render: function() { + // this.$("#pet-list").empty(); + var that = this; + + this.model.each(function(pet) { + var movieView = new MovieView( { + model: Movie, + template: that.template, + }); + that.$('#pet-list').append(petView.render().$el); + }); + + return this; + }, + events: { + // "click #add-pet" : "addPet" + }, + getFormData: function() { + var formName = this.$("#name").val(); + this.$("#name").val(''); + + var formBreed = this.$("#breed").val(); + this.$("#breed").val(''); + + var formAge = this.$("#age").val(); + this.$("#age").val(''); + + var formDescription = this.$("#description").val(); + this.$("#description").val(''); + + var formVaccinated = this.$('#vaccinated-checkbox').is(":checked"); + this.$('#vaccinated-checkbox').prop('checked', false); + + return { + name: formName, + breed: formBreed, + age: formAge, + description: formDescription, + vaccinate: formVaccinated + }; + }, + addMovie: function() { + var movie = new Movie(this.getFormData()); + + this.model.create(movie); + } +}); + +export default MovieListView; diff --git a/src/views/movie_view.js b/src/views/movie_view.js new file mode 100644 index 000000000..1a695865a --- /dev/null +++ b/src/views/movie_view.js @@ -0,0 +1,27 @@ +import Backbone from 'backbone'; +import _ from 'underscore'; +import $ from 'jquery'; +import Movie from '../models/movie'; + +var MovieView = Backbone.View.extend({ + initialize: function(params) { + this.template = params.template; + this.listenTo(this.model, "change", this.render); + }, + render: function() { + var compiledTemplate = this.template(this.model.toJSON()); + + this.$el.html(compiledTemplate); + + return this; + }, + events: { + // "click button.alert": "deletePet", + // "click button.success": "toggleComplete" + }, + deleteMovie: function() { + this.model.destroy(); + }, +}); + +export default MovieView; From 16ff9e75b03d39a19b674627480d2db104833b97 Mon Sep 17 00:00:00 2001 From: Jackie Watanabe Date: Tue, 13 Jun 2017 16:39:07 -0700 Subject: [PATCH 02/23] added initial js backbone files for results --- src/collections/result_list.js | 8 ++++++++ src/models/result.js | 7 +++++++ src/views/result_list_view.js | 12 ++++++++++++ src/views/result_view.js | 11 +++++++++++ 4 files changed, 38 insertions(+) create mode 100644 src/collections/result_list.js create mode 100644 src/models/result.js create mode 100644 src/views/result_list_view.js create mode 100644 src/views/result_view.js diff --git a/src/collections/result_list.js b/src/collections/result_list.js new file mode 100644 index 000000000..375fc03e1 --- /dev/null +++ b/src/collections/result_list.js @@ -0,0 +1,8 @@ +import Backbone from 'backbone'; +import Result from '../models/result.js'; + +var ResultList = Backbone.Collection.extend({ + +}); + +export default ResultList; diff --git a/src/models/result.js b/src/models/result.js new file mode 100644 index 000000000..62feff355 --- /dev/null +++ b/src/models/result.js @@ -0,0 +1,7 @@ +import Backbone from 'backbone'; + +var Result = Backbone.Model.extend({ + +}); + +export default Result; diff --git a/src/views/result_list_view.js b/src/views/result_list_view.js new file mode 100644 index 000000000..44637fad2 --- /dev/null +++ b/src/views/result_list_view.js @@ -0,0 +1,12 @@ +import Backbone from 'backbone'; +import _ from 'underscore'; +import $ from 'jquery'; +import ResultView from './result_view.js'; +import Result from '../models/result.js'; + +var ResultListView = Backbone.View.extend({ + +}); + + +export default ResultListView; diff --git a/src/views/result_view.js b/src/views/result_view.js new file mode 100644 index 000000000..50b1987a9 --- /dev/null +++ b/src/views/result_view.js @@ -0,0 +1,11 @@ +import Backbone from 'backbone'; +import _ from 'underscore'; +import $ from 'jquery'; +import Result from '../models/result.js'; + + +var ResultView = Backbone.View.extend({ + +}); + +export default ResultView; From 75352c2c9be8b1eb3f9c2aaf59fd7d77fe1d4573 Mon Sep 17 00:00:00 2001 From: jjousun Date: Wed, 14 Jun 2017 11:20:04 -0700 Subject: [PATCH 03/23] Rendering all movies from our Rails db --- build/index.html | 10 +++++++++- src/app.js | 16 +++++++++++++--- src/collections/movie_list.js | 2 +- src/views/movie_list_view.js | 10 ++++------ src/views/movie_view.js | 2 +- 5 files changed, 28 insertions(+), 12 deletions(-) diff --git a/build/index.html b/build/index.html index efd79870d..96468c4ef 100644 --- a/build/index.html +++ b/build/index.html @@ -8,7 +8,15 @@ Backbone Baseline -

HALP

+
+
+
+ +
+ + diff --git a/src/app.js b/src/app.js index 58b77997c..958055d53 100644 --- a/src/app.js +++ b/src/app.js @@ -3,10 +3,20 @@ // Import jQuery & Underscore import $ from 'jquery'; import _ from 'underscore'; +// import Movie from '/models/movie'; +import MovieList from 'collections/movie_list'; +// import MovieView from '/views/movie_view'; +import MovieListView from 'views/movie_list_view'; + +var myMovieList = new MovieList(); +myMovieList.fetch(); // ready to go $(document).ready(function() { - - $('section.main-content').append('

Hello World!

'); - + var myMovieListView = new MovieListView( { + model: myMovieList, + template: _.template($('#movie-template').html()), + el: 'main' + }); + myMovieListView.render(); }); diff --git a/src/collections/movie_list.js b/src/collections/movie_list.js index 1b6d2e12d..9a55b090b 100644 --- a/src/collections/movie_list.js +++ b/src/collections/movie_list.js @@ -1,7 +1,7 @@ import Backbone from 'backbone'; import _ from 'underscore'; import $ from 'jquery'; -import Movie from 'app/models/movie'; +import Movie from '../models/movie'; var MovieList = Backbone.Collection.extend({ model: Movie, diff --git a/src/views/movie_list_view.js b/src/views/movie_list_view.js index 16fa7209a..c738632b7 100644 --- a/src/views/movie_list_view.js +++ b/src/views/movie_list_view.js @@ -9,19 +9,17 @@ var MovieListView = Backbone.View.extend({ this.template = params.template; console.log(this.el); this.listenTo(this.model, "update", this.render); - - // this.model.fetch({reset: true, success: function() {}}); }, render: function() { - // this.$("#pet-list").empty(); + this.$("#movie-list").empty(); var that = this; - this.model.each(function(pet) { + this.model.each(function(movie) { var movieView = new MovieView( { - model: Movie, + model: movie, template: that.template, }); - that.$('#pet-list').append(petView.render().$el); + that.$('#movie-list').append(movieView.render().$el); }); return this; diff --git a/src/views/movie_view.js b/src/views/movie_view.js index 1a695865a..c2ba2f392 100644 --- a/src/views/movie_view.js +++ b/src/views/movie_view.js @@ -9,7 +9,7 @@ var MovieView = Backbone.View.extend({ this.listenTo(this.model, "change", this.render); }, render: function() { - var compiledTemplate = this.template(this.model.toJSON()); + var compiledTemplate = this.template({movie: this.model.toJSON()}); this.$el.html(compiledTemplate); From 911f6e8de9ae1c70c327afed0625fc525a302075 Mon Sep 17 00:00:00 2001 From: jjousun Date: Wed, 14 Jun 2017 11:30:37 -0700 Subject: [PATCH 04/23] Working on search functionality --- build/index.html | 8 +++++++- src/views/movie_list_view.js | 32 ++++++++------------------------ 2 files changed, 15 insertions(+), 25 deletions(-) diff --git a/build/index.html b/build/index.html index 96468c4ef..6b85e78b3 100644 --- a/build/index.html +++ b/build/index.html @@ -5,10 +5,16 @@ - Backbone Baseline + Jouckie's Redbloxbuster
+
+ + +
diff --git a/src/views/movie_list_view.js b/src/views/movie_list_view.js index c738632b7..664f72554 100644 --- a/src/views/movie_list_view.js +++ b/src/views/movie_list_view.js @@ -25,36 +25,20 @@ var MovieListView = Backbone.View.extend({ return this; }, events: { - // "click #add-pet" : "addPet" + "click #submit-search" : "search" }, getFormData: function() { - var formName = this.$("#name").val(); - this.$("#name").val(''); - - var formBreed = this.$("#breed").val(); - this.$("#breed").val(''); - - var formAge = this.$("#age").val(); - this.$("#age").val(''); - - var formDescription = this.$("#description").val(); - this.$("#description").val(''); - - var formVaccinated = this.$('#vaccinated-checkbox').is(":checked"); - this.$('#vaccinated-checkbox').prop('checked', false); + var formTitle = this.$("#title").val(); + this.$("#title").val(''); return { - name: formName, - breed: formBreed, - age: formAge, - description: formDescription, - vaccinate: formVaccinated + title: formTitle }; }, - addMovie: function() { - var movie = new Movie(this.getFormData()); - - this.model.create(movie); + search: function() { + // var movie = new Movie(this.getFormData()); + // + // this.model.create(movie); } }); From 8f1844174256ec17d929deb91152e7f4851f2bca Mon Sep 17 00:00:00 2001 From: Jackie Watanabe Date: Wed, 14 Jun 2017 11:32:07 -0700 Subject: [PATCH 05/23] added model, collection, and views --- src/collections/result_list.js | 7 ++++++- src/models/result.js | 16 ++++++++++++++++ src/views/result_list_view.js | 27 +++++++++++++++++++++++++++ src/views/result_view.js | 14 ++++++++++++++ 4 files changed, 63 insertions(+), 1 deletion(-) diff --git a/src/collections/result_list.js b/src/collections/result_list.js index 375fc03e1..c1629c115 100644 --- a/src/collections/result_list.js +++ b/src/collections/result_list.js @@ -2,7 +2,12 @@ import Backbone from 'backbone'; import Result from '../models/result.js'; var ResultList = Backbone.Collection.extend({ - + model: Result, + url: 'http://localhost:3000/movies?query=', + parse: function(data) { + return data.results; + // // data["tasks"] + } }); export default ResultList; diff --git a/src/models/result.js b/src/models/result.js index 62feff355..743116738 100644 --- a/src/models/result.js +++ b/src/models/result.js @@ -2,6 +2,22 @@ import Backbone from 'backbone'; var Result = Backbone.Model.extend({ + defaults: { + title: 'no title added', + poster_path: '' + }, + + initialize: function(params) { + console.log("Starting", params); + this.logStatus(); + }, + + logStatus: function() { + console.log("Model: " + this.cid); + console.log("Title: " + this.get("title")); + // console.log("Completed: " + this.get("completed")); + }, + }); export default Result; diff --git a/src/views/result_list_view.js b/src/views/result_list_view.js index 44637fad2..12f7b715b 100644 --- a/src/views/result_list_view.js +++ b/src/views/result_list_view.js @@ -5,6 +5,33 @@ import ResultView from './result_view.js'; import Result from '../models/result.js'; var ResultListView = Backbone.View.extend({ + initialize: function(params) { + this.template = params.template; + + // this.template2 = params.detailsTemplate; + + this.listenTo(this.model, "update", this.render); + }, + render: function() { + + this.$('#result-list').empty(); + var that = this; + + // looped through collection + this.model.each(function(result) { + // created a new view for each pet + var myResultView = new ResultView({ + model: result, + template: that.template + // tagName: 'li' + }); + + // that.listenTo(myResultView, "selected", that.petDeets); + that.$('#result-list').append(myResultView.render().$el); + }); + return this; + +} }); diff --git a/src/views/result_view.js b/src/views/result_view.js index 50b1987a9..56f0ccf7d 100644 --- a/src/views/result_view.js +++ b/src/views/result_view.js @@ -5,6 +5,20 @@ import Result from '../models/result.js'; var ResultView = Backbone.View.extend({ + initialize: function(params) { + this.template = params.template; + + // this.$el.addClass("task-item column column-block"); + // no parentheses on this.render because you're not calling it here... just telling listener, when 'change' happens, to call this.render + this.listenTo(this.model, "change", this.render); + }, + render: function() { + var compiledTemplate = this.template(this.model.toJSON()); + + this.$el.html(compiledTemplate); + + return this; + } }); From 70823985928afb2c1bb3b1cd589f3c984615960c Mon Sep 17 00:00:00 2001 From: Jackie Watanabe Date: Wed, 14 Jun 2017 14:00:40 -0700 Subject: [PATCH 06/23] added options to fetch so that it adds query term to url --- src/collections/result_list.js | 5 ++++- src/views/movie_list_view.js | 33 ++++++++++++++++++++++++++++++++- src/views/result_list_view.js | 13 ++++++++----- src/views/result_view.js | 2 +- 4 files changed, 45 insertions(+), 8 deletions(-) diff --git a/src/collections/result_list.js b/src/collections/result_list.js index c1629c115..3d1dcb6f1 100644 --- a/src/collections/result_list.js +++ b/src/collections/result_list.js @@ -1,13 +1,16 @@ import Backbone from 'backbone'; import Result from '../models/result.js'; + var ResultList = Backbone.Collection.extend({ model: Result, - url: 'http://localhost:3000/movies?query=', + url: 'http://localhost:3000/movies', + // data: data, parse: function(data) { return data.results; // // data["tasks"] } }); +console.log("stuff in result_list"); export default ResultList; diff --git a/src/views/movie_list_view.js b/src/views/movie_list_view.js index 664f72554..d04fb0caf 100644 --- a/src/views/movie_list_view.js +++ b/src/views/movie_list_view.js @@ -3,6 +3,8 @@ import _ from 'underscore'; import $ from 'jquery'; import MovieView from './movie_view'; import Movie from '../models/movie'; +import ResultList from '../collections/result_list'; +import ResultListView from './result_list_view'; var MovieListView = Backbone.View.extend({ initialize: function(params) { @@ -29,6 +31,7 @@ var MovieListView = Backbone.View.extend({ }, getFormData: function() { var formTitle = this.$("#title").val(); + console.log("This is formTitle: " + formTitle); this.$("#title").val(''); return { @@ -36,9 +39,37 @@ var MovieListView = Backbone.View.extend({ }; }, search: function() { - // var movie = new Movie(this.getFormData()); + + // var myPetList = new PetList(); + // myPetList.fetch(); + var mySearchTerm = this.getFormData().title; + var resultList = new ResultList(); + console.log("******getFormData:" + typeof mySearchTerm); + // console.log(this.getFormData()); + + // var formTitle = this.$("#title").val(); + // console.log(">>>>" + formTitle); + // var mySearchTerm = formTitle; + // var mySearchTerm = this.getFormData().title; + resultList.fetch({data: {query: mySearchTerm} + + }); + + + + var myResultListView = new ResultListView( { + model: resultList, + template: _.template($('#movie-template').html()), + params: this.getFormData(), + el: 'main' + }); + + console.log(myResultListView); + + myResultListView.render(); // // this.model.create(movie); + } }); diff --git a/src/views/result_list_view.js b/src/views/result_list_view.js index 12f7b715b..f3961f3b8 100644 --- a/src/views/result_list_view.js +++ b/src/views/result_list_view.js @@ -1,20 +1,23 @@ import Backbone from 'backbone'; import _ from 'underscore'; import $ from 'jquery'; -import ResultView from './result_view.js'; -import Result from '../models/result.js'; +import ResultView from './result_view'; +import Result from '../models/result'; + var ResultListView = Backbone.View.extend({ initialize: function(params) { this.template = params.template; + console.log("something's happening in result_list_view"); // this.template2 = params.detailsTemplate; this.listenTo(this.model, "update", this.render); }, render: function() { - - this.$('#result-list').empty(); + // console.log("I'm in the result_list_view render!!!!"); + this.$('#movie-list').empty(); + // this.$('#result-list').empty(); var that = this; // looped through collection @@ -27,7 +30,7 @@ var ResultListView = Backbone.View.extend({ }); // that.listenTo(myResultView, "selected", that.petDeets); - that.$('#result-list').append(myResultView.render().$el); + that.$('#movie-list').append(myResultView.render().$el); }); return this; diff --git a/src/views/result_view.js b/src/views/result_view.js index 56f0ccf7d..4c897dad6 100644 --- a/src/views/result_view.js +++ b/src/views/result_view.js @@ -13,7 +13,7 @@ var ResultView = Backbone.View.extend({ this.listenTo(this.model, "change", this.render); }, render: function() { - var compiledTemplate = this.template(this.model.toJSON()); + var compiledTemplate = this.template({movie: this.model.toJSON()}); this.$el.html(compiledTemplate); From 57063617de1143cd88845e9e684ee0154e2892e1 Mon Sep 17 00:00:00 2001 From: Jackie Watanabe Date: Wed, 14 Jun 2017 14:06:36 -0700 Subject: [PATCH 07/23] got rid of parse in ResultList so that results actually show up --- src/collections/result_list.js | 8 ++++---- src/views/movie_list_view.js | 9 --------- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/src/collections/result_list.js b/src/collections/result_list.js index 3d1dcb6f1..1e11700ed 100644 --- a/src/collections/result_list.js +++ b/src/collections/result_list.js @@ -6,10 +6,10 @@ var ResultList = Backbone.Collection.extend({ model: Result, url: 'http://localhost:3000/movies', // data: data, - parse: function(data) { - return data.results; - // // data["tasks"] - } + // parse: function(data) { + // return data.results; + // // // data["tasks"] + // } }); console.log("stuff in result_list"); diff --git a/src/views/movie_list_view.js b/src/views/movie_list_view.js index d04fb0caf..c958adf46 100644 --- a/src/views/movie_list_view.js +++ b/src/views/movie_list_view.js @@ -40,23 +40,14 @@ var MovieListView = Backbone.View.extend({ }, search: function() { - // var myPetList = new PetList(); - // myPetList.fetch(); var mySearchTerm = this.getFormData().title; var resultList = new ResultList(); console.log("******getFormData:" + typeof mySearchTerm); - // console.log(this.getFormData()); - // var formTitle = this.$("#title").val(); - // console.log(">>>>" + formTitle); - // var mySearchTerm = formTitle; - // var mySearchTerm = this.getFormData().title; resultList.fetch({data: {query: mySearchTerm} }); - - var myResultListView = new ResultListView( { model: resultList, template: _.template($('#movie-template').html()), From 2d940c89bbbcc58372669ea0d50eaecba2fac5fd Mon Sep 17 00:00:00 2001 From: Jackie Watanabe Date: Wed, 14 Jun 2017 14:20:15 -0700 Subject: [PATCH 08/23] added button to result list view --- build/index.html | 7 +++++++ src/views/movie_list_view.js | 2 +- src/views/result_list_view.js | 3 ++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/build/index.html b/build/index.html index 6b85e78b3..502aa1f59 100644 --- a/build/index.html +++ b/build/index.html @@ -17,12 +17,19 @@
+
+ + + diff --git a/src/views/movie_list_view.js b/src/views/movie_list_view.js index c958adf46..202c81786 100644 --- a/src/views/movie_list_view.js +++ b/src/views/movie_list_view.js @@ -50,7 +50,7 @@ var MovieListView = Backbone.View.extend({ var myResultListView = new ResultListView( { model: resultList, - template: _.template($('#movie-template').html()), + template: _.template($('#result-template').html()), params: this.getFormData(), el: 'main' }); diff --git a/src/views/result_list_view.js b/src/views/result_list_view.js index f3961f3b8..7f184778d 100644 --- a/src/views/result_list_view.js +++ b/src/views/result_list_view.js @@ -17,6 +17,7 @@ var ResultListView = Backbone.View.extend({ render: function() { // console.log("I'm in the result_list_view render!!!!"); this.$('#movie-list').empty(); + this.$('#result-list').empty(); // this.$('#result-list').empty(); var that = this; @@ -30,7 +31,7 @@ var ResultListView = Backbone.View.extend({ }); // that.listenTo(myResultView, "selected", that.petDeets); - that.$('#movie-list').append(myResultView.render().$el); + that.$('#result-list').append(myResultView.render().$el); }); return this; From 497bd449f1b8482a0e85a57f8d1aebb3ca54aae2 Mon Sep 17 00:00:00 2001 From: jjousun Date: Wed, 14 Jun 2017 14:56:18 -0700 Subject: [PATCH 09/23] Made images show up --- build/index.html | 3 +++ src/models/movie.js | 4 +++- src/models/result.js | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/build/index.html b/build/index.html index 502aa1f59..bfb453941 100644 --- a/build/index.html +++ b/build/index.html @@ -9,6 +9,7 @@
+

Jouckie's Redbloxbuster

diff --git a/src/models/movie.js b/src/models/movie.js index 0fcda88ae..dcfb0a188 100644 --- a/src/models/movie.js +++ b/src/models/movie.js @@ -1,7 +1,9 @@ import Backbone from 'backbone'; var Movie = Backbone.Model.extend({ - + defaults: { + image_url: "http://7bna.net/images/random-image/random-image-4.jpg" + } }); export default Movie; diff --git a/src/models/result.js b/src/models/result.js index 743116738..da2b5ad27 100644 --- a/src/models/result.js +++ b/src/models/result.js @@ -4,7 +4,7 @@ var Result = Backbone.Model.extend({ defaults: { title: 'no title added', - poster_path: '' + image_url: "http://7bna.net/images/random-image/random-image-4.jpg" }, initialize: function(params) { From 7eabc32b266ca86c9f1996971ace1086c05352bb Mon Sep 17 00:00:00 2001 From: jjousun Date: Thu, 15 Jun 2017 10:21:37 -0700 Subject: [PATCH 10/23] Finished add new movie functionality --- build/index.html | 7 +++-- src/app.js | 1 + src/models/movie.js | 2 +- src/models/result.js | 3 +-- src/views/result_list_view.js | 50 ++++++++++++++++++++++------------- src/views/result_view.js | 20 +++++++++++++- 6 files changed, 58 insertions(+), 25 deletions(-) diff --git a/build/index.html b/build/index.html index bfb453941..2dc3aa19d 100644 --- a/build/index.html +++ b/build/index.html @@ -22,12 +22,15 @@

Jouckie's Redbloxbuster

diff --git a/src/app.js b/src/app.js index 958055d53..d20d62356 100644 --- a/src/app.js +++ b/src/app.js @@ -19,4 +19,5 @@ $(document).ready(function() { el: 'main' }); myMovieListView.render(); + }); diff --git a/src/models/movie.js b/src/models/movie.js index dcfb0a188..a0a68f868 100644 --- a/src/models/movie.js +++ b/src/models/movie.js @@ -2,7 +2,7 @@ import Backbone from 'backbone'; var Movie = Backbone.Model.extend({ defaults: { - image_url: "http://7bna.net/images/random-image/random-image-4.jpg" + // image_url: "http://7bna.net/images/random-image/random-image-4.jpg" } }); diff --git a/src/models/result.js b/src/models/result.js index da2b5ad27..feb755845 100644 --- a/src/models/result.js +++ b/src/models/result.js @@ -16,8 +16,7 @@ var Result = Backbone.Model.extend({ console.log("Model: " + this.cid); console.log("Title: " + this.get("title")); // console.log("Completed: " + this.get("completed")); - }, - + } }); export default Result; diff --git a/src/views/result_list_view.js b/src/views/result_list_view.js index 7f184778d..097e9a80c 100644 --- a/src/views/result_list_view.js +++ b/src/views/result_list_view.js @@ -16,27 +16,39 @@ var ResultListView = Backbone.View.extend({ }, render: function() { // console.log("I'm in the result_list_view render!!!!"); - this.$('#movie-list').empty(); - this.$('#result-list').empty(); - // this.$('#result-list').empty(); - var that = this; - - // looped through collection - this.model.each(function(result) { - // created a new view for each pet - var myResultView = new ResultView({ - model: result, - template: that.template - // tagName: 'li' + this.$('#movie-list').empty(); + this.$('#result-list').empty(); + // this.$('#result-list').empty(); + var that = this; + + // looped through collection + this.model.each(function(result) { + // created a new view for each pet + var myResultView = new ResultView({ + model: result, + template: that.template + // tagName: 'li' + }); + // that.listenTo(myResultView, "adding", that.addNewMovie); + // console.log(">>>>>>>>>>> TRIGGERED"); + // that.listenTo(myResultView, "selected", that.petDeets); + that.$('#result-list').append(myResultView.render().$el); }); + return this; - // that.listenTo(myResultView, "selected", that.petDeets); - that.$('#result-list').append(myResultView.render().$el); - }); - return this; - -} - + }, + // addNewMovie: function(result) { + // result.save(); + // // var movie = new Movie(result); + // // this.model.create(movie); + // // var addedMovieView = new MovieView( { + // // model: result, + // // template: this.template, + // // }); + // // this.$('#movie-list').append(addedMovieView.render().$el); + // + // console.log("<<<<<<<<<<<< I'm in addNewMovie function"); + // } }); diff --git a/src/views/result_view.js b/src/views/result_view.js index 4c897dad6..4e83a189e 100644 --- a/src/views/result_view.js +++ b/src/views/result_view.js @@ -2,6 +2,7 @@ import Backbone from 'backbone'; import _ from 'underscore'; import $ from 'jquery'; import Result from '../models/result.js'; +import Movie from '../models/movie'; var ResultView = Backbone.View.extend({ @@ -18,8 +19,25 @@ var ResultView = Backbone.View.extend({ this.$el.html(compiledTemplate); return this; - } + }, + events: { + "click #add-movie" : "addMovie" + }, + addMovie: function() { + // var movie = new Movie(this.model.attributes.title); + // movie.save({data: {title: this.model.attributes.title}}); + // console.log(">>>>>>>>>>>>>>>>" + this.model.attributes.title); + // this.model.create(movie); + + // console.log(">>>>>>>>>>>>>>> I'm in addMovie function"); + // this.trigger("adding", this.model); + console.log(">>>>>>>>>>>>>>>>>> I'm in the trigger"); + // console.log(this.model); + + + this.model.save(); + } }); export default ResultView; From a79708c5a7f02dc2d3246d1fa43c521c52db3cb2 Mon Sep 17 00:00:00 2001 From: jjousun Date: Thu, 15 Jun 2017 10:26:11 -0700 Subject: [PATCH 11/23] Cleaned up comments --- src/collections/result_list.js | 7 ------- src/models/movie.js | 2 +- src/models/result.js | 2 -- src/views/movie_list_view.js | 10 ---------- src/views/movie_view.js | 9 +-------- src/views/result_list_view.js | 28 ++-------------------------- src/views/result_view.js | 15 --------------- 7 files changed, 4 insertions(+), 69 deletions(-) diff --git a/src/collections/result_list.js b/src/collections/result_list.js index 1e11700ed..e6b35c5bd 100644 --- a/src/collections/result_list.js +++ b/src/collections/result_list.js @@ -1,16 +1,9 @@ import Backbone from 'backbone'; import Result from '../models/result.js'; - var ResultList = Backbone.Collection.extend({ model: Result, url: 'http://localhost:3000/movies', - // data: data, - // parse: function(data) { - // return data.results; - // // // data["tasks"] - // } }); -console.log("stuff in result_list"); export default ResultList; diff --git a/src/models/movie.js b/src/models/movie.js index a0a68f868..dcfb0a188 100644 --- a/src/models/movie.js +++ b/src/models/movie.js @@ -2,7 +2,7 @@ import Backbone from 'backbone'; var Movie = Backbone.Model.extend({ defaults: { - // image_url: "http://7bna.net/images/random-image/random-image-4.jpg" + image_url: "http://7bna.net/images/random-image/random-image-4.jpg" } }); diff --git a/src/models/result.js b/src/models/result.js index feb755845..4696a4334 100644 --- a/src/models/result.js +++ b/src/models/result.js @@ -8,14 +8,12 @@ var Result = Backbone.Model.extend({ }, initialize: function(params) { - console.log("Starting", params); this.logStatus(); }, logStatus: function() { console.log("Model: " + this.cid); console.log("Title: " + this.get("title")); - // console.log("Completed: " + this.get("completed")); } }); diff --git a/src/views/movie_list_view.js b/src/views/movie_list_view.js index 202c81786..e173d8165 100644 --- a/src/views/movie_list_view.js +++ b/src/views/movie_list_view.js @@ -9,7 +9,6 @@ import ResultListView from './result_list_view'; var MovieListView = Backbone.View.extend({ initialize: function(params) { this.template = params.template; - console.log(this.el); this.listenTo(this.model, "update", this.render); }, render: function() { @@ -31,7 +30,6 @@ var MovieListView = Backbone.View.extend({ }, getFormData: function() { var formTitle = this.$("#title").val(); - console.log("This is formTitle: " + formTitle); this.$("#title").val(''); return { @@ -39,13 +37,10 @@ var MovieListView = Backbone.View.extend({ }; }, search: function() { - var mySearchTerm = this.getFormData().title; var resultList = new ResultList(); - console.log("******getFormData:" + typeof mySearchTerm); resultList.fetch({data: {query: mySearchTerm} - }); var myResultListView = new ResultListView( { @@ -55,12 +50,7 @@ var MovieListView = Backbone.View.extend({ el: 'main' }); - console.log(myResultListView); - myResultListView.render(); - // - // this.model.create(movie); - } }); diff --git a/src/views/movie_view.js b/src/views/movie_view.js index c2ba2f392..24044091e 100644 --- a/src/views/movie_view.js +++ b/src/views/movie_view.js @@ -14,14 +14,7 @@ var MovieView = Backbone.View.extend({ this.$el.html(compiledTemplate); return this; - }, - events: { - // "click button.alert": "deletePet", - // "click button.success": "toggleComplete" - }, - deleteMovie: function() { - this.model.destroy(); - }, + } }); export default MovieView; diff --git a/src/views/result_list_view.js b/src/views/result_list_view.js index 097e9a80c..3f1b56db7 100644 --- a/src/views/result_list_view.js +++ b/src/views/result_list_view.js @@ -8,48 +8,24 @@ import Result from '../models/result'; var ResultListView = Backbone.View.extend({ initialize: function(params) { this.template = params.template; - console.log("something's happening in result_list_view"); - - // this.template2 = params.detailsTemplate; - this.listenTo(this.model, "update", this.render); }, render: function() { - // console.log("I'm in the result_list_view render!!!!"); this.$('#movie-list').empty(); this.$('#result-list').empty(); - // this.$('#result-list').empty(); + var that = this; - // looped through collection this.model.each(function(result) { - // created a new view for each pet var myResultView = new ResultView({ model: result, template: that.template - // tagName: 'li' }); - // that.listenTo(myResultView, "adding", that.addNewMovie); - // console.log(">>>>>>>>>>> TRIGGERED"); - // that.listenTo(myResultView, "selected", that.petDeets); that.$('#result-list').append(myResultView.render().$el); }); return this; - }, - // addNewMovie: function(result) { - // result.save(); - // // var movie = new Movie(result); - // // this.model.create(movie); - // // var addedMovieView = new MovieView( { - // // model: result, - // // template: this.template, - // // }); - // // this.$('#movie-list').append(addedMovieView.render().$el); - // - // console.log("<<<<<<<<<<<< I'm in addNewMovie function"); - // } + } }); - export default ResultListView; diff --git a/src/views/result_view.js b/src/views/result_view.js index 4e83a189e..86dcf727f 100644 --- a/src/views/result_view.js +++ b/src/views/result_view.js @@ -8,9 +8,6 @@ import Movie from '../models/movie'; var ResultView = Backbone.View.extend({ initialize: function(params) { this.template = params.template; - - // this.$el.addClass("task-item column column-block"); - // no parentheses on this.render because you're not calling it here... just telling listener, when 'change' happens, to call this.render this.listenTo(this.model, "change", this.render); }, render: function() { @@ -24,18 +21,6 @@ var ResultView = Backbone.View.extend({ "click #add-movie" : "addMovie" }, addMovie: function() { - // var movie = new Movie(this.model.attributes.title); - // movie.save({data: {title: this.model.attributes.title}}); - // console.log(">>>>>>>>>>>>>>>>" + this.model.attributes.title); - // this.model.create(movie); - - - // console.log(">>>>>>>>>>>>>>> I'm in addMovie function"); - // this.trigger("adding", this.model); - console.log(">>>>>>>>>>>>>>>>>> I'm in the trigger"); - // console.log(this.model); - - this.model.save(); } }); From 9c34b46707ebe9cf12f5db014b7019c08b1139a7 Mon Sep 17 00:00:00 2001 From: jjousun Date: Thu, 15 Jun 2017 10:29:44 -0700 Subject: [PATCH 12/23] Removed url p tags --- build/index.html | 3 --- 1 file changed, 3 deletions(-) diff --git a/build/index.html b/build/index.html index 2dc3aa19d..ad8574c84 100644 --- a/build/index.html +++ b/build/index.html @@ -23,9 +23,6 @@

Jouckie's Redbloxbuster

From d34fe1f2e6c710e0020cf03efb46a7697486457b Mon Sep 17 00:00:00 2001 From: jjousun Date: Fri, 16 Jun 2017 10:25:43 -0700 Subject: [PATCH 13/23] AWESOME LOGO MADE! Also some styling happenin --- build/css/styles.css | 37 ++++++++++++++++++++++++++-- build/images/Redbloxbuster_logo.png | Bin 0 -> 84759 bytes build/index.html | 37 +++++++++++++++++----------- src/app.js | 5 ++++ 4 files changed, 63 insertions(+), 16 deletions(-) create mode 100644 build/images/Redbloxbuster_logo.png diff --git a/build/css/styles.css b/build/css/styles.css index 68a79a569..24b7d6fc0 100644 --- a/build/css/styles.css +++ b/build/css/styles.css @@ -1,11 +1,11 @@ @include foundation-everything; main { - background: lightblue; + background: white; } header { - background-color: lightgreen; + background-color: firebrick; padding: 0.5rem; } @@ -42,3 +42,36 @@ div { border-style: solid; } */ +#thisisit, #thisisit:hover, #thisisit:focus { + text-decoration: none; + color: #aaf; + text-shadow: none; + -webkit-transition: 500ms linear 0s; + -moz-transition: 500ms linear 0s; + -o-transition: 500ms linear 0s; + transition: 500ms linear 0s; + outline: 0 none; + color: #fff; + text-shadow: -1px 1px 8px #ffc, 1px -1px 8px #fff; +} + +#logo { + width: 24vw; +} + +.home { + cursor: pointer; +} + +li { + list-style-type: none; +} + +#movie-list { + padding-top: 20px; +} + +#movie-list .column { + padding-top: 10px; + padding-bottom: 10px; +} diff --git a/build/images/Redbloxbuster_logo.png b/build/images/Redbloxbuster_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e4501e2345430134ac192312460afbe2c4d41b4f GIT binary patch literal 84759 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

@>M9xDnn7j3I^3^dOpoFH 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 B=NA9~ literal 0 HcmV?d00001 diff --git a/build/index.html b/build/index.html index ad8574c84..0141a2728 100644 --- a/build/index.html +++ b/build/index.html @@ -5,31 +5,40 @@ - Jouckie's Redbloxbuster + Joukie's Redbloxbuster

-

Jouckie's Redbloxbuster

-
- - +
+
+ +
+ + +
+

Joukie's Redbloxbuster

+
+
-
-
+
+
diff --git a/src/app.js b/src/app.js index d20d62356..a679dca0c 100644 --- a/src/app.js +++ b/src/app.js @@ -8,6 +8,10 @@ import MovieList from 'collections/movie_list'; // import MovieView from '/views/movie_view'; import MovieListView from 'views/movie_list_view'; +var homeHandler = function() { + window.location.replace("http://localhost:8081"); +}; + var myMovieList = new MovieList(); myMovieList.fetch(); @@ -20,4 +24,5 @@ $(document).ready(function() { }); myMovieListView.render(); + $('.home').click(homeHandler); }); From f797b3fd939acaebbdf2ddce99a7454e0cb38f54 Mon Sep 17 00:00:00 2001 From: jjousun Date: Fri, 16 Jun 2017 10:54:04 -0700 Subject: [PATCH 14/23] Fixed some padding, button colors, glowing hovers --- build/css/styles.css | 14 +++++++++++++- build/index.html | 3 ++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/build/css/styles.css b/build/css/styles.css index 24b7d6fc0..2696533ea 100644 --- a/build/css/styles.css +++ b/build/css/styles.css @@ -42,7 +42,7 @@ div { border-style: solid; } */ -#thisisit, #thisisit:hover, #thisisit:focus { +#thisisit:hover, #thisisit:focus { text-decoration: none; color: #aaf; text-shadow: none; @@ -55,6 +55,10 @@ div { text-shadow: -1px 1px 8px #ffc, 1px -1px 8px #fff; } +#thisisit { + color: #FFFFFF; +} + #logo { width: 24vw; } @@ -75,3 +79,11 @@ li { padding-top: 10px; padding-bottom: 10px; } + +.button.add { + background-color: red; +} + +.button.add:hover { + background-color: darkred; +} diff --git a/build/index.html b/build/index.html index 0141a2728..f5e1a7e0a 100644 --- a/build/index.html +++ b/build/index.html @@ -37,7 +37,8 @@

Joukie's Redbloxbuster

From 883e441ecf4e1315e5ca796e7db75852e6bd2b33 Mon Sep 17 00:00:00 2001 From: jjousun Date: Mon, 19 Jun 2017 10:30:54 -0700 Subject: [PATCH 15/23] Made our logo GLOW --- build/css/styles.css | 44 ++++++++++++++------------------------------ build/index.html | 12 +++++++++++- 2 files changed, 25 insertions(+), 31 deletions(-) diff --git a/build/css/styles.css b/build/css/styles.css index 2696533ea..5c4990fce 100644 --- a/build/css/styles.css +++ b/build/css/styles.css @@ -1,51 +1,25 @@ @include foundation-everything; main { - background: white; + background: white; } header { - background-color: firebrick; + background-color: black; padding: 0.5rem; } -#completed-checkbox { - display: inline; -} - -label { - display: inline; -} - button.success { margin-right: 1.2rem; display: inline; } -aside.create-tasklist { - background-color: navy; - color: #FFFFFF; -} -aside label { - color: #FFFFFF; -} - -.completed { - text-decoration: line-through; -} - div { display: inline; } -/* -* { - border-style: solid; -} -*/ + #thisisit:hover, #thisisit:focus { text-decoration: none; - color: #aaf; - text-shadow: none; -webkit-transition: 500ms linear 0s; -moz-transition: 500ms linear 0s; -o-transition: 500ms linear 0s; @@ -55,6 +29,16 @@ div { text-shadow: -1px 1px 8px #ffc, 1px -1px 8px #fff; } +#logo { + -webkit-filter: drop-shadow(0px 0px 0px rgba(255,255,255,0.80)); + -webkit-transition: all 0.5s linear; + -o-transition: all 0.5s linear; + transition: all 0.5s linear; +} + +#logo:hover { + -webkit-filter: drop-shadow(0px 0px 8px rgba(0, 231, 255, 0.8)); +} #thisisit { color: #FFFFFF; } @@ -85,5 +69,5 @@ li { } .button.add:hover { - background-color: darkred; + background-color: firebrick; } diff --git a/build/index.html b/build/index.html index f5e1a7e0a..06100cf2b 100644 --- a/build/index.html +++ b/build/index.html @@ -24,7 +24,12 @@

Joukie's Redbloxbuster

-
+
+ +
+ + From fbf990f12f89ad5454a64f9d452a5d336a2905f7 Mon Sep 17 00:00:00 2001 From: jjousun Date: Mon, 19 Jun 2017 10:57:34 -0700 Subject: [PATCH 16/23] Alert messages when added movie successfully --- build/index.html | 9 +++------ src/views/result_view.js | 6 +++++- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/build/index.html b/build/index.html index 06100cf2b..4967278b3 100644 --- a/build/index.html +++ b/build/index.html @@ -21,14 +21,11 @@

Joukie's Redbloxbuster

- + +
-
- -
+
diff --git a/src/views/result_view.js b/src/views/result_view.js index 86dcf727f..280799af5 100644 --- a/src/views/result_view.js +++ b/src/views/result_view.js @@ -21,7 +21,11 @@ var ResultView = Backbone.View.extend({ "click #add-movie" : "addMovie" }, addMovie: function() { - this.model.save(); + if(this.model.save()) { + alert("WHOOP THERE IT IS!"); + } else { + alert("Something went wrong :("); + } } }); From b8b8e03e4406c65a98400a03037c39deeedb6317 Mon Sep 17 00:00:00 2001 From: jjousun Date: Mon, 19 Jun 2017 14:27:12 -0700 Subject: [PATCH 17/23] Added details for a single selected movie --- build/css/styles.css | 4 ++++ build/index.html | 14 +++++++++----- src/app.js | 1 + src/views/movie_details_view.js | 17 +++++++++++++++++ src/views/movie_list_view.js | 12 ++++++++++++ src/views/movie_view.js | 7 +++++++ 6 files changed, 50 insertions(+), 5 deletions(-) create mode 100644 src/views/movie_details_view.js diff --git a/build/css/styles.css b/build/css/styles.css index 5c4990fce..ee5c824ab 100644 --- a/build/css/styles.css +++ b/build/css/styles.css @@ -51,6 +51,10 @@ div { cursor: pointer; } +.movie { + cursor: pointer; +} + li { list-style-type: none; } diff --git a/build/index.html b/build/index.html index 4967278b3..d34742f00 100644 --- a/build/index.html +++ b/build/index.html @@ -21,16 +21,16 @@

Joukie's Redbloxbuster

- +
-
+
- diff --git a/src/app.js b/src/app.js index a679dca0c..3e5b3736d 100644 --- a/src/app.js +++ b/src/app.js @@ -20,6 +20,7 @@ $(document).ready(function() { var myMovieListView = new MovieListView( { model: myMovieList, template: _.template($('#movie-template').html()), + detailsTemplate: _.template($('#movie-details-template').html()), el: 'main' }); myMovieListView.render(); diff --git a/src/views/movie_details_view.js b/src/views/movie_details_view.js new file mode 100644 index 000000000..faf823166 --- /dev/null +++ b/src/views/movie_details_view.js @@ -0,0 +1,17 @@ +import Backbone from 'backbone'; +import _ from 'underscore'; +import $ from 'jquery'; +import MovieView from './movie_view'; + +var MovieDetailsView = Backbone.View.extend({ + + initialize: function(params){ + this.template = params.template; + + }, + + + +}); + +export default MovieDetailsView; diff --git a/src/views/movie_list_view.js b/src/views/movie_list_view.js index e173d8165..e5a03b1b2 100644 --- a/src/views/movie_list_view.js +++ b/src/views/movie_list_view.js @@ -9,6 +9,8 @@ import ResultListView from './result_list_view'; var MovieListView = Backbone.View.extend({ initialize: function(params) { this.template = params.template; + this.template2 = params.detailsTemplate; + this.listenTo(this.model, "update", this.render); }, render: function() { @@ -20,6 +22,7 @@ var MovieListView = Backbone.View.extend({ model: movie, template: that.template, }); + that.listenTo(movieView, "selected", that.movieDetails); that.$('#movie-list').append(movieView.render().$el); }); @@ -51,6 +54,15 @@ var MovieListView = Backbone.View.extend({ }); myResultListView.render(); + }, + + movieDetails: function(movie) { + $('#movie-list').empty(); + $('#movie-details').empty(); + + var movieDetails = this.template2({movie: movie.attributes}); + + this.$('#movie-details').append(movieDetails); } }); diff --git a/src/views/movie_view.js b/src/views/movie_view.js index 24044091e..44763e67d 100644 --- a/src/views/movie_view.js +++ b/src/views/movie_view.js @@ -14,6 +14,13 @@ var MovieView = Backbone.View.extend({ this.$el.html(compiledTemplate); return this; + }, + events: { + "click .movie" : "detailsHandler" + }, + detailsHandler: function() { + console.log("I'm in the detailsHandler"); + this.trigger("selected", this.model); } }); From 44a25bf3695e737bb9ae524d70aec3177275f4ec Mon Sep 17 00:00:00 2001 From: jjousun Date: Mon, 19 Jun 2017 14:30:44 -0700 Subject: [PATCH 18/23] Removed console dot log --- src/views/movie_view.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/views/movie_view.js b/src/views/movie_view.js index 44763e67d..d11d43418 100644 --- a/src/views/movie_view.js +++ b/src/views/movie_view.js @@ -19,7 +19,6 @@ var MovieView = Backbone.View.extend({ "click .movie" : "detailsHandler" }, detailsHandler: function() { - console.log("I'm in the detailsHandler"); this.trigger("selected", this.model); } }); From fdcdb3dca69a782ffc8cd8306a6bebe341c07024 Mon Sep 17 00:00:00 2001 From: Jackie Watanabe Date: Mon, 19 Jun 2017 15:43:11 -0700 Subject: [PATCH 19/23] added form to movie detail view and functions in the movie_list_view to get the data from the form --- build/index.html | 11 +++++++++++ src/views/movie_list_view.js | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/build/index.html b/build/index.html index d34742f00..1755c4b05 100644 --- a/build/index.html +++ b/build/index.html @@ -51,6 +51,17 @@

Joukie's Redbloxbuster

<%- movie.release_date %>

<%- movie.overview %>

<%- movie.inventory %>

+ +
+ + + +
+ diff --git a/src/views/movie_list_view.js b/src/views/movie_list_view.js index e5a03b1b2..a59171722 100644 --- a/src/views/movie_list_view.js +++ b/src/views/movie_list_view.js @@ -29,7 +29,8 @@ var MovieListView = Backbone.View.extend({ return this; }, events: { - "click #submit-search" : "search" + "click #submit-search" : "search", + "click #create-rental" : "createRental" }, getFormData: function() { var formTitle = this.$("#title").val(); @@ -63,7 +64,37 @@ var MovieListView = Backbone.View.extend({ var movieDetails = this.template2({movie: movie.attributes}); this.$('#movie-details').append(movieDetails); + }, + + getRentalFormData: function() { + var formCustomerId = this.$("#customer-id").val(); + this.$("#customer-id").val(''); + + var formDueDate = this.$("#due-date").val(); + this.$("#due-date").val(''); + + var formMovieTitle = this.model.title; + + return { + customer_id: formCustomerId, + due_date: formDueDate, + checkout_date: "2016-06-19", + title: formMovieTitle + }; + }, + + createRental: function() { + var myNewRental = new Rental(this.getRentalFormData()); + + // var myNewRentalInfo = this.getRentalFormData(); + // console.log("I'm in the createRental function"); + // console.log(myNewRentalInfo.customer_id); + // console.log(myNewRentalInfo.due_date); + + Rental.create(myNewRentalInfo); + } + }); export default MovieListView; From 47f66b2a460c0a4290c07cb78fbbd62e656eac85 Mon Sep 17 00:00:00 2001 From: Jackie Watanabe Date: Tue, 20 Jun 2017 14:36:28 -0700 Subject: [PATCH 20/23] moved movie details into own view and also added functionality to button on the details view to create rental --- build/index.html | 3 ++ src/app.js | 1 - src/collections/rental_list.js | 11 ++++++ src/models/rental.js | 25 +++++++++++++ src/views/movie_details_view.js | 62 +++++++++++++++++++++++++++++++ src/views/movie_list_view.js | 66 ++++++++++++++------------------- 6 files changed, 128 insertions(+), 40 deletions(-) create mode 100644 src/collections/rental_list.js create mode 100644 src/models/rental.js diff --git a/build/index.html b/build/index.html index 1755c4b05..e8daab8cb 100644 --- a/build/index.html +++ b/build/index.html @@ -23,9 +23,12 @@

Joukie's Redbloxbuster

+
+
+
diff --git a/src/app.js b/src/app.js index 3e5b3736d..a679dca0c 100644 --- a/src/app.js +++ b/src/app.js @@ -20,7 +20,6 @@ $(document).ready(function() { var myMovieListView = new MovieListView( { model: myMovieList, template: _.template($('#movie-template').html()), - detailsTemplate: _.template($('#movie-details-template').html()), el: 'main' }); myMovieListView.render(); diff --git a/src/collections/rental_list.js b/src/collections/rental_list.js new file mode 100644 index 000000000..e03274c04 --- /dev/null +++ b/src/collections/rental_list.js @@ -0,0 +1,11 @@ +import Backbone from 'backbone'; +import _ from 'underscore'; +import $ from 'jquery'; +import Rental from '../models/rental'; + +var RentalList = Backbone.Collection.extend({ + model: Rental, + url: "localhost:3000/rentals" +}); + +export default RentalList; diff --git a/src/models/rental.js b/src/models/rental.js new file mode 100644 index 000000000..ab98a9f0e --- /dev/null +++ b/src/models/rental.js @@ -0,0 +1,25 @@ +import Backbone from 'backbone'; +import RentalList from '../collections/rental_list'; + +var Rental = Backbone.Model.extend({ + sync: function(method, model, options) { + console.log(method); + console.log("options url: ", options.url); + console.log("model url: ", model.url); + // var myRentalList = new RentalList(model); + console.log("model.collection: ", model.collection); + if (method == "create") { + options.url = 'http://localhost:3000/rentals/' + model.attributes.title + "/check-out?customer_id=" + model.attributes.customer_id + "&checkout_date=" + model.attributes.checkout_date + "&due_date=" + model.attributes.due_date; + } + return Backbone.sync(method, model, options); + } + + + + + // defaults: { + // image_url: "http://7bna.net/images/random-image/random-image-4.jpg" + // } +}); + +export default Rental; diff --git a/src/views/movie_details_view.js b/src/views/movie_details_view.js index faf823166..d40072e99 100644 --- a/src/views/movie_details_view.js +++ b/src/views/movie_details_view.js @@ -2,14 +2,76 @@ import Backbone from 'backbone'; import _ from 'underscore'; import $ from 'jquery'; import MovieView from './movie_view'; +import Rental from '../models/rental'; var MovieDetailsView = Backbone.View.extend({ initialize: function(params){ this.template = params.template; + console.log("I'm in MovieDetailsView"); }, + render: function(){ + this.$('#movie-list').empty(); + this.$('#movie-details').show(); + console.log("render in movie-details view"); + + var compiledTemplate = this.template({movie: this.model.toJSON()}); + + this.$("#movie-details").html(compiledTemplate); + this.$el.show(); + + return this; + }, + events: { + "click #create-rental" : "createRental" + }, + getRentalFormData: function() { + var formCustomerId = this.$("#customer-id").val(); + this.$("#customer-id").val(''); + + var formDueDate = this.$("#due-date").val(); + this.$("#due-date").val(''); + + console.log("getRentalFormData this.model: ", this.model); + var formMovieTitle = this.model.attributes.title; + + var dateNow = new Date(); + var convertMonth = function(dateNow){ + var m = dateNow.getMonth() + 1; + if (m < 10) { + m = '0' + m; + } + return m; + }; + var date = dateNow.getFullYear()+'-'+(convertMonth(dateNow))+'-'+dateNow.getDate(); + console.log("monthconversion: ", convertMonth(dateNow)); + console.log("Date.now: ", date); + + return { + customer_id: formCustomerId, + due_date: formDueDate, + checkout_date: dateNow, + title: formMovieTitle + }; + }, + + createRental: function() { + var myNewRental = new Rental(this.getRentalFormData()); + + // var myNewRentalInfo = this.getRentalFormData(); + // console.log("I'm in the createRental function"); + // console.log(myNewRentalInfo.customer_id); + // console.log(myNewRentalInfo.due_date); + + myNewRental.save(); + + // Movie.create(adf) + + + // url: localhost:3000/movies + } }); diff --git a/src/views/movie_list_view.js b/src/views/movie_list_view.js index a59171722..8b91fe4b5 100644 --- a/src/views/movie_list_view.js +++ b/src/views/movie_list_view.js @@ -5,6 +5,7 @@ import MovieView from './movie_view'; import Movie from '../models/movie'; import ResultList from '../collections/result_list'; import ResultListView from './result_list_view'; +import MovieDetailsView from './movie_details_view'; var MovieListView = Backbone.View.extend({ initialize: function(params) { @@ -22,15 +23,29 @@ var MovieListView = Backbone.View.extend({ model: movie, template: that.template, }); - that.listenTo(movieView, "selected", that.movieDetails); + that.listenTo(movieView, "selected", function(movie1) { + $('#movie-list').empty(); + $('#movie-details').empty(); + + // var movieDetails = this.template({movie: movie.attributes}); + + console.log("movie: ", movie1); + var myMovieDetailsView = new MovieDetailsView({ + model: movie1, + template: _.template($('#movie-details-template').html()), + el: '.movie-container' + }); + + myMovieDetailsView.render(); + // this.$('#movie-details').append(myMovieDetailsView); + }); that.$('#movie-list').append(movieView.render().$el); }); return this; }, events: { - "click #submit-search" : "search", - "click #create-rental" : "createRental" + "click #submit-search" : "search" }, getFormData: function() { var formTitle = this.$("#title").val(); @@ -55,45 +70,18 @@ var MovieListView = Backbone.View.extend({ }); myResultListView.render(); - }, - - movieDetails: function(movie) { - $('#movie-list').empty(); - $('#movie-details').empty(); - - var movieDetails = this.template2({movie: movie.attributes}); - - this.$('#movie-details').append(movieDetails); - }, - - getRentalFormData: function() { - var formCustomerId = this.$("#customer-id").val(); - this.$("#customer-id").val(''); - - var formDueDate = this.$("#due-date").val(); - this.$("#due-date").val(''); - - var formMovieTitle = this.model.title; - - return { - customer_id: formCustomerId, - due_date: formDueDate, - checkout_date: "2016-06-19", - title: formMovieTitle - }; - }, - - createRental: function() { - var myNewRental = new Rental(this.getRentalFormData()); + } - // var myNewRentalInfo = this.getRentalFormData(); - // console.log("I'm in the createRental function"); - // console.log(myNewRentalInfo.customer_id); - // console.log(myNewRentalInfo.due_date); + // movieDetails: function(movie) { + // $('#movie-list').empty(); + // $('#movie-details').empty(); + // + // var movieDetails = this.template2({movie: movie.attributes}); + // + // this.$('#movie-details').append(movieDetails); + // }, - Rental.create(myNewRentalInfo); - } }); From 120ec98c3b6aa5cf61ad19cb6c6b06ea81cb0dda Mon Sep 17 00:00:00 2001 From: Jackie Watanabe Date: Tue, 20 Jun 2017 14:58:53 -0700 Subject: [PATCH 21/23] added url to rental model --- src/models/rental.js | 4 +++- src/views/movie_details_view.js | 6 +++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/models/rental.js b/src/models/rental.js index ab98a9f0e..628a04e9d 100644 --- a/src/models/rental.js +++ b/src/models/rental.js @@ -2,6 +2,8 @@ import Backbone from 'backbone'; import RentalList from '../collections/rental_list'; var Rental = Backbone.Model.extend({ + url: "http://localhost:3000/rentals/", + sync: function(method, model, options) { console.log(method); console.log("options url: ", options.url); @@ -9,7 +11,7 @@ var Rental = Backbone.Model.extend({ // var myRentalList = new RentalList(model); console.log("model.collection: ", model.collection); if (method == "create") { - options.url = 'http://localhost:3000/rentals/' + model.attributes.title + "/check-out?customer_id=" + model.attributes.customer_id + "&checkout_date=" + model.attributes.checkout_date + "&due_date=" + model.attributes.due_date; + options.url = this.url + model.attributes.title + "/check-out?customer_id=" + model.attributes.customer_id + "&checkout_date=" + model.attributes.checkout_date + "&due_date=" + model.attributes.due_date; } return Backbone.sync(method, model, options); } diff --git a/src/views/movie_details_view.js b/src/views/movie_details_view.js index d40072e99..624ca0565 100644 --- a/src/views/movie_details_view.js +++ b/src/views/movie_details_view.js @@ -65,7 +65,11 @@ var MovieDetailsView = Backbone.View.extend({ // console.log(myNewRentalInfo.customer_id); // console.log(myNewRentalInfo.due_date); - myNewRental.save(); + if (myNewRental.save()) { + alert("WHOOP THERE IT IS! New Rental created!"); + } else { + alert("Something went wrong :("); + } // Movie.create(adf) From eeceb866ac6d26eefa2797e7ba24841b14acb9d6 Mon Sep 17 00:00:00 2001 From: jjousun Date: Tue, 20 Jun 2017 16:05:30 -0700 Subject: [PATCH 22/23] Success and failure callbacks --- build/index.html | 8 ++++---- src/models/rental.js | 4 ---- src/views/movie_details_view.js | 22 +++++++++++++++------- src/views/result_view.js | 11 ++++++----- 4 files changed, 25 insertions(+), 20 deletions(-) diff --git a/build/index.html b/build/index.html index e8daab8cb..ed544d4f0 100644 --- a/build/index.html +++ b/build/index.html @@ -50,10 +50,10 @@

Joukie's Redbloxbuster

diff --git a/src/app.js b/src/app.js index a679dca0c..1cadfb927 100644 --- a/src/app.js +++ b/src/app.js @@ -15,13 +15,15 @@ var homeHandler = function() { var myMovieList = new MovieList(); myMovieList.fetch(); +var myMovieListView = new MovieListView( { + model: myMovieList, + template: _.template($('#movie-template').html()), + el: 'main' +}); + // ready to go $(document).ready(function() { - var myMovieListView = new MovieListView( { - model: myMovieList, - template: _.template($('#movie-template').html()), - el: 'main' - }); + myMovieListView.render(); $('.home').click(homeHandler); diff --git a/src/views/movie_details_view.js b/src/views/movie_details_view.js index 70e40d192..be7caa172 100644 --- a/src/views/movie_details_view.js +++ b/src/views/movie_details_view.js @@ -3,6 +3,7 @@ import _ from 'underscore'; import $ from 'jquery'; import MovieView from './movie_view'; import Rental from '../models/rental'; +import MovieListView from './movie_list_view'; var MovieDetailsView = Backbone.View.extend({ @@ -14,6 +15,7 @@ var MovieDetailsView = Backbone.View.extend({ render: function(){ this.$('#movie-list').empty(); this.$('#movie-details').show(); + this.$('#rental-messages').empty(); console.log("render in movie-details view"); @@ -46,8 +48,8 @@ var MovieDetailsView = Backbone.View.extend({ return m; }; var date = dateNow.getFullYear()+'-'+(convertMonth(dateNow))+'-'+dateNow.getDate(); - console.log("monthconversion: ", convertMonth(dateNow)); - console.log("Date.now: ", date); + // console.log("monthconversion: ", convertMonth(dateNow)); + // console.log("Date.now: ", date); return { customer_id: formCustomerId, @@ -59,6 +61,7 @@ var MovieDetailsView = Backbone.View.extend({ createRental: function() { var myNewRental = new Rental(this.getRentalFormData()); + var that = this; // var myNewRentalInfo = this.getRentalFormData(); // console.log("I'm in the createRental function"); @@ -80,12 +83,28 @@ var MovieDetailsView = Backbone.View.extend({ myNewRental.save(myNewRental.attributes, { success: function() { alert("Added a rental successfully!"); + // var myNewMovieListView = new MovieListView }, - error: function() { - alert("What did you do??"); + error: function(myNewRental, response) { + console.log("response: ", response); + + // response.responseJSON.errors.forEach function(error){ + // $('#rental-messages').html(response.responseText); + // + // // + // } + // /response.responseJSON.errors.customer_id[0] + // alert(response.responseText); + that.render(); + $('#rental-messages').html(response.responseText); + + + // {movie: this.model.toJSON()} + + } }); - } + } }); export default MovieDetailsView; diff --git a/src/views/result_list_view.js b/src/views/result_list_view.js index 3f1b56db7..db4a3c2d4 100644 --- a/src/views/result_list_view.js +++ b/src/views/result_list_view.js @@ -13,6 +13,7 @@ var ResultListView = Backbone.View.extend({ render: function() { this.$('#movie-list').empty(); this.$('#result-list').empty(); + this.$('#movie-details').empty(); var that = this; diff --git a/src/views/result_view.js b/src/views/result_view.js index cf54a5f91..6962b4201 100644 --- a/src/views/result_view.js +++ b/src/views/result_view.js @@ -27,6 +27,10 @@ var ResultView = Backbone.View.extend({ // alert("Something went wrong :("); // } this.model.save(this.model.attributes, {success: function() { alert("YEEEEEESSS");}, error: function(){ alert("NOOOOO");}}); + // $('#messages').html("New movie added"); + window.location.replace("http://localhost:8081"); + + } });