├── .env_sample ├── .gitignore ├── README.md ├── api.js ├── api_offline.json ├── api_sample.json ├── index.html ├── package-lock.json ├── package.json ├── public ├── favicon.ico └── logo.png ├── server.js ├── src ├── main.js ├── style.scss └── util │ ├── genres.js │ ├── helpers.js │ └── times.js ├── webpack-dev-middleware.js └── webpack.config.js /.env_sample: -------------------------------------------------------------------------------- 1 | PORT=8000 2 | NODE_ENV=development 3 | IMDB_IDS=tt0379225,tt1172203,tt1727587,tt1352852,tt1379199,tt1562881,tt0489037,tt1783305,tt4479976 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | npm-debug.log 4 | .idea 5 | .env 6 | dist 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Vue.js Cinema 2 | 3 | Source code for the case-study project from the course [Build A Vue.js Single-Page App with Vue Router](https://courses.vuejsdevelopers.com/p/build-a-single-page-app-vue-router-vue-cli?utm_source=github-vjd) 4 | 5 | #### Demo 6 | 7 | See the completed project here: [http://vuejs-cinema.vuejsdevelopers.com/](http://vuejs-cinema.vuejsdevelopers.com/) 8 | 9 | #### Pre-installation 10 | 11 | - Ensure [Node.js >=5.10](https://nodejs.org/en/download/), [NPM](https://docs.npmjs.com) and [git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) are installed on your system 12 | 13 | #### Installation 14 | 15 | 1. Install this code on your local system 16 | 17 | 1. Fork this repository (click 'Fork' button in top right corner) 18 | 2. Clone the forked repository on your local file system 19 | 20 | ``` 21 | cd /path/to/install/location 22 | 23 | git clone https://github.com/[your_username]/vuejs-cinema.git 24 | ``` 25 | 26 | 2. Change into directory 27 | 28 | ``` 29 | cd vuejs-cinema 30 | ``` 31 | 32 | 3. Install dependencies 33 | 34 | ``` 35 | npm install 36 | ``` 37 | 38 | 4. Create a `.env` file by copying the sample 39 | 40 | ``` 41 | cp .env_sample .env 42 | ``` 43 | 44 | Edit the .env file and replace any variables if needed 45 | 46 | 5. Start project 47 | 48 | ``` 49 | npm run start 50 | ``` 51 | 52 | Your site will be available at *localhost:[PORT]* where `PORT` is whatever value is set in your `.env` file. 53 | 54 | ## Sponsors 55 | 56 | Vue SchoolSnipcart 57 | 58 | [Support Vue.js Developers](https://www.patreon.com/anthonygore?utm-source=github-vjd&utm-medium=link&utm_campaign=sponsors) to get your logo here. 59 | 60 | ## Lecture branches 61 | 62 | Each branch of of the repo shows the state of the code at the end of any particular video e.g. `video/08` shows the state at the end of video 8. 63 | 64 | If you want the initial state of the code, use the `master` branch. 65 | 66 | If you're doing the *Vue.js Essentials - 3 Course Bundle* course on Udemy, you'll need the following conversion table to match the branch to the lecture number. 67 | 68 | | Lecture # | Branch name | 69 | | - | - | 70 | | 58 | video/02 | 71 | | 64 | video/08 | 72 | | 66 | video/10 | 73 | | 67 | video/11 | 74 | | 68 | video/12 | 75 | | 70 | video/14 | 76 | | 71 | video/15 | 77 | | 73 | video/17 | 78 | | 77 | video/21 | 79 | | 78 | video/22 | 80 | | 80 | video/24 | 81 | | 81 | video/25 | 82 | | 82 | video/26 | 83 | | 83 | video/27 | 84 | | 84 | video/28 | 85 | | 85 | video/29 | 86 | | 86 | video/30 | 87 | | 87 | video/31 | 88 | | 88 | video/32 | 89 | | 89 | video/33 | 90 | | 90 | video/34 | 91 | | 91 | video/35 | 92 | | 92 | video/36 | 93 | | 93 | video/37 | 94 | | 94 | video/38 | 95 | | 96 | video/40 | 96 | | 98 | video/42 | 97 | | 99 | video/43 | 98 | | 100 | video/44 | 99 | | 101 | video/45 | 100 | | 102 | video/46 | 101 | | 103 | video/47 | 102 | | 105 | video/49 | 103 | | 106 | video/50 | 104 | | 107 | video/51 | 105 | | 108 | video/52 | 106 | | 109 | video/53 | 107 | | 110 | video/54 | 108 | | 111 | video/55 | 109 | | 113 | video/57 | 110 | | 114 | video/58 | 111 | | 115 | video/59 | 112 | | 117 | video/61 | 113 | | 118 | video/62 | 114 | | 119 | video/63 | 115 | -------------------------------------------------------------------------------- /api.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config(); 2 | 3 | const axios = require('axios'); 4 | const async = require('async'); 5 | const moment = require('moment-timezone'); 6 | moment.tz.setDefault("UTC"); 7 | 8 | // Axios 9 | const $http = axios.create({ 10 | baseURL: `http://localhost:${process.env.PORT}/offline_api`, 11 | }); 12 | 13 | function generateSessions(id) { 14 | let sessions = []; 15 | let nums = id.replace('tt', '').split('').map(item => { 16 | let num = parseInt(item); 17 | if (num === 0) { num = 1; } 18 | if (num > 6) { num = num - 2; } 19 | return num; 20 | }); 21 | nums.splice(nums[3], 0, nums[0]); 22 | nums.shift(); 23 | nums.forEach((num, index) => { 24 | let date = moment().startOf('day').add(index, 'days'); 25 | for (let i = 0; i < num; i++) { 26 | let pos = index + i <= nums.length ? index + i : index + i - nums.length; 27 | let hours = nums[pos] + 12; 28 | let mins = nums[pos] < 2.5 ? 0 : nums[pos] < 5 ? 15 : nums[pos] < 7.5 ? 30 : 45; 29 | sessions.push({ 30 | id: `${id}_${i}`, 31 | time: moment(date).add(hours, 'hours').add(mins, 'minutes'), 32 | seats: Math.round(200 - nums.reduce((acc, val) => { return acc + val; }) + (num * i)) 33 | }); 34 | } 35 | }); 36 | return sessions.sort((a, b) => { if (a.time < b.time) { return - 1 } else { return a.time > b.time; } }); 37 | } 38 | 39 | function cleanData(movie) { 40 | if (movie.Rated === 'N/A' || movie.Rated === 'UNRATED' || movie.Rated === 'NOT RATED') { 41 | let last = parseInt(movie.imdbID[movie.imdbID.length - 1]); 42 | movie.Rated = last < 7 ? ( last < 4 ? 'G' : 'PG-13' ) : 'R'; 43 | } 44 | return movie; 45 | } 46 | 47 | module.exports = { 48 | data: [], 49 | getData(callback) { 50 | if (!this.data.length) { 51 | let ids = process.env.IMDB_IDS.split(','); 52 | let data = []; 53 | async.each( 54 | ids, 55 | function (id, callback) { 56 | if (!data.find(item => item.id === id)) { 57 | $http.get(`?i=${id}`) 58 | .then( 59 | function (response) { 60 | if (!response.data.Error) { 61 | data.push({ 62 | id, 63 | movie: cleanData(response.data), 64 | sessions: generateSessions(id) 65 | }); 66 | } else { 67 | console.log(response.data.Error); 68 | } 69 | callback(); 70 | }, 71 | function (err) { 72 | callback(err); 73 | } 74 | ) 75 | ; 76 | } else { 77 | callback(); 78 | } 79 | }, 80 | (err) => { 81 | if (err) { 82 | callback(err, null); 83 | } else { 84 | this.data = ids.map(id => data.find(item => id === item.id) ); 85 | callback(null, this.data); 86 | } 87 | } 88 | ); 89 | } else { 90 | callback(null, this.data); 91 | } 92 | } 93 | }; 94 | -------------------------------------------------------------------------------- /api_offline.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "Title": "The Corporation", 4 | "Year": "2003", 5 | "Rated": "PG-13", 6 | "Released": "04 Jun 2004", 7 | "Runtime": "145 min", 8 | "Genre": "Documentary, History", 9 | "Director": "Mark Achbar, Jennifer Abbott", 10 | "Writer": "Joel Bakan, Joel Bakan (book), Harold Crooks (narration written by), Joel Bakan (narration written by), Mark Achbar (narration written by), Mark Achbar (developer), Joel Bakan (developer), Thomas Shandel (developer), Mark Achbar (creator), Joel Bakan (creator)", 11 | "Actors": "Mikela Jay, Rob Beckwermert, Christopher Gora, Nina Jones", 12 | "Plot": "Documentary that looks at the concept of the corporation throughout recent history up to its present-day dominance.", 13 | "Language": "English, Spanish", 14 | "Country": "Canada", 15 | "Awards": "11 wins & 1 nomination.", 16 | "Poster": "https://images-na.ssl-images-amazon.com/images/M/MV5BMTQxMjMzMTczM15BMl5BanBnXkFtZTcwNzg5MzUyMQ@@._V1_SX300.jpg", 17 | "Ratings": [ 18 | { 19 | "Source": "Internet Movie Database", 20 | "Value": "8.1/10" 21 | }, 22 | { 23 | "Source": "Rotten Tomatoes", 24 | "Value": "90%" 25 | }, 26 | { 27 | "Source": "Metacritic", 28 | "Value": "73/100" 29 | } 30 | ], 31 | "Metascore": "73", 32 | "imdbRating": "8.1", 33 | "imdbVotes": "18,472", 34 | "imdbID": "tt0379225", 35 | "Type": "movie", 36 | "DVD": "05 Apr 2005", 37 | "BoxOffice": "$1,350,094.00", 38 | "Production": "Zeitgeist Films", 39 | "Website": "http://www.thecorporation.com", 40 | "Response": "True" 41 | }, 42 | { 43 | "Title": "Sita Sings the Blues", 44 | "Year": "2008", 45 | "Rated": "G", 46 | "Released": "12 Aug 2009", 47 | "Runtime": "82 min", 48 | "Genre": "Animation, Comedy, Fantasy", 49 | "Director": "Nina Paley", 50 | "Writer": "Nina Paley, Valmiki (book)", 51 | "Actors": "Annette Hanshaw, Aseem Chhabra, Bhavana Nagulapally, Manish Acharya", 52 | "Plot": "An animated version of the epic Indian tale of Ramayana set to the 1920s jazz vocals of Annette Hanshaw.", 53 | "Language": "English", 54 | "Country": "USA", 55 | "Awards": "7 wins & 3 nominations.", 56 | "Poster": "https://images-na.ssl-images-amazon.com/images/M/MV5BMTY5MzYwNDYwNF5BMl5BanBnXkFtZTgwMDMwNDg5MTE@._V1_SX300.jpg", 57 | "Ratings": [ 58 | { 59 | "Source": "Internet Movie Database", 60 | "Value": "7.7/10" 61 | }, 62 | { 63 | "Source": "Rotten Tomatoes", 64 | "Value": "100%" 65 | }, 66 | { 67 | "Source": "Metacritic", 68 | "Value": "93/100" 69 | } 70 | ], 71 | "Metascore": "93", 72 | "imdbRating": "7.7", 73 | "imdbVotes": "3,619", 74 | "imdbID": "tt1172203", 75 | "Type": "movie", 76 | "DVD": "28 Jul 2009", 77 | "BoxOffice": "N/A", 78 | "Production": "Shadow Distribution", 79 | "Website": "http://www.sitasingstheblues.com/", 80 | "Response": "True" 81 | }, 82 | { 83 | "Title": "Sintel", 84 | "Year": "2010", 85 | "Rated": "R", 86 | "Released": "27 Sep 2010", 87 | "Runtime": "14 min", 88 | "Genre": "Animation, Short, Fantasy", 89 | "Director": "Colin Levy", 90 | "Writer": "Martin Lodewijk (idea), Esther Wouda", 91 | "Actors": "Halina Reijn, Thom Hoffman", 92 | "Plot": "The film follows a girl named Sintel who is searching for a baby dragon she calls Scales. A flashback reveals that Sintel found Scales with its wing injured and helped care for it, forming ...", 93 | "Language": "English", 94 | "Country": "Netherlands", 95 | "Awards": "3 wins.", 96 | "Poster": "https://images-na.ssl-images-amazon.com/images/M/MV5BMzc5NTUzNTgzMF5BMl5BanBnXkFtZTcwODcwMzQ5Mw@@._V1_SX300.jpg", 97 | "Ratings": [ 98 | { 99 | "Source": "Internet Movie Database", 100 | "Value": "7.6/10" 101 | } 102 | ], 103 | "Metascore": "N/A", 104 | "imdbRating": "7.6", 105 | "imdbVotes": "2,953", 106 | "imdbID": "tt1727587", 107 | "Type": "movie", 108 | "DVD": "N/A", 109 | "BoxOffice": "N/A", 110 | "Production": "N/A", 111 | "Website": "N/A", 112 | "Response": "True" 113 | }, 114 | { 115 | "Title": "The Yes Men Fix the World", 116 | "Year": "2009", 117 | "Rated": "G", 118 | "Released": "07 Aug 2009", 119 | "Runtime": "87 min", 120 | "Genre": "Documentary, Comedy", 121 | "Director": "Andy Bichlbaum, Mike Bonanno, Kurt Engfehr", 122 | "Writer": "Andy Bichlbaum (idea), Mike Bonanno (idea), Andy Bichlbaum (screenplay), Mike Bonanno (screenplay)", 123 | "Actors": "Reggie Watts, Mike Bonanno, Andy Bichlbaum, Richard Ebeling", 124 | "Plot": "Troublemaking duo Andy Bichlbaum and Mike Bonanno, posing as their industrious alter-egos, expose the people profiting from Hurricane Katrina, the faces behind the environmental disaster in Bhopal, and other shocking events.", 125 | "Language": "English", 126 | "Country": "France, UK, USA", 127 | "Awards": "2 wins & 2 nominations.", 128 | "Poster": "https://images-na.ssl-images-amazon.com/images/M/MV5BMTM0MzM2MjU0N15BMl5BanBnXkFtZTcwMDIyMDcxMw@@._V1_SX300.jpg", 129 | "Ratings": [ 130 | { 131 | "Source": "Internet Movie Database", 132 | "Value": "7.6/10" 133 | }, 134 | { 135 | "Source": "Rotten Tomatoes", 136 | "Value": "77%" 137 | }, 138 | { 139 | "Source": "Metacritic", 140 | "Value": "71/100" 141 | } 142 | ], 143 | "Metascore": "71", 144 | "imdbRating": "7.6", 145 | "imdbVotes": "4,701", 146 | "imdbID": "tt1352852", 147 | "Type": "movie", 148 | "DVD": "01 Apr 2010", 149 | "BoxOffice": "N/A", 150 | "Production": "Cinetic Media", 151 | "Website": "http://www.theyesmen.org/movies/theyesmenfixtheworld", 152 | "Response": "True" 153 | }, 154 | { 155 | "Title": "Chiaroscuro, Baby", 156 | "Year": "2009", 157 | "Rated": "R", 158 | "Released": "04 Nov 2009", 159 | "Runtime": "127 min", 160 | "Genre": "Drama", 161 | "Director": "Anthony Kilburn", 162 | "Writer": "Anthony Kilburn", 163 | "Actors": "Christopher Bolla, Christianna White, Milan Alley, Matt Shuman", 164 | "Plot": "An aspiring painter compromises his ambition for his seductive girlfriend, only to be torn when his empowering, new muse reignites his passion.", 165 | "Language": "English", 166 | "Country": "USA", 167 | "Awards": "N/A", 168 | "Poster": "http://ia.media-imdb.com/images/M/MV5BMzUyNjc3NTg0NV5BMl5BanBnXkFtZTcwMTQ1OTg4Mg@@._V1_SX300.jpg", 169 | "Ratings": [ 170 | { 171 | "Source": "Internet Movie Database", 172 | "Value": "5.7/10" 173 | } 174 | ], 175 | "Metascore": "N/A", 176 | "imdbRating": "5.7", 177 | "imdbVotes": "30", 178 | "imdbID": "tt1379199", 179 | "Type": "movie", 180 | "DVD": "N/A", 181 | "BoxOffice": "N/A", 182 | "Production": "N/A", 183 | "Website": "N/A", 184 | "Response": "True" 185 | }, 186 | { 187 | "Title": "The Death of Hollywood", 188 | "Year": "2009", 189 | "Rated": "G", 190 | "Released": "N/A", 191 | "Runtime": "84 min", 192 | "Genre": "Comedy, Crime, Drama", 193 | "Director": "Blake Fitzpatrick", 194 | "Writer": "Blake Fitzpatrick", 195 | "Actors": "Philip Denver, Seth Correa, Joe Estevez, Sharon Marie Wright", 196 | "Plot": "A disgruntled screenwriter kidnaps the sleazy Hollywood producer that stole his material and switches identities with him, attempting to change the face of corporate cinema forever.", 197 | "Language": "English", 198 | "Country": "USA", 199 | "Awards": "4 wins.", 200 | "Poster": "http://ia.media-imdb.com/images/M/MV5BMTY4NjkzMDg0NV5BMl5BanBnXkFtZTcwNjAwOTA3NA@@._V1_SX300.jpg", 201 | "Ratings": [ 202 | { 203 | "Source": "Internet Movie Database", 204 | "Value": "7.2/10" 205 | } 206 | ], 207 | "Metascore": "N/A", 208 | "imdbRating": "7.2", 209 | "imdbVotes": "39", 210 | "imdbID": "tt1562881", 211 | "Type": "movie", 212 | "DVD": "N/A", 213 | "BoxOffice": "N/A", 214 | "Production": "N/A", 215 | "Website": "N/A", 216 | "Response": "True" 217 | }, 218 | { 219 | "Title": "Who Killed the Electric Car?", 220 | "Year": "2006", 221 | "Rated": "PG", 222 | "Released": "04 Aug 2006", 223 | "Runtime": "92 min", 224 | "Genre": "Documentary", 225 | "Director": "Chris Paine", 226 | "Writer": "Chris Paine", 227 | "Actors": "Martin Sheen, Reverend Gadget, Dave Barthmuss, Ed Begley Jr.", 228 | "Plot": "A documentary that investigates the birth and death of the electric car, as well as the role of renewable energy and sustainable living in the future.", 229 | "Language": "English", 230 | "Country": "USA", 231 | "Awards": "4 nominations.", 232 | "Poster": "https://images-na.ssl-images-amazon.com/images/M/MV5BMTc1MTM0MTA2N15BMl5BanBnXkFtZTcwMTk1OTIzMQ@@._V1_SX300.jpg", 233 | "Ratings": [ 234 | { 235 | "Source": "Internet Movie Database", 236 | "Value": "7.7/10" 237 | }, 238 | { 239 | "Source": "Rotten Tomatoes", 240 | "Value": "88%" 241 | }, 242 | { 243 | "Source": "Metacritic", 244 | "Value": "70/100" 245 | } 246 | ], 247 | "Metascore": "70", 248 | "imdbRating": "7.7", 249 | "imdbVotes": "11,448", 250 | "imdbID": "tt0489037", 251 | "Type": "movie", 252 | "DVD": "14 Nov 2006", 253 | "BoxOffice": "$1,324,335.00", 254 | "Production": "Sony Pictures Classics", 255 | "Website": "http://www.whokilledtheelectriccar.com/", 256 | "Response": "True" 257 | }, 258 | { 259 | "Title": "Insignificant Celluloid", 260 | "Year": "2011", 261 | "Rated": "PG-13", 262 | "Released": "N/A", 263 | "Runtime": "78 min", 264 | "Genre": "Comedy, Drama", 265 | "Director": "Blake Fitzpatrick", 266 | "Writer": "Blake Fitzpatrick", 267 | "Actors": "Seth Correa, Lahcen Anajjar, Erik J. Pratt, Steve Williams", 268 | "Plot": "It's about people feeling ways about things.", 269 | "Language": "English", 270 | "Country": "USA", 271 | "Awards": "3 wins & 2 nominations.", 272 | "Poster": "http://ia.media-imdb.com/images/M/MV5BNjk0OTYzNzU3OF5BMl5BanBnXkFtZTcwNTAwOTA3NA@@._V1_SX300.jpg", 273 | "Ratings": [ 274 | { 275 | "Source": "Internet Movie Database", 276 | "Value": "6.8/10" 277 | } 278 | ], 279 | "Metascore": "N/A", 280 | "imdbRating": "6.8", 281 | "imdbVotes": "41", 282 | "imdbID": "tt1783305", 283 | "Type": "movie", 284 | "DVD": "N/A", 285 | "BoxOffice": "N/A", 286 | "Production": "N/A", 287 | "Website": "N/A", 288 | "Response": "True" 289 | }, 290 | { 291 | "Title": "Freddy's Return: A Nightmare Reborn", 292 | "Year": "2009", 293 | "Rated": "PG-13", 294 | "Released": "13 Nov 2009", 295 | "Runtime": "120 min", 296 | "Genre": "Horror", 297 | "Director": "Jason Korsiak", 298 | "Writer": "Wes Craven (based on characters created by), Jason Korsiak", 299 | "Actors": "Ronin Booker, Zakary Booker, David Buczynski, Rodney Covington", 300 | "Plot": "As a child, Kevin was kidnapped by Freddy Krueger before Freddy was killed by a mob of angry parents. Although he was rescued by the detective that arrested Krueger, he was left scarred ...", 301 | "Language": "English", 302 | "Country": "USA", 303 | "Awards": "N/A", 304 | "Poster": "http://ia.media-imdb.com/images/M/MV5BMWRmYTc0NDYtYTZkYS00YzBhLTkyMmUtZjg3MTcwMjUxZTljXkEyXkFqcGdeQXVyMzYzNzc1NjY@._V1_SX300.jpg", 305 | "Ratings": [ 306 | { 307 | "Source": "Internet Movie Database", 308 | "Value": "5.9/10" 309 | } 310 | ], 311 | "Metascore": "N/A", 312 | "imdbRating": "5.9", 313 | "imdbVotes": "10", 314 | "imdbID": "tt4479976", 315 | "Type": "movie", 316 | "DVD": "N/A", 317 | "BoxOffice": "N/A", 318 | "Production": "N/A", 319 | "Website": "N/A", 320 | "Response": "True" 321 | } 322 | ] 323 | -------------------------------------------------------------------------------- /api_sample.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "tt0379225", 4 | "movie": { 5 | "Title": "The Corporation", 6 | "Year": "2003", 7 | "Rated": "PG-13", 8 | "Released": "04 Jun 2004", 9 | "Runtime": "145 min", 10 | "Genre": "Documentary, History", 11 | "Director": "Mark Achbar, Jennifer Abbott", 12 | "Writer": "Joel Bakan, Joel Bakan (book), Harold Crooks (narration written by), Joel Bakan (narration written by), Mark Achbar (narration written by), Mark Achbar (developer), Joel Bakan (developer), Thomas Shandel (developer), Mark Achbar (creator), Joel Bakan (creator)", 13 | "Actors": "Mikela Jay, Rob Beckwermert, Christopher Gora, Nina Jones", 14 | "Plot": "Documentary that looks at the concept of the corporation throughout recent history up to its present-day dominance.", 15 | "Language": "English, Spanish", 16 | "Country": "Canada", 17 | "Awards": "11 wins & 1 nomination.", 18 | "Poster": "https://images-na.ssl-images-amazon.com/images/M/MV5BMTQxMjMzMTczM15BMl5BanBnXkFtZTcwNzg5MzUyMQ@@._V1_SX300.jpg", 19 | "Ratings": [ 20 | { 21 | "Source": "Internet Movie Database", 22 | "Value": "8.1/10" 23 | }, 24 | { 25 | "Source": "Rotten Tomatoes", 26 | "Value": "90%" 27 | }, 28 | { 29 | "Source": "Metacritic", 30 | "Value": "73/100" 31 | } 32 | ], 33 | "Metascore": "73", 34 | "imdbRating": "8.1", 35 | "imdbVotes": "18,472", 36 | "imdbID": "tt0379225", 37 | "Type": "movie", 38 | "DVD": "05 Apr 2005", 39 | "BoxOffice": "$1,350,094.00", 40 | "Production": "Zeitgeist Films", 41 | "Website": "http://www.thecorporation.com", 42 | "Response": "True" 43 | }, 44 | "sessions": [ 45 | { 46 | "id": "tt0379225_2", 47 | "time": "2017-04-04T14:00:00.000Z", 48 | "seats": 182 49 | }, 50 | { 51 | "id": "tt0379225_1", 52 | "time": "2017-04-04T14:00:00.000Z", 53 | "seats": 177 54 | }, 55 | { 56 | "id": "tt0379225_5", 57 | "time": "2017-04-04T15:15:00.000Z", 58 | "seats": 197 59 | }, 60 | { 61 | "id": "tt0379225_0", 62 | "time": "2017-04-04T17:30:00.000Z", 63 | "seats": 172 64 | }, 65 | { 66 | "id": "tt0379225_4", 67 | "time": "2017-04-04T19:30:00.000Z", 68 | "seats": 192 69 | }, 70 | { 71 | "id": "tt0379225_3", 72 | "time": "2017-04-04T21:45:00.000Z", 73 | "seats": 187 74 | }, 75 | { 76 | "id": "tt0379225_0", 77 | "time": "2017-04-05T14:00:00.000Z", 78 | "seats": 172 79 | }, 80 | { 81 | "id": "tt0379225_1", 82 | "time": "2017-04-05T14:00:00.000Z", 83 | "seats": 174 84 | }, 85 | { 86 | "id": "tt0379225_2", 87 | "time": "2017-04-05T21:45:00.000Z", 88 | "seats": 176 89 | }, 90 | { 91 | "id": "tt0379225_0", 92 | "time": "2017-04-06T14:00:00.000Z", 93 | "seats": 172 94 | }, 95 | { 96 | "id": "tt0379225_2", 97 | "time": "2017-04-06T19:30:00.000Z", 98 | "seats": 176 99 | }, 100 | { 101 | "id": "tt0379225_1", 102 | "time": "2017-04-06T21:45:00.000Z", 103 | "seats": 174 104 | }, 105 | { 106 | "id": "tt0379225_4", 107 | "time": "2017-04-07T00:45:00.000Z", 108 | "seats": 208 109 | }, 110 | { 111 | "id": "tt0379225_3", 112 | "time": "2017-04-07T12:00:00.000Z", 113 | "seats": 199 114 | }, 115 | { 116 | "id": "tt0379225_6", 117 | "time": "2017-04-07T14:00:00.000Z", 118 | "seats": 226 119 | }, 120 | { 121 | "id": "tt0379225_5", 122 | "time": "2017-04-07T14:00:00.000Z", 123 | "seats": 217 124 | }, 125 | { 126 | "id": "tt0379225_2", 127 | "time": "2017-04-07T15:15:00.000Z", 128 | "seats": 190 129 | }, 130 | { 131 | "id": "tt0379225_9", 132 | "time": "2017-04-07T15:15:00.000Z", 133 | "seats": 253 134 | }, 135 | { 136 | "id": "tt0379225_8", 137 | "time": "2017-04-07T19:30:00.000Z", 138 | "seats": 244 139 | }, 140 | { 141 | "id": "tt0379225_1", 142 | "time": "2017-04-07T19:30:00.000Z", 143 | "seats": 181 144 | }, 145 | { 146 | "id": "tt0379225_0", 147 | "time": "2017-04-07T21:45:00.000Z", 148 | "seats": 172 149 | }, 150 | { 151 | "id": "tt0379225_7", 152 | "time": "2017-04-07T21:45:00.000Z", 153 | "seats": 235 154 | }, 155 | { 156 | "id": "tt0379225_3", 157 | "time": "2017-04-08T00:45:00.000Z", 158 | "seats": 193 159 | }, 160 | { 161 | "id": "tt0379225_2", 162 | "time": "2017-04-08T12:00:00.000Z", 163 | "seats": 186 164 | }, 165 | { 166 | "id": "tt0379225_4", 167 | "time": "2017-04-08T14:00:00.000Z", 168 | "seats": 200 169 | }, 170 | { 171 | "id": "tt0379225_5", 172 | "time": "2017-04-08T14:00:00.000Z", 173 | "seats": 207 174 | }, 175 | { 176 | "id": "tt0379225_1", 177 | "time": "2017-04-08T15:15:00.000Z", 178 | "seats": 179 179 | }, 180 | { 181 | "id": "tt0379225_0", 182 | "time": "2017-04-08T19:30:00.000Z", 183 | "seats": 172 184 | }, 185 | { 186 | "id": "tt0379225_7", 187 | "time": "2017-04-08T19:30:00.000Z", 188 | "seats": 221 189 | }, 190 | { 191 | "id": "tt0379225_6", 192 | "time": "2017-04-08T21:45:00.000Z", 193 | "seats": 214 194 | }, 195 | { 196 | "id": "tt0379225_2", 197 | "time": "2017-04-09T00:45:00.000Z", 198 | "seats": 178 199 | }, 200 | { 201 | "id": "tt0379225_1", 202 | "time": "2017-04-09T12:00:00.000Z", 203 | "seats": 175 204 | }, 205 | { 206 | "id": "tt0379225_3", 207 | "time": "2017-04-09T14:00:00.000Z", 208 | "seats": 181 209 | }, 210 | { 211 | "id": "tt0379225_0", 212 | "time": "2017-04-09T15:15:00.000Z", 213 | "seats": 172 214 | }, 215 | { 216 | "id": "tt0379225_0", 217 | "time": "2017-04-10T12:00:00.000Z", 218 | "seats": 172 219 | } 220 | ] 221 | }, 222 | { 223 | "id": "tt1172203", 224 | "movie": { 225 | "Title": "Sita Sings the Blues", 226 | "Year": "2008", 227 | "Rated": "G", 228 | "Released": "12 Aug 2009", 229 | "Runtime": "82 min", 230 | "Genre": "Animation, Comedy, Fantasy", 231 | "Director": "Nina Paley", 232 | "Writer": "Nina Paley, Valmiki (book)", 233 | "Actors": "Annette Hanshaw, Aseem Chhabra, Bhavana Nagulapally, Manish Acharya", 234 | "Plot": "An animated version of the epic Indian tale of Ramayana set to the 1920s jazz vocals of Annette Hanshaw.", 235 | "Language": "English", 236 | "Country": "USA", 237 | "Awards": "7 wins & 3 nominations.", 238 | "Poster": "https://images-na.ssl-images-amazon.com/images/M/MV5BMTY5MzYwNDYwNF5BMl5BanBnXkFtZTgwMDMwNDg5MTE@._V1_SX300.jpg", 239 | "Ratings": [ 240 | { 241 | "Source": "Internet Movie Database", 242 | "Value": "7.7/10" 243 | }, 244 | { 245 | "Source": "Rotten Tomatoes", 246 | "Value": "100%" 247 | }, 248 | { 249 | "Source": "Metacritic", 250 | "Value": "93/100" 251 | } 252 | ], 253 | "Metascore": "93", 254 | "imdbRating": "7.7", 255 | "imdbVotes": "3,573", 256 | "imdbID": "tt1172203", 257 | "Type": "movie", 258 | "DVD": "28 Jul 2009", 259 | "BoxOffice": "N/A", 260 | "Production": "Shadow Distribution", 261 | "Website": "http://www.sitasingstheblues.com/", 262 | "Response": "True" 263 | }, 264 | "sessions": [ 265 | { 266 | "id": "tt1172203_1", 267 | "time": "2017-04-04T12:00:00.000Z", 268 | "seats": 187 269 | }, 270 | { 271 | "id": "tt1172203_3", 272 | "time": "2017-04-04T14:00:00.000Z", 273 | "seats": 193 274 | }, 275 | { 276 | "id": "tt1172203_2", 277 | "time": "2017-04-04T14:00:00.000Z", 278 | "seats": 190 279 | }, 280 | { 281 | "id": "tt1172203_0", 282 | "time": "2017-04-04T15:15:00.000Z", 283 | "seats": 184 284 | }, 285 | { 286 | "id": "tt1172203_0", 287 | "time": "2017-04-05T12:00:00.000Z", 288 | "seats": 184 289 | }, 290 | { 291 | "id": "tt1172203_0", 292 | "time": "2017-04-06T14:00:00.000Z", 293 | "seats": 184 294 | }, 295 | { 296 | "id": "tt1172203_1", 297 | "time": "2017-04-06T14:00:00.000Z", 298 | "seats": 186 299 | }, 300 | { 301 | "id": "tt1172203_2", 302 | "time": "2017-04-06T19:30:00.000Z", 303 | "seats": 188 304 | }, 305 | { 306 | "id": "tt1172203_2", 307 | "time": "2017-04-07T13:00:00.000Z", 308 | "seats": 188 309 | }, 310 | { 311 | "id": "tt1172203_0", 312 | "time": "2017-04-07T14:00:00.000Z", 313 | "seats": 184 314 | }, 315 | { 316 | "id": "tt1172203_1", 317 | "time": "2017-04-07T19:30:00.000Z", 318 | "seats": 186 319 | }, 320 | { 321 | "id": "tt1172203_3", 322 | "time": "2017-04-08T00:45:00.000Z", 323 | "seats": 205 324 | }, 325 | { 326 | "id": "tt1172203_4", 327 | "time": "2017-04-08T12:00:00.000Z", 328 | "seats": 212 329 | }, 330 | { 331 | "id": "tt1172203_1", 332 | "time": "2017-04-08T13:00:00.000Z", 333 | "seats": 191 334 | }, 335 | { 336 | "id": "tt1172203_2", 337 | "time": "2017-04-08T13:00:00.000Z", 338 | "seats": 198 339 | }, 340 | { 341 | "id": "tt1172203_5", 342 | "time": "2017-04-08T14:00:00.000Z", 343 | "seats": 219 344 | }, 345 | { 346 | "id": "tt1172203_6", 347 | "time": "2017-04-08T14:00:00.000Z", 348 | "seats": 226 349 | }, 350 | { 351 | "id": "tt1172203_0", 352 | "time": "2017-04-08T19:30:00.000Z", 353 | "seats": 184 354 | }, 355 | { 356 | "id": "tt1172203_7", 357 | "time": "2017-04-08T19:30:00.000Z", 358 | "seats": 233 359 | }, 360 | { 361 | "id": "tt1172203_0", 362 | "time": "2017-04-09T13:00:00.000Z", 363 | "seats": 184 364 | }, 365 | { 366 | "id": "tt1172203_1", 367 | "time": "2017-04-09T13:00:00.000Z", 368 | "seats": 185 369 | }, 370 | { 371 | "id": "tt1172203_1", 372 | "time": "2017-04-10T00:45:00.000Z", 373 | "seats": 185 374 | }, 375 | { 376 | "id": "tt1172203_0", 377 | "time": "2017-04-10T13:00:00.000Z", 378 | "seats": 184 379 | } 380 | ] 381 | }, 382 | { 383 | "id": "tt1727587", 384 | "movie": { 385 | "Title": "Sintel", 386 | "Year": "2010", 387 | "Rated": "R", 388 | "Released": "27 Sep 2010", 389 | "Runtime": "14 min", 390 | "Genre": "Animation, Short, Fantasy", 391 | "Director": "Colin Levy", 392 | "Writer": "Martin Lodewijk (idea), Esther Wouda", 393 | "Actors": "Halina Reijn, Thom Hoffman", 394 | "Plot": "The film follows a girl named Sintel who is searching for a baby dragon she calls Scales. A flashback reveals that Sintel found Scales with its wing injured and helped care for it, forming ...", 395 | "Language": "English", 396 | "Country": "Netherlands", 397 | "Awards": "3 wins.", 398 | "Poster": "https://images-na.ssl-images-amazon.com/images/M/MV5BMzc5NTUzNTgzMF5BMl5BanBnXkFtZTcwODcwMzQ5Mw@@._V1_SX300.jpg", 399 | "Ratings": [ 400 | { 401 | "Source": "Internet Movie Database", 402 | "Value": "7.6/10" 403 | } 404 | ], 405 | "Metascore": "N/A", 406 | "imdbRating": "7.6", 407 | "imdbVotes": "2,933", 408 | "imdbID": "tt1727587", 409 | "Type": "movie", 410 | "DVD": "N/A", 411 | "BoxOffice": "N/A", 412 | "Production": "N/A", 413 | "Website": "N/A", 414 | "Response": "True" 415 | }, 416 | "sessions": [ 417 | { 418 | "id": "tt1727587_7", 419 | "time": "2017-04-04T00:45:00.000Z", 420 | "seats": 212 421 | }, 422 | { 423 | "id": "tt1727587_6", 424 | "time": "2017-04-04T13:00:00.000Z", 425 | "seats": 205 426 | }, 427 | { 428 | "id": "tt1727587_4", 429 | "time": "2017-04-04T14:00:00.000Z", 430 | "seats": 191 431 | }, 432 | { 433 | "id": "tt1727587_2", 434 | "time": "2017-04-04T17:30:00.000Z", 435 | "seats": 177 436 | }, 437 | { 438 | "id": "tt1727587_0", 439 | "time": "2017-04-04T19:30:00.000Z", 440 | "seats": 163 441 | }, 442 | { 443 | "id": "tt1727587_3", 444 | "time": "2017-04-04T19:30:00.000Z", 445 | "seats": 184 446 | }, 447 | { 448 | "id": "tt1727587_5", 449 | "time": "2017-04-04T19:30:00.000Z", 450 | "seats": 198 451 | }, 452 | { 453 | "id": "tt1727587_1", 454 | "time": "2017-04-04T20:45:00.000Z", 455 | "seats": 170 456 | }, 457 | { 458 | "id": "tt1727587_6", 459 | "time": "2017-04-05T00:45:00.000Z", 460 | "seats": 211 461 | }, 462 | { 463 | "id": "tt1727587_5", 464 | "time": "2017-04-05T13:00:00.000Z", 465 | "seats": 203 466 | }, 467 | { 468 | "id": "tt1727587_3", 469 | "time": "2017-04-05T14:00:00.000Z", 470 | "seats": 187 471 | }, 472 | { 473 | "id": "tt1727587_8", 474 | "time": "2017-04-05T17:30:00.000Z", 475 | "seats": 227 476 | }, 477 | { 478 | "id": "tt1727587_1", 479 | "time": "2017-04-05T17:30:00.000Z", 480 | "seats": 171 481 | }, 482 | { 483 | "id": "tt1727587_2", 484 | "time": "2017-04-05T19:30:00.000Z", 485 | "seats": 179 486 | }, 487 | { 488 | "id": "tt1727587_4", 489 | "time": "2017-04-05T19:30:00.000Z", 490 | "seats": 195 491 | }, 492 | { 493 | "id": "tt1727587_0", 494 | "time": "2017-04-05T20:45:00.000Z", 495 | "seats": 163 496 | }, 497 | { 498 | "id": "tt1727587_7", 499 | "time": "2017-04-05T20:45:00.000Z", 500 | "seats": 219 501 | }, 502 | { 503 | "id": "tt1727587_5", 504 | "time": "2017-04-06T00:45:00.000Z", 505 | "seats": 188 506 | }, 507 | { 508 | "id": "tt1727587_4", 509 | "time": "2017-04-06T13:00:00.000Z", 510 | "seats": 183 511 | }, 512 | { 513 | "id": "tt1727587_2", 514 | "time": "2017-04-06T14:00:00.000Z", 515 | "seats": 173 516 | }, 517 | { 518 | "id": "tt1727587_0", 519 | "time": "2017-04-06T17:30:00.000Z", 520 | "seats": 163 521 | }, 522 | { 523 | "id": "tt1727587_1", 524 | "time": "2017-04-06T19:30:00.000Z", 525 | "seats": 168 526 | }, 527 | { 528 | "id": "tt1727587_3", 529 | "time": "2017-04-06T19:30:00.000Z", 530 | "seats": 178 531 | }, 532 | { 533 | "id": "tt1727587_4", 534 | "time": "2017-04-07T00:45:00.000Z", 535 | "seats": 191 536 | }, 537 | { 538 | "id": "tt1727587_3", 539 | "time": "2017-04-07T13:00:00.000Z", 540 | "seats": 184 541 | }, 542 | { 543 | "id": "tt1727587_1", 544 | "time": "2017-04-07T14:00:00.000Z", 545 | "seats": 170 546 | }, 547 | { 548 | "id": "tt1727587_6", 549 | "time": "2017-04-07T17:30:00.000Z", 550 | "seats": 205 551 | }, 552 | { 553 | "id": "tt1727587_2", 554 | "time": "2017-04-07T19:30:00.000Z", 555 | "seats": 177 556 | }, 557 | { 558 | "id": "tt1727587_7", 559 | "time": "2017-04-07T19:30:00.000Z", 560 | "seats": 212 561 | }, 562 | { 563 | "id": "tt1727587_0", 564 | "time": "2017-04-07T19:30:00.000Z", 565 | "seats": 163 566 | }, 567 | { 568 | "id": "tt1727587_5", 569 | "time": "2017-04-07T20:45:00.000Z", 570 | "seats": 198 571 | }, 572 | { 573 | "id": "tt1727587_2", 574 | "time": "2017-04-08T13:00:00.000Z", 575 | "seats": 167 576 | }, 577 | { 578 | "id": "tt1727587_0", 579 | "time": "2017-04-08T14:00:00.000Z", 580 | "seats": 163 581 | }, 582 | { 583 | "id": "tt1727587_1", 584 | "time": "2017-04-08T19:30:00.000Z", 585 | "seats": 165 586 | }, 587 | { 588 | "id": "tt1727587_2", 589 | "time": "2017-04-09T00:45:00.000Z", 590 | "seats": 177 591 | }, 592 | { 593 | "id": "tt1727587_1", 594 | "time": "2017-04-09T13:00:00.000Z", 595 | "seats": 170 596 | }, 597 | { 598 | "id": "tt1727587_6", 599 | "time": "2017-04-09T14:00:00.000Z", 600 | "seats": 205 601 | }, 602 | { 603 | "id": "tt1727587_4", 604 | "time": "2017-04-09T17:30:00.000Z", 605 | "seats": 191 606 | }, 607 | { 608 | "id": "tt1727587_0", 609 | "time": "2017-04-09T19:30:00.000Z", 610 | "seats": 163 611 | }, 612 | { 613 | "id": "tt1727587_5", 614 | "time": "2017-04-09T19:30:00.000Z", 615 | "seats": 198 616 | }, 617 | { 618 | "id": "tt1727587_7", 619 | "time": "2017-04-09T19:30:00.000Z", 620 | "seats": 212 621 | }, 622 | { 623 | "id": "tt1727587_3", 624 | "time": "2017-04-09T20:45:00.000Z", 625 | "seats": 184 626 | }, 627 | { 628 | "id": "tt1727587_1", 629 | "time": "2017-04-10T00:45:00.000Z", 630 | "seats": 164 631 | }, 632 | { 633 | "id": "tt1727587_0", 634 | "time": "2017-04-10T13:00:00.000Z", 635 | "seats": 163 636 | } 637 | ] 638 | }, 639 | { 640 | "id": "tt1352852", 641 | "movie": { 642 | "Title": "The Yes Men Fix the World", 643 | "Year": "2009", 644 | "Rated": "G", 645 | "Released": "07 Aug 2009", 646 | "Runtime": "87 min", 647 | "Genre": "Documentary, Comedy", 648 | "Director": "Andy Bichlbaum, Mike Bonanno, Kurt Engfehr", 649 | "Writer": "Andy Bichlbaum (idea), Mike Bonanno (idea), Andy Bichlbaum (screenplay), Mike Bonanno (screenplay)", 650 | "Actors": "Reggie Watts, Mike Bonanno, Andy Bichlbaum, Richard Ebeling", 651 | "Plot": "Troublemaking duo Andy Bichlbaum and Mike Bonanno, posing as their industrious alter-egos, expose the people profiting from Hurricane Katrina, the faces behind the environmental disaster in Bhopal, and other shocking events.", 652 | "Language": "English", 653 | "Country": "France, UK, USA", 654 | "Awards": "2 wins & 2 nominations.", 655 | "Poster": "https://images-na.ssl-images-amazon.com/images/M/MV5BMTM0MzM2MjU0N15BMl5BanBnXkFtZTcwMDIyMDcxMw@@._V1_SX300.jpg", 656 | "Ratings": [ 657 | { 658 | "Source": "Internet Movie Database", 659 | "Value": "7.6/10" 660 | }, 661 | { 662 | "Source": "Rotten Tomatoes", 663 | "Value": "77%" 664 | }, 665 | { 666 | "Source": "Metacritic", 667 | "Value": "71/100" 668 | } 669 | ], 670 | "Metascore": "71", 671 | "imdbRating": "7.6", 672 | "imdbVotes": "4,655", 673 | "imdbID": "tt1352852", 674 | "Type": "movie", 675 | "DVD": "01 Apr 2010", 676 | "BoxOffice": "N/A", 677 | "Production": "Cinetic Media", 678 | "Website": "http://www.theyesmen.org/movies/theyesmenfixtheworld", 679 | "Response": "True" 680 | }, 681 | "sessions": [ 682 | { 683 | "id": "tt1352852_0", 684 | "time": "2017-04-04T14:00:00.000Z", 685 | "seats": 174 686 | }, 687 | { 688 | "id": "tt1352852_1", 689 | "time": "2017-04-04T17:30:00.000Z", 690 | "seats": 176 691 | }, 692 | { 693 | "id": "tt1352852_2", 694 | "time": "2017-04-04T20:45:00.000Z", 695 | "seats": 178 696 | }, 697 | { 698 | "id": "tt1352852_5", 699 | "time": "2017-04-05T13:00:00.000Z", 700 | "seats": 199 701 | }, 702 | { 703 | "id": "tt1352852_2", 704 | "time": "2017-04-05T14:00:00.000Z", 705 | "seats": 184 706 | }, 707 | { 708 | "id": "tt1352852_4", 709 | "time": "2017-04-05T15:15:00.000Z", 710 | "seats": 194 711 | }, 712 | { 713 | "id": "tt1352852_0", 714 | "time": "2017-04-05T17:30:00.000Z", 715 | "seats": 174 716 | }, 717 | { 718 | "id": "tt1352852_3", 719 | "time": "2017-04-05T17:30:00.000Z", 720 | "seats": 189 721 | }, 722 | { 723 | "id": "tt1352852_1", 724 | "time": "2017-04-05T20:45:00.000Z", 725 | "seats": 179 726 | }, 727 | { 728 | "id": "tt1352852_5", 729 | "time": "2017-04-06T00:45:00.000Z", 730 | "seats": 214 731 | }, 732 | { 733 | "id": "tt1352852_4", 734 | "time": "2017-04-06T13:00:00.000Z", 735 | "seats": 206 736 | }, 737 | { 738 | "id": "tt1352852_8", 739 | "time": "2017-04-06T14:00:00.000Z", 740 | "seats": 238 741 | }, 742 | { 743 | "id": "tt1352852_1", 744 | "time": "2017-04-06T14:00:00.000Z", 745 | "seats": 182 746 | }, 747 | { 748 | "id": "tt1352852_3", 749 | "time": "2017-04-06T15:15:00.000Z", 750 | "seats": 198 751 | }, 752 | { 753 | "id": "tt1352852_6", 754 | "time": "2017-04-06T17:30:00.000Z", 755 | "seats": 222 756 | }, 757 | { 758 | "id": "tt1352852_2", 759 | "time": "2017-04-06T17:30:00.000Z", 760 | "seats": 190 761 | }, 762 | { 763 | "id": "tt1352852_7", 764 | "time": "2017-04-06T20:45:00.000Z", 765 | "seats": 230 766 | }, 767 | { 768 | "id": "tt1352852_0", 769 | "time": "2017-04-06T20:45:00.000Z", 770 | "seats": 174 771 | }, 772 | { 773 | "id": "tt1352852_0", 774 | "time": "2017-04-07T14:00:00.000Z", 775 | "seats": 174 776 | }, 777 | { 778 | "id": "tt1352852_2", 779 | "time": "2017-04-07T15:15:00.000Z", 780 | "seats": 178 781 | }, 782 | { 783 | "id": "tt1352852_1", 784 | "time": "2017-04-07T17:30:00.000Z", 785 | "seats": 176 786 | }, 787 | { 788 | "id": "tt1352852_3", 789 | "time": "2017-04-08T00:45:00.000Z", 790 | "seats": 189 791 | }, 792 | { 793 | "id": "tt1352852_2", 794 | "time": "2017-04-08T13:00:00.000Z", 795 | "seats": 184 796 | }, 797 | { 798 | "id": "tt1352852_1", 799 | "time": "2017-04-08T15:15:00.000Z", 800 | "seats": 179 801 | }, 802 | { 803 | "id": "tt1352852_4", 804 | "time": "2017-04-08T17:30:00.000Z", 805 | "seats": 194 806 | }, 807 | { 808 | "id": "tt1352852_0", 809 | "time": "2017-04-08T17:30:00.000Z", 810 | "seats": 174 811 | }, 812 | { 813 | "id": "tt1352852_5", 814 | "time": "2017-04-08T20:45:00.000Z", 815 | "seats": 199 816 | }, 817 | { 818 | "id": "tt1352852_2", 819 | "time": "2017-04-09T00:45:00.000Z", 820 | "seats": 180 821 | }, 822 | { 823 | "id": "tt1352852_1", 824 | "time": "2017-04-09T13:00:00.000Z", 825 | "seats": 177 826 | }, 827 | { 828 | "id": "tt1352852_0", 829 | "time": "2017-04-09T15:15:00.000Z", 830 | "seats": 174 831 | }, 832 | { 833 | "id": "tt1352852_3", 834 | "time": "2017-04-09T17:30:00.000Z", 835 | "seats": 183 836 | }, 837 | { 838 | "id": "tt1352852_1", 839 | "time": "2017-04-10T00:45:00.000Z", 840 | "seats": 175 841 | }, 842 | { 843 | "id": "tt1352852_0", 844 | "time": "2017-04-10T13:00:00.000Z", 845 | "seats": 174 846 | } 847 | ] 848 | }, 849 | { 850 | "id": "tt1379199", 851 | "movie": { 852 | "Title": "Chiaroscuro, Baby", 853 | "Year": "2009", 854 | "Rated": "R", 855 | "Released": "04 Nov 2009", 856 | "Runtime": "127 min", 857 | "Genre": "Drama", 858 | "Director": "Anthony Kilburn", 859 | "Writer": "Anthony Kilburn", 860 | "Actors": "Christopher Bolla, Christianna White, Milan Alley, Matt Shuman", 861 | "Plot": "An aspiring painter compromises his ambition for his seductive girlfriend, only to be torn when his empowering, new muse reignites his passion.", 862 | "Language": "English", 863 | "Country": "USA", 864 | "Awards": "N/A", 865 | "Poster": "http://ia.media-imdb.com/images/M/MV5BMzUyNjc3NTg0NV5BMl5BanBnXkFtZTcwMTQ1OTg4Mg@@._V1_SX300.jpg", 866 | "Ratings": [ 867 | { 868 | "Source": "Internet Movie Database", 869 | "Value": "5.7/10" 870 | } 871 | ], 872 | "Metascore": "N/A", 873 | "imdbRating": "5.7", 874 | "imdbVotes": "30", 875 | "imdbID": "tt1379199", 876 | "Type": "movie", 877 | "DVD": "N/A", 878 | "BoxOffice": "N/A", 879 | "Production": "N/A", 880 | "Website": "N/A", 881 | "Response": "True" 882 | }, 883 | "sessions": [ 884 | { 885 | "id": "tt1379199_7", 886 | "time": "2017-04-04T00:45:00.000Z", 887 | "seats": 224 888 | }, 889 | { 890 | "id": "tt1379199_9", 891 | "time": "2017-04-04T13:00:00.000Z", 892 | "seats": 242 893 | }, 894 | { 895 | "id": "tt1379199_6", 896 | "time": "2017-04-04T13:00:00.000Z", 897 | "seats": 215 898 | }, 899 | { 900 | "id": "tt1379199_2", 901 | "time": "2017-04-04T13:00:00.000Z", 902 | "seats": 179 903 | }, 904 | { 905 | "id": "tt1379199_5", 906 | "time": "2017-04-04T15:15:00.000Z", 907 | "seats": 206 908 | }, 909 | { 910 | "id": "tt1379199_4", 911 | "time": "2017-04-04T19:30:00.000Z", 912 | "seats": 197 913 | }, 914 | { 915 | "id": "tt1379199_8", 916 | "time": "2017-04-04T21:45:00.000Z", 917 | "seats": 233 918 | }, 919 | { 920 | "id": "tt1379199_3", 921 | "time": "2017-04-04T21:45:00.000Z", 922 | "seats": 188 923 | }, 924 | { 925 | "id": "tt1379199_1", 926 | "time": "2017-04-04T21:45:00.000Z", 927 | "seats": 170 928 | }, 929 | { 930 | "id": "tt1379199_0", 931 | "time": "2017-04-04T21:45:00.000Z", 932 | "seats": 161 933 | }, 934 | { 935 | "id": "tt1379199_6", 936 | "time": "2017-04-05T00:45:00.000Z", 937 | "seats": 215 938 | }, 939 | { 940 | "id": "tt1379199_8", 941 | "time": "2017-04-05T13:00:00.000Z", 942 | "seats": 233 943 | }, 944 | { 945 | "id": "tt1379199_1", 946 | "time": "2017-04-05T13:00:00.000Z", 947 | "seats": 170 948 | }, 949 | { 950 | "id": "tt1379199_5", 951 | "time": "2017-04-05T13:00:00.000Z", 952 | "seats": 206 953 | }, 954 | { 955 | "id": "tt1379199_4", 956 | "time": "2017-04-05T15:15:00.000Z", 957 | "seats": 197 958 | }, 959 | { 960 | "id": "tt1379199_3", 961 | "time": "2017-04-05T19:30:00.000Z", 962 | "seats": 188 963 | }, 964 | { 965 | "id": "tt1379199_2", 966 | "time": "2017-04-05T21:45:00.000Z", 967 | "seats": 179 968 | }, 969 | { 970 | "id": "tt1379199_9", 971 | "time": "2017-04-05T21:45:00.000Z", 972 | "seats": 242 973 | }, 974 | { 975 | "id": "tt1379199_7", 976 | "time": "2017-04-05T21:45:00.000Z", 977 | "seats": 224 978 | }, 979 | { 980 | "id": "tt1379199_0", 981 | "time": "2017-04-05T21:45:00.000Z", 982 | "seats": 161 983 | }, 984 | { 985 | "id": "tt1379199_0", 986 | "time": "2017-04-06T13:00:00.000Z", 987 | "seats": 161 988 | }, 989 | { 990 | "id": "tt1379199_1", 991 | "time": "2017-04-06T21:45:00.000Z", 992 | "seats": 162 993 | }, 994 | { 995 | "id": "tt1379199_4", 996 | "time": "2017-04-07T00:45:00.000Z", 997 | "seats": 197 998 | }, 999 | { 1000 | "id": "tt1379199_6", 1001 | "time": "2017-04-07T13:00:00.000Z", 1002 | "seats": 215 1003 | }, 1004 | { 1005 | "id": "tt1379199_3", 1006 | "time": "2017-04-07T13:00:00.000Z", 1007 | "seats": 188 1008 | }, 1009 | { 1010 | "id": "tt1379199_2", 1011 | "time": "2017-04-07T15:15:00.000Z", 1012 | "seats": 179 1013 | }, 1014 | { 1015 | "id": "tt1379199_9", 1016 | "time": "2017-04-07T15:15:00.000Z", 1017 | "seats": 242 1018 | }, 1019 | { 1020 | "id": "tt1379199_8", 1021 | "time": "2017-04-07T19:30:00.000Z", 1022 | "seats": 233 1023 | }, 1024 | { 1025 | "id": "tt1379199_1", 1026 | "time": "2017-04-07T19:30:00.000Z", 1027 | "seats": 170 1028 | }, 1029 | { 1030 | "id": "tt1379199_7", 1031 | "time": "2017-04-07T21:45:00.000Z", 1032 | "seats": 224 1033 | }, 1034 | { 1035 | "id": "tt1379199_0", 1036 | "time": "2017-04-07T21:45:00.000Z", 1037 | "seats": 161 1038 | }, 1039 | { 1040 | "id": "tt1379199_5", 1041 | "time": "2017-04-07T21:45:00.000Z", 1042 | "seats": 206 1043 | }, 1044 | { 1045 | "id": "tt1379199_3", 1046 | "time": "2017-04-08T00:45:00.000Z", 1047 | "seats": 182 1048 | }, 1049 | { 1050 | "id": "tt1379199_5", 1051 | "time": "2017-04-08T13:00:00.000Z", 1052 | "seats": 196 1053 | }, 1054 | { 1055 | "id": "tt1379199_2", 1056 | "time": "2017-04-08T13:00:00.000Z", 1057 | "seats": 175 1058 | }, 1059 | { 1060 | "id": "tt1379199_1", 1061 | "time": "2017-04-08T15:15:00.000Z", 1062 | "seats": 168 1063 | }, 1064 | { 1065 | "id": "tt1379199_0", 1066 | "time": "2017-04-08T19:30:00.000Z", 1067 | "seats": 161 1068 | }, 1069 | { 1070 | "id": "tt1379199_7", 1071 | "time": "2017-04-08T19:30:00.000Z", 1072 | "seats": 210 1073 | }, 1074 | { 1075 | "id": "tt1379199_6", 1076 | "time": "2017-04-08T21:45:00.000Z", 1077 | "seats": 203 1078 | }, 1079 | { 1080 | "id": "tt1379199_4", 1081 | "time": "2017-04-08T21:45:00.000Z", 1082 | "seats": 189 1083 | }, 1084 | { 1085 | "id": "tt1379199_2", 1086 | "time": "2017-04-09T00:45:00.000Z", 1087 | "seats": 167 1088 | }, 1089 | { 1090 | "id": "tt1379199_1", 1091 | "time": "2017-04-09T13:00:00.000Z", 1092 | "seats": 164 1093 | }, 1094 | { 1095 | "id": "tt1379199_0", 1096 | "time": "2017-04-09T15:15:00.000Z", 1097 | "seats": 161 1098 | }, 1099 | { 1100 | "id": "tt1379199_3", 1101 | "time": "2017-04-09T21:45:00.000Z", 1102 | "seats": 170 1103 | }, 1104 | { 1105 | "id": "tt1379199_1", 1106 | "time": "2017-04-10T00:45:00.000Z", 1107 | "seats": 162 1108 | }, 1109 | { 1110 | "id": "tt1379199_0", 1111 | "time": "2017-04-10T13:00:00.000Z", 1112 | "seats": 161 1113 | } 1114 | ] 1115 | }, 1116 | { 1117 | "id": "tt1562881", 1118 | "movie": { 1119 | "Title": "The Death of Hollywood", 1120 | "Year": "2009", 1121 | "Rated": "G", 1122 | "Released": "N/A", 1123 | "Runtime": "84 min", 1124 | "Genre": "Comedy, Crime, Drama", 1125 | "Director": "Blake Fitzpatrick", 1126 | "Writer": "Blake Fitzpatrick", 1127 | "Actors": "Philip Denver, Seth Correa, Joe Estevez, Sharon Marie Wright", 1128 | "Plot": "A disgruntled screenwriter kidnaps the sleazy Hollywood producer that stole his material and switches identities with him, attempting to change the face of corporate cinema forever.", 1129 | "Language": "English", 1130 | "Country": "USA", 1131 | "Awards": "4 wins.", 1132 | "Poster": "http://ia.media-imdb.com/images/M/MV5BMTY4NjkzMDg0NV5BMl5BanBnXkFtZTcwNjAwOTA3NA@@._V1_SX300.jpg", 1133 | "Ratings": [ 1134 | { 1135 | "Source": "Internet Movie Database", 1136 | "Value": "7.2/10" 1137 | } 1138 | ], 1139 | "Metascore": "N/A", 1140 | "imdbRating": "7.2", 1141 | "imdbVotes": "39", 1142 | "imdbID": "tt1562881", 1143 | "Type": "movie", 1144 | "DVD": "N/A", 1145 | "BoxOffice": "N/A", 1146 | "Production": "N/A", 1147 | "Website": "N/A", 1148 | "Response": "True" 1149 | }, 1150 | "sessions": [ 1151 | { 1152 | "id": "tt1562881_0", 1153 | "time": "2017-04-04T13:00:00.000Z", 1154 | "seats": 169 1155 | }, 1156 | { 1157 | "id": "tt1562881_1", 1158 | "time": "2017-04-04T20:45:00.000Z", 1159 | "seats": 170 1160 | }, 1161 | { 1162 | "id": "tt1562881_6", 1163 | "time": "2017-04-05T00:45:00.000Z", 1164 | "seats": 217 1165 | }, 1166 | { 1167 | "id": "tt1562881_5", 1168 | "time": "2017-04-05T13:00:00.000Z", 1169 | "seats": 209 1170 | }, 1171 | { 1172 | "id": "tt1562881_2", 1173 | "time": "2017-04-05T14:00:00.000Z", 1174 | "seats": 185 1175 | }, 1176 | { 1177 | "id": "tt1562881_4", 1178 | "time": "2017-04-05T17:30:00.000Z", 1179 | "seats": 201 1180 | }, 1181 | { 1182 | "id": "tt1562881_3", 1183 | "time": "2017-04-05T18:30:00.000Z", 1184 | "seats": 193 1185 | }, 1186 | { 1187 | "id": "tt1562881_0", 1188 | "time": "2017-04-05T20:45:00.000Z", 1189 | "seats": 169 1190 | }, 1191 | { 1192 | "id": "tt1562881_7", 1193 | "time": "2017-04-05T20:45:00.000Z", 1194 | "seats": 225 1195 | }, 1196 | { 1197 | "id": "tt1562881_8", 1198 | "time": "2017-04-05T20:45:00.000Z", 1199 | "seats": 233 1200 | }, 1201 | { 1202 | "id": "tt1562881_1", 1203 | "time": "2017-04-05T20:45:00.000Z", 1204 | "seats": 177 1205 | }, 1206 | { 1207 | "id": "tt1562881_5", 1208 | "time": "2017-04-06T00:45:00.000Z", 1209 | "seats": 209 1210 | }, 1211 | { 1212 | "id": "tt1562881_4", 1213 | "time": "2017-04-06T13:00:00.000Z", 1214 | "seats": 201 1215 | }, 1216 | { 1217 | "id": "tt1562881_8", 1218 | "time": "2017-04-06T14:00:00.000Z", 1219 | "seats": 233 1220 | }, 1221 | { 1222 | "id": "tt1562881_1", 1223 | "time": "2017-04-06T14:00:00.000Z", 1224 | "seats": 177 1225 | }, 1226 | { 1227 | "id": "tt1562881_3", 1228 | "time": "2017-04-06T17:30:00.000Z", 1229 | "seats": 193 1230 | }, 1231 | { 1232 | "id": "tt1562881_2", 1233 | "time": "2017-04-06T18:30:00.000Z", 1234 | "seats": 185 1235 | }, 1236 | { 1237 | "id": "tt1562881_6", 1238 | "time": "2017-04-06T20:45:00.000Z", 1239 | "seats": 217 1240 | }, 1241 | { 1242 | "id": "tt1562881_7", 1243 | "time": "2017-04-06T20:45:00.000Z", 1244 | "seats": 225 1245 | }, 1246 | { 1247 | "id": "tt1562881_0", 1248 | "time": "2017-04-06T20:45:00.000Z", 1249 | "seats": 169 1250 | }, 1251 | { 1252 | "id": "tt1562881_0", 1253 | "time": "2017-04-07T14:00:00.000Z", 1254 | "seats": 169 1255 | }, 1256 | { 1257 | "id": "tt1562881_2", 1258 | "time": "2017-04-07T17:30:00.000Z", 1259 | "seats": 173 1260 | }, 1261 | { 1262 | "id": "tt1562881_1", 1263 | "time": "2017-04-07T18:30:00.000Z", 1264 | "seats": 171 1265 | }, 1266 | { 1267 | "id": "tt1562881_3", 1268 | "time": "2017-04-08T00:45:00.000Z", 1269 | "seats": 187 1270 | }, 1271 | { 1272 | "id": "tt1562881_2", 1273 | "time": "2017-04-08T13:00:00.000Z", 1274 | "seats": 181 1275 | }, 1276 | { 1277 | "id": "tt1562881_6", 1278 | "time": "2017-04-08T14:00:00.000Z", 1279 | "seats": 205 1280 | }, 1281 | { 1282 | "id": "tt1562881_1", 1283 | "time": "2017-04-08T17:30:00.000Z", 1284 | "seats": 175 1285 | }, 1286 | { 1287 | "id": "tt1562881_0", 1288 | "time": "2017-04-08T18:30:00.000Z", 1289 | "seats": 169 1290 | }, 1291 | { 1292 | "id": "tt1562881_4", 1293 | "time": "2017-04-08T20:45:00.000Z", 1294 | "seats": 193 1295 | }, 1296 | { 1297 | "id": "tt1562881_5", 1298 | "time": "2017-04-08T20:45:00.000Z", 1299 | "seats": 199 1300 | }, 1301 | { 1302 | "id": "tt1562881_2", 1303 | "time": "2017-04-09T00:45:00.000Z", 1304 | "seats": 179 1305 | }, 1306 | { 1307 | "id": "tt1562881_1", 1308 | "time": "2017-04-09T13:00:00.000Z", 1309 | "seats": 174 1310 | }, 1311 | { 1312 | "id": "tt1562881_5", 1313 | "time": "2017-04-09T14:00:00.000Z", 1314 | "seats": 194 1315 | }, 1316 | { 1317 | "id": "tt1562881_0", 1318 | "time": "2017-04-09T17:30:00.000Z", 1319 | "seats": 169 1320 | }, 1321 | { 1322 | "id": "tt1562881_3", 1323 | "time": "2017-04-09T20:45:00.000Z", 1324 | "seats": 184 1325 | }, 1326 | { 1327 | "id": "tt1562881_4", 1328 | "time": "2017-04-09T20:45:00.000Z", 1329 | "seats": 189 1330 | }, 1331 | { 1332 | "id": "tt1562881_1", 1333 | "time": "2017-04-10T00:45:00.000Z", 1334 | "seats": 170 1335 | }, 1336 | { 1337 | "id": "tt1562881_0", 1338 | "time": "2017-04-10T13:00:00.000Z", 1339 | "seats": 169 1340 | } 1341 | ] 1342 | }, 1343 | { 1344 | "id": "tt0489037", 1345 | "movie": { 1346 | "Title": "Who Killed the Electric Car?", 1347 | "Year": "2006", 1348 | "Rated": "PG", 1349 | "Released": "04 Aug 2006", 1350 | "Runtime": "92 min", 1351 | "Genre": "Documentary", 1352 | "Director": "Chris Paine", 1353 | "Writer": "Chris Paine", 1354 | "Actors": "Martin Sheen, Reverend Gadget, Dave Barthmuss, Ed Begley Jr.", 1355 | "Plot": "A documentary that investigates the birth and death of the electric car, as well as the role of renewable energy and sustainable living in the future.", 1356 | "Language": "English", 1357 | "Country": "USA", 1358 | "Awards": "4 nominations.", 1359 | "Poster": "https://images-na.ssl-images-amazon.com/images/M/MV5BMTc1MTM0MTA2N15BMl5BanBnXkFtZTcwMTk1OTIzMQ@@._V1_SX300.jpg", 1360 | "Ratings": [ 1361 | { 1362 | "Source": "Internet Movie Database", 1363 | "Value": "7.7/10" 1364 | }, 1365 | { 1366 | "Source": "Rotten Tomatoes", 1367 | "Value": "88%" 1368 | }, 1369 | { 1370 | "Source": "Metacritic", 1371 | "Value": "70/100" 1372 | } 1373 | ], 1374 | "Metascore": "70", 1375 | "imdbRating": "7.7", 1376 | "imdbVotes": "11,448", 1377 | "imdbID": "tt0489037", 1378 | "Type": "movie", 1379 | "DVD": "14 Nov 2006", 1380 | "BoxOffice": "$1,324,335.00", 1381 | "Production": "Sony Pictures Classics", 1382 | "Website": "http://www.whokilledtheelectriccar.com/", 1383 | "Response": "True" 1384 | }, 1385 | "sessions": [ 1386 | { 1387 | "id": "tt0489037_7", 1388 | "time": "2017-04-04T00:45:00.000Z", 1389 | "seats": 218 1390 | }, 1391 | { 1392 | "id": "tt0489037_6", 1393 | "time": "2017-04-04T12:00:00.000Z", 1394 | "seats": 211 1395 | }, 1396 | { 1397 | "id": "tt0489037_2", 1398 | "time": "2017-04-04T12:00:00.000Z", 1399 | "seats": 183 1400 | }, 1401 | { 1402 | "id": "tt0489037_1", 1403 | "time": "2017-04-04T15:15:00.000Z", 1404 | "seats": 176 1405 | }, 1406 | { 1407 | "id": "tt0489037_5", 1408 | "time": "2017-04-04T16:15:00.000Z", 1409 | "seats": 204 1410 | }, 1411 | { 1412 | "id": "tt0489037_0", 1413 | "time": "2017-04-04T19:30:00.000Z", 1414 | "seats": 169 1415 | }, 1416 | { 1417 | "id": "tt0489037_4", 1418 | "time": "2017-04-04T20:45:00.000Z", 1419 | "seats": 197 1420 | }, 1421 | { 1422 | "id": "tt0489037_3", 1423 | "time": "2017-04-04T21:45:00.000Z", 1424 | "seats": 190 1425 | }, 1426 | { 1427 | "id": "tt0489037_1", 1428 | "time": "2017-04-05T12:00:00.000Z", 1429 | "seats": 172 1430 | }, 1431 | { 1432 | "id": "tt0489037_0", 1433 | "time": "2017-04-05T15:15:00.000Z", 1434 | "seats": 169 1435 | }, 1436 | { 1437 | "id": "tt0489037_3", 1438 | "time": "2017-04-05T20:45:00.000Z", 1439 | "seats": 178 1440 | }, 1441 | { 1442 | "id": "tt0489037_2", 1443 | "time": "2017-04-05T21:45:00.000Z", 1444 | "seats": 175 1445 | }, 1446 | { 1447 | "id": "tt0489037_0", 1448 | "time": "2017-04-06T12:00:00.000Z", 1449 | "seats": 169 1450 | }, 1451 | { 1452 | "id": "tt0489037_4", 1453 | "time": "2017-04-07T00:45:00.000Z", 1454 | "seats": 205 1455 | }, 1456 | { 1457 | "id": "tt0489037_6", 1458 | "time": "2017-04-07T12:00:00.000Z", 1459 | "seats": 223 1460 | }, 1461 | { 1462 | "id": "tt0489037_3", 1463 | "time": "2017-04-07T12:00:00.000Z", 1464 | "seats": 196 1465 | }, 1466 | { 1467 | "id": "tt0489037_5", 1468 | "time": "2017-04-07T15:15:00.000Z", 1469 | "seats": 214 1470 | }, 1471 | { 1472 | "id": "tt0489037_2", 1473 | "time": "2017-04-07T16:15:00.000Z", 1474 | "seats": 187 1475 | }, 1476 | { 1477 | "id": "tt0489037_9", 1478 | "time": "2017-04-07T16:15:00.000Z", 1479 | "seats": 250 1480 | }, 1481 | { 1482 | "id": "tt0489037_8", 1483 | "time": "2017-04-07T20:45:00.000Z", 1484 | "seats": 241 1485 | }, 1486 | { 1487 | "id": "tt0489037_1", 1488 | "time": "2017-04-07T20:45:00.000Z", 1489 | "seats": 178 1490 | }, 1491 | { 1492 | "id": "tt0489037_0", 1493 | "time": "2017-04-07T21:45:00.000Z", 1494 | "seats": 169 1495 | }, 1496 | { 1497 | "id": "tt0489037_7", 1498 | "time": "2017-04-07T21:45:00.000Z", 1499 | "seats": 232 1500 | }, 1501 | { 1502 | "id": "tt0489037_3", 1503 | "time": "2017-04-08T00:45:00.000Z", 1504 | "seats": 193 1505 | }, 1506 | { 1507 | "id": "tt0489037_5", 1508 | "time": "2017-04-08T12:00:00.000Z", 1509 | "seats": 209 1510 | }, 1511 | { 1512 | "id": "tt0489037_2", 1513 | "time": "2017-04-08T12:00:00.000Z", 1514 | "seats": 185 1515 | }, 1516 | { 1517 | "id": "tt0489037_4", 1518 | "time": "2017-04-08T15:15:00.000Z", 1519 | "seats": 201 1520 | }, 1521 | { 1522 | "id": "tt0489037_1", 1523 | "time": "2017-04-08T16:15:00.000Z", 1524 | "seats": 177 1525 | }, 1526 | { 1527 | "id": "tt0489037_8", 1528 | "time": "2017-04-08T16:15:00.000Z", 1529 | "seats": 233 1530 | }, 1531 | { 1532 | "id": "tt0489037_7", 1533 | "time": "2017-04-08T20:45:00.000Z", 1534 | "seats": 225 1535 | }, 1536 | { 1537 | "id": "tt0489037_0", 1538 | "time": "2017-04-08T20:45:00.000Z", 1539 | "seats": 169 1540 | }, 1541 | { 1542 | "id": "tt0489037_6", 1543 | "time": "2017-04-08T21:45:00.000Z", 1544 | "seats": 217 1545 | }, 1546 | { 1547 | "id": "tt0489037_2", 1548 | "time": "2017-04-09T00:45:00.000Z", 1549 | "seats": 177 1550 | }, 1551 | { 1552 | "id": "tt0489037_1", 1553 | "time": "2017-04-09T12:00:00.000Z", 1554 | "seats": 173 1555 | }, 1556 | { 1557 | "id": "tt0489037_4", 1558 | "time": "2017-04-09T12:00:00.000Z", 1559 | "seats": 185 1560 | }, 1561 | { 1562 | "id": "tt0489037_3", 1563 | "time": "2017-04-09T15:15:00.000Z", 1564 | "seats": 181 1565 | }, 1566 | { 1567 | "id": "tt0489037_0", 1568 | "time": "2017-04-09T16:15:00.000Z", 1569 | "seats": 169 1570 | }, 1571 | { 1572 | "id": "tt0489037_0", 1573 | "time": "2017-04-10T12:00:00.000Z", 1574 | "seats": 169 1575 | } 1576 | ] 1577 | }, 1578 | { 1579 | "id": "tt1783305", 1580 | "movie": { 1581 | "Title": "Insignificant Celluloid", 1582 | "Year": "2011", 1583 | "Rated": "PG-13", 1584 | "Released": "N/A", 1585 | "Runtime": "78 min", 1586 | "Genre": "Comedy, Drama", 1587 | "Director": "Blake Fitzpatrick", 1588 | "Writer": "Blake Fitzpatrick", 1589 | "Actors": "Seth Correa, Lahcen Anajjar, Erik J. Pratt, Steve Williams", 1590 | "Plot": "It's about people feeling ways about things.", 1591 | "Language": "English", 1592 | "Country": "USA", 1593 | "Awards": "3 wins & 2 nominations.", 1594 | "Poster": "http://ia.media-imdb.com/images/M/MV5BNjk0OTYzNzU3OF5BMl5BanBnXkFtZTcwNTAwOTA3NA@@._V1_SX300.jpg", 1595 | "Ratings": [ 1596 | { 1597 | "Source": "Internet Movie Database", 1598 | "Value": "6.8/10" 1599 | } 1600 | ], 1601 | "Metascore": "N/A", 1602 | "imdbRating": "6.8", 1603 | "imdbVotes": "41", 1604 | "imdbID": "tt1783305", 1605 | "Type": "movie", 1606 | "DVD": "N/A", 1607 | "BoxOffice": "N/A", 1608 | "Production": "N/A", 1609 | "Website": "N/A", 1610 | "Response": "True" 1611 | }, 1612 | "sessions": [ 1613 | { 1614 | "id": "tt1783305_1", 1615 | "time": "2017-04-04T12:00:00.000Z", 1616 | "seats": 178 1617 | }, 1618 | { 1619 | "id": "tt1783305_3", 1620 | "time": "2017-04-04T15:15:00.000Z", 1621 | "seats": 188 1622 | }, 1623 | { 1624 | "id": "tt1783305_2", 1625 | "time": "2017-04-04T15:15:00.000Z", 1626 | "seats": 183 1627 | }, 1628 | { 1629 | "id": "tt1783305_0", 1630 | "time": "2017-04-04T17:30:00.000Z", 1631 | "seats": 173 1632 | }, 1633 | { 1634 | "id": "tt1783305_5", 1635 | "time": "2017-04-04T19:30:00.000Z", 1636 | "seats": 198 1637 | }, 1638 | { 1639 | "id": "tt1783305_4", 1640 | "time": "2017-04-04T20:45:00.000Z", 1641 | "seats": 193 1642 | }, 1643 | { 1644 | "id": "tt1783305_0", 1645 | "time": "2017-04-05T12:00:00.000Z", 1646 | "seats": 173 1647 | }, 1648 | { 1649 | "id": "tt1783305_0", 1650 | "time": "2017-04-06T15:15:00.000Z", 1651 | "seats": 173 1652 | }, 1653 | { 1654 | "id": "tt1783305_1", 1655 | "time": "2017-04-06T15:15:00.000Z", 1656 | "seats": 176 1657 | }, 1658 | { 1659 | "id": "tt1783305_3", 1660 | "time": "2017-04-06T19:30:00.000Z", 1661 | "seats": 182 1662 | }, 1663 | { 1664 | "id": "tt1783305_2", 1665 | "time": "2017-04-06T20:45:00.000Z", 1666 | "seats": 179 1667 | }, 1668 | { 1669 | "id": "tt1783305_3", 1670 | "time": "2017-04-07T13:00:00.000Z", 1671 | "seats": 182 1672 | }, 1673 | { 1674 | "id": "tt1783305_0", 1675 | "time": "2017-04-07T15:15:00.000Z", 1676 | "seats": 173 1677 | }, 1678 | { 1679 | "id": "tt1783305_2", 1680 | "time": "2017-04-07T19:30:00.000Z", 1681 | "seats": 179 1682 | }, 1683 | { 1684 | "id": "tt1783305_1", 1685 | "time": "2017-04-07T20:45:00.000Z", 1686 | "seats": 176 1687 | }, 1688 | { 1689 | "id": "tt1783305_3", 1690 | "time": "2017-04-08T00:45:00.000Z", 1691 | "seats": 197 1692 | }, 1693 | { 1694 | "id": "tt1783305_4", 1695 | "time": "2017-04-08T12:00:00.000Z", 1696 | "seats": 205 1697 | }, 1698 | { 1699 | "id": "tt1783305_2", 1700 | "time": "2017-04-08T13:00:00.000Z", 1701 | "seats": 189 1702 | }, 1703 | { 1704 | "id": "tt1783305_5", 1705 | "time": "2017-04-08T15:15:00.000Z", 1706 | "seats": 213 1707 | }, 1708 | { 1709 | "id": "tt1783305_6", 1710 | "time": "2017-04-08T15:15:00.000Z", 1711 | "seats": 221 1712 | }, 1713 | { 1714 | "id": "tt1783305_1", 1715 | "time": "2017-04-08T19:30:00.000Z", 1716 | "seats": 181 1717 | }, 1718 | { 1719 | "id": "tt1783305_8", 1720 | "time": "2017-04-08T19:30:00.000Z", 1721 | "seats": 237 1722 | }, 1723 | { 1724 | "id": "tt1783305_7", 1725 | "time": "2017-04-08T20:45:00.000Z", 1726 | "seats": 229 1727 | }, 1728 | { 1729 | "id": "tt1783305_0", 1730 | "time": "2017-04-08T20:45:00.000Z", 1731 | "seats": 173 1732 | }, 1733 | { 1734 | "id": "tt1783305_2", 1735 | "time": "2017-04-09T00:45:00.000Z", 1736 | "seats": 187 1737 | }, 1738 | { 1739 | "id": "tt1783305_3", 1740 | "time": "2017-04-09T12:00:00.000Z", 1741 | "seats": 194 1742 | }, 1743 | { 1744 | "id": "tt1783305_1", 1745 | "time": "2017-04-09T13:00:00.000Z", 1746 | "seats": 180 1747 | }, 1748 | { 1749 | "id": "tt1783305_4", 1750 | "time": "2017-04-09T15:15:00.000Z", 1751 | "seats": 201 1752 | }, 1753 | { 1754 | "id": "tt1783305_5", 1755 | "time": "2017-04-09T15:15:00.000Z", 1756 | "seats": 208 1757 | }, 1758 | { 1759 | "id": "tt1783305_0", 1760 | "time": "2017-04-09T19:30:00.000Z", 1761 | "seats": 173 1762 | }, 1763 | { 1764 | "id": "tt1783305_7", 1765 | "time": "2017-04-09T19:30:00.000Z", 1766 | "seats": 222 1767 | }, 1768 | { 1769 | "id": "tt1783305_6", 1770 | "time": "2017-04-09T20:45:00.000Z", 1771 | "seats": 215 1772 | }, 1773 | { 1774 | "id": "tt1783305_1", 1775 | "time": "2017-04-10T00:45:00.000Z", 1776 | "seats": 174 1777 | }, 1778 | { 1779 | "id": "tt1783305_0", 1780 | "time": "2017-04-10T13:00:00.000Z", 1781 | "seats": 173 1782 | } 1783 | ] 1784 | }, 1785 | { 1786 | "id": "tt4479976", 1787 | "movie": { 1788 | "Title": "Freddy's Return: A Nightmare Reborn", 1789 | "Year": "2009", 1790 | "Rated": "PG-13", 1791 | "Released": "13 Nov 2009", 1792 | "Runtime": "120 min", 1793 | "Genre": "Horror", 1794 | "Director": "Jason Korsiak", 1795 | "Writer": "Wes Craven (based on characters created by), Jason Korsiak", 1796 | "Actors": "Ronin Booker, Zakary Booker, David Buczynski, Rodney Covington", 1797 | "Plot": "As a child, Kevin was kidnapped by Freddy Krueger before Freddy was killed by a mob of angry parents. Although he was rescued by the detective that arrested Krueger, he was left scarred ...", 1798 | "Language": "English", 1799 | "Country": "USA", 1800 | "Awards": "N/A", 1801 | "Poster": "http://ia.media-imdb.com/images/M/MV5BMWRmYTc0NDYtYTZkYS00YzBhLTkyMmUtZjg3MTcwMjUxZTljXkEyXkFqcGdeQXVyMzYzNzc1NjY@._V1_SX300.jpg", 1802 | "Ratings": [ 1803 | { 1804 | "Source": "Internet Movie Database", 1805 | "Value": "5.9/10" 1806 | } 1807 | ], 1808 | "Metascore": "N/A", 1809 | "imdbRating": "5.9", 1810 | "imdbVotes": "10", 1811 | "imdbID": "tt4479976", 1812 | "Type": "movie", 1813 | "DVD": "N/A", 1814 | "BoxOffice": "N/A", 1815 | "Production": "N/A", 1816 | "Website": "N/A", 1817 | "Response": "True" 1818 | }, 1819 | "sessions": [ 1820 | { 1821 | "id": "tt4479976_5", 1822 | "time": "2017-04-04T16:15:00.000Z", 1823 | "seats": 184 1824 | }, 1825 | { 1826 | "id": "tt4479976_6", 1827 | "time": "2017-04-04T16:15:00.000Z", 1828 | "seats": 190 1829 | }, 1830 | { 1831 | "id": "tt4479976_0", 1832 | "time": "2017-04-04T18:30:00.000Z", 1833 | "seats": 154 1834 | }, 1835 | { 1836 | "id": "tt4479976_1", 1837 | "time": "2017-04-04T19:30:00.000Z", 1838 | "seats": 160 1839 | }, 1840 | { 1841 | "id": "tt4479976_4", 1842 | "time": "2017-04-04T19:30:00.000Z", 1843 | "seats": 178 1844 | }, 1845 | { 1846 | "id": "tt4479976_2", 1847 | "time": "2017-04-04T21:45:00.000Z", 1848 | "seats": 166 1849 | }, 1850 | { 1851 | "id": "tt4479976_3", 1852 | "time": "2017-04-04T21:45:00.000Z", 1853 | "seats": 172 1854 | }, 1855 | { 1856 | "id": "tt4479976_6", 1857 | "time": "2017-04-05T00:45:00.000Z", 1858 | "seats": 196 1859 | }, 1860 | { 1861 | "id": "tt4479976_5", 1862 | "time": "2017-04-05T16:15:00.000Z", 1863 | "seats": 189 1864 | }, 1865 | { 1866 | "id": "tt4479976_4", 1867 | "time": "2017-04-05T16:15:00.000Z", 1868 | "seats": 182 1869 | }, 1870 | { 1871 | "id": "tt4479976_3", 1872 | "time": "2017-04-05T19:30:00.000Z", 1873 | "seats": 175 1874 | }, 1875 | { 1876 | "id": "tt4479976_0", 1877 | "time": "2017-04-05T19:30:00.000Z", 1878 | "seats": 154 1879 | }, 1880 | { 1881 | "id": "tt4479976_7", 1882 | "time": "2017-04-05T19:30:00.000Z", 1883 | "seats": 203 1884 | }, 1885 | { 1886 | "id": "tt4479976_1", 1887 | "time": "2017-04-05T21:45:00.000Z", 1888 | "seats": 161 1889 | }, 1890 | { 1891 | "id": "tt4479976_2", 1892 | "time": "2017-04-05T21:45:00.000Z", 1893 | "seats": 168 1894 | }, 1895 | { 1896 | "id": "tt4479976_5", 1897 | "time": "2017-04-06T00:45:00.000Z", 1898 | "seats": 199 1899 | }, 1900 | { 1901 | "id": "tt4479976_4", 1902 | "time": "2017-04-06T16:15:00.000Z", 1903 | "seats": 190 1904 | }, 1905 | { 1906 | "id": "tt4479976_3", 1907 | "time": "2017-04-06T16:15:00.000Z", 1908 | "seats": 181 1909 | }, 1910 | { 1911 | "id": "tt4479976_2", 1912 | "time": "2017-04-06T19:30:00.000Z", 1913 | "seats": 172 1914 | }, 1915 | { 1916 | "id": "tt4479976_6", 1917 | "time": "2017-04-06T19:30:00.000Z", 1918 | "seats": 208 1919 | }, 1920 | { 1921 | "id": "tt4479976_9", 1922 | "time": "2017-04-06T19:30:00.000Z", 1923 | "seats": 235 1924 | }, 1925 | { 1926 | "id": "tt4479976_7", 1927 | "time": "2017-04-06T21:45:00.000Z", 1928 | "seats": 217 1929 | }, 1930 | { 1931 | "id": "tt4479976_8", 1932 | "time": "2017-04-06T21:45:00.000Z", 1933 | "seats": 226 1934 | }, 1935 | { 1936 | "id": "tt4479976_1", 1937 | "time": "2017-04-06T21:45:00.000Z", 1938 | "seats": 163 1939 | }, 1940 | { 1941 | "id": "tt4479976_0", 1942 | "time": "2017-04-06T21:45:00.000Z", 1943 | "seats": 154 1944 | }, 1945 | { 1946 | "id": "tt4479976_4", 1947 | "time": "2017-04-07T00:45:00.000Z", 1948 | "seats": 190 1949 | }, 1950 | { 1951 | "id": "tt4479976_9", 1952 | "time": "2017-04-07T16:15:00.000Z", 1953 | "seats": 235 1954 | }, 1955 | { 1956 | "id": "tt4479976_2", 1957 | "time": "2017-04-07T16:15:00.000Z", 1958 | "seats": 172 1959 | }, 1960 | { 1961 | "id": "tt4479976_3", 1962 | "time": "2017-04-07T16:15:00.000Z", 1963 | "seats": 181 1964 | }, 1965 | { 1966 | "id": "tt4479976_1", 1967 | "time": "2017-04-07T19:30:00.000Z", 1968 | "seats": 163 1969 | }, 1970 | { 1971 | "id": "tt4479976_5", 1972 | "time": "2017-04-07T19:30:00.000Z", 1973 | "seats": 199 1974 | }, 1975 | { 1976 | "id": "tt4479976_8", 1977 | "time": "2017-04-07T19:30:00.000Z", 1978 | "seats": 226 1979 | }, 1980 | { 1981 | "id": "tt4479976_7", 1982 | "time": "2017-04-07T21:45:00.000Z", 1983 | "seats": 217 1984 | }, 1985 | { 1986 | "id": "tt4479976_0", 1987 | "time": "2017-04-07T21:45:00.000Z", 1988 | "seats": 154 1989 | }, 1990 | { 1991 | "id": "tt4479976_6", 1992 | "time": "2017-04-07T21:45:00.000Z", 1993 | "seats": 208 1994 | }, 1995 | { 1996 | "id": "tt4479976_3", 1997 | "time": "2017-04-08T00:45:00.000Z", 1998 | "seats": 175 1999 | }, 2000 | { 2001 | "id": "tt4479976_1", 2002 | "time": "2017-04-08T16:15:00.000Z", 2003 | "seats": 161 2004 | }, 2005 | { 2006 | "id": "tt4479976_2", 2007 | "time": "2017-04-08T16:15:00.000Z", 2008 | "seats": 168 2009 | }, 2010 | { 2011 | "id": "tt4479976_7", 2012 | "time": "2017-04-08T19:30:00.000Z", 2013 | "seats": 203 2014 | }, 2015 | { 2016 | "id": "tt4479976_4", 2017 | "time": "2017-04-08T19:30:00.000Z", 2018 | "seats": 182 2019 | }, 2020 | { 2021 | "id": "tt4479976_0", 2022 | "time": "2017-04-08T19:30:00.000Z", 2023 | "seats": 154 2024 | }, 2025 | { 2026 | "id": "tt4479976_6", 2027 | "time": "2017-04-08T21:45:00.000Z", 2028 | "seats": 196 2029 | }, 2030 | { 2031 | "id": "tt4479976_5", 2032 | "time": "2017-04-08T21:45:00.000Z", 2033 | "seats": 189 2034 | }, 2035 | { 2036 | "id": "tt4479976_2", 2037 | "time": "2017-04-09T00:45:00.000Z", 2038 | "seats": 162 2039 | }, 2040 | { 2041 | "id": "tt4479976_0", 2042 | "time": "2017-04-09T16:15:00.000Z", 2043 | "seats": 154 2044 | }, 2045 | { 2046 | "id": "tt4479976_1", 2047 | "time": "2017-04-09T16:15:00.000Z", 2048 | "seats": 158 2049 | }, 2050 | { 2051 | "id": "tt4479976_3", 2052 | "time": "2017-04-09T19:30:00.000Z", 2053 | "seats": 166 2054 | }, 2055 | { 2056 | "id": "tt4479976_4", 2057 | "time": "2017-04-09T21:45:00.000Z", 2058 | "seats": 170 2059 | }, 2060 | { 2061 | "id": "tt4479976_1", 2062 | "time": "2017-04-10T00:45:00.000Z", 2063 | "seats": 158 2064 | }, 2065 | { 2066 | "id": "tt4479976_0", 2067 | "time": "2017-04-10T16:15:00.000Z", 2068 | "seats": 154 2069 | }, 2070 | { 2071 | "id": "tt4479976_2", 2072 | "time": "2017-04-10T19:30:00.000Z", 2073 | "seats": 162 2074 | }, 2075 | { 2076 | "id": "tt4479976_3", 2077 | "time": "2017-04-10T21:45:00.000Z", 2078 | "seats": 166 2079 | }, 2080 | { 2081 | "id": "tt4479976_4", 2082 | "time": "2017-04-10T21:45:00.000Z", 2083 | "seats": 170 2084 | } 2085 | ] 2086 | } 2087 | ] 2088 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Vue.js Cinema 7 | 8 | 9 | 14 | 15 | 16 |
17 |
18 | 19 |

Vue.js Cinema

20 |
21 |
22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-cinema", 3 | "version": "1.1.0", 4 | "description": "The Ultimate Vue.js Developers Course - Vue.js Cinema", 5 | "main": "server.js", 6 | "author": "Anthony Gore ", 7 | "repository": { 8 | "type": "git", 9 | "url": "https://github.com/vuejsdevelopers/vuejs-cinema" 10 | }, 11 | "license": "UNLICENSED", 12 | "scripts": { 13 | "start": "nodemon ./server.js --ignore src/ -e js,html,css", 14 | "build": "rimraf dist && cross-env NODE_ENV=production webpack --progress --hide-modules" 15 | }, 16 | "engines": { 17 | "node": ">=5.10" 18 | }, 19 | "dependencies": { 20 | "async": "~2.1.4", 21 | "axios": "^0.19.2", 22 | "cross-env": "~3.1.3", 23 | "dotenv": "~2.0.0", 24 | "express": "~4.16.4", 25 | "nodemon": "~1.11.0" 26 | }, 27 | "devDependencies": { 28 | "babel-core": "~6.26.0", 29 | "babel-loader": "~6.4.1", 30 | "babel-plugin-transform-es2015-destructuring": "~6.23.0", 31 | "babel-plugin-transform-object-rest-spread": "~6.26.0", 32 | "babel-plugin-transform-runtime": "~6.23.0", 33 | "babel-preset-env": "~1.6.1", 34 | "css-loader": "~0.25.0", 35 | "file-loader": "~0.9.0", 36 | "moment": "~2.23.0", 37 | "moment-timezone": "~0.5.11", 38 | "node-sass": "~4.14.1", 39 | "opn": "~5.4.0", 40 | "sass-loader": "~4.1.1", 41 | "style-loader": "~0.13.1", 42 | "uglify-js": "~3.0.28", 43 | "vue": "~2.1.0", 44 | "vue-loader": "~10.0.0", 45 | "vue-resource": "~1.0.3", 46 | "vue-router": "~2.1.1", 47 | "vue-style-loader": "~1.0.0", 48 | "vue-template-compiler": "~2.1.0", 49 | "webpack": "~2.7.0", 50 | "webpack-dev-middleware": "~1.9.0", 51 | "webpack-hot-middleware": "~2.14.0", 52 | "webpack-module-hot-accept": "~1.0.4" 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vuejsdevelopers/vuejs-cinema/e70d2e56cbdc99a553e45090e506f49baef18d88/public/favicon.ico -------------------------------------------------------------------------------- /public/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vuejsdevelopers/vuejs-cinema/e70d2e56cbdc99a553e45090e506f49baef18d88/public/logo.png -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ silent: true }); 2 | 3 | const express = require('express'); 4 | const app = express(); 5 | const path = require('path'); 6 | const fs = require('fs'); 7 | const api = require('./api'); 8 | 9 | if (process.env.NODE_ENV === 'development') { 10 | require('./webpack-dev-middleware').init(app); 11 | } 12 | 13 | if (process.env.NODE_ENV === 'production') { 14 | app.use('/dist', express.static(path.join(__dirname, 'dist'))); 15 | } 16 | 17 | app.use('/public', express.static(path.join(__dirname, 'public'))); 18 | 19 | let template = fs.readFileSync(path.resolve('./index.html'), 'utf-8'); 20 | app.get('/', function(req, res) { 21 | res.send(template); 22 | }); 23 | 24 | app.get('/api', function(req, res) { 25 | api.getData(function(err, data) { 26 | if (err) { 27 | res.status(500).send(err); 28 | } else { 29 | res.json(data); 30 | } 31 | }); 32 | }); 33 | 34 | let offlineData = JSON.parse(fs.readFileSync(path.resolve('./api_offline.json'), 'utf-8')); 35 | app.get('/offline_api', function(req, res) { 36 | let data = offlineData.find(item => item.imdbID === req.query.i); 37 | if (!data) { 38 | data = { "Response":"False", "Error":`IMDb ID ${req.query.i} not found.` } 39 | } 40 | res.json(data); 41 | }); 42 | 43 | app.listen(process.env.PORT, function () { 44 | console.log(`Example app listening on port ${process.env.PORT}!`); 45 | if (process.env.NODE_ENV === 'development') { 46 | require('opn')(`http://localhost:${process.env.PORT}`); 47 | } 48 | }); 49 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vuejsdevelopers/vuejs-cinema/e70d2e56cbdc99a553e45090e506f49baef18d88/src/main.js -------------------------------------------------------------------------------- /src/style.scss: -------------------------------------------------------------------------------- 1 | $mine-shaft: #3F3F3F; 2 | $charcoal: #232323; 3 | $cod-gray: #141414; 4 | $sunshade: #ffa624; 5 | $dove-gray: #6e6e6e; 6 | $bright-red: #b50010; 7 | $white: #ffffff; 8 | $alto: #dcdcdc; 9 | 10 | @mixin body-view { 11 | padding: 0 2rem; 12 | } 13 | 14 | $text-shadow: 1px 1px 2px rgba(0,0,0,0.3); 15 | 16 | $break-small: 800px; 17 | 18 | body, html { 19 | width: 100%; 20 | height: 100%; 21 | background-color: $charcoal; 22 | color: $white; 23 | padding: 0; 24 | margin: 0; 25 | 26 | #app { 27 | background-color: $mine-shaft; 28 | max-width: 1100px; 29 | margin: 0 auto; 30 | 31 | font-family: 'Avenir', Helvetica, Arial, sans-serif; 32 | -webkit-font-smoothing: antialiased; 33 | -moz-osx-font-smoothing: grayscale; 34 | 35 | #title { 36 | padding: 2rem 0 1rem 2rem; 37 | display: flex; 38 | align-items: center; 39 | 40 | img { 41 | width: 90px; 42 | height: 90px; 43 | display: inline-block; 44 | } 45 | 46 | h1 { 47 | display: inline-block; 48 | font-family: 'Orbitron', sans-serif; 49 | margin: 0; 50 | padding: 0 0 0 1rem; 51 | font-size: 2.5rem; 52 | color: white; 53 | text-shadow: 2px 2px 4px rgba(0,0,0,0.3); 54 | user-select: none; 55 | } 56 | 57 | @media screen and (max-width: $break-small) { 58 | img { 59 | width: 50px; 60 | height: 50px; 61 | } 62 | 63 | h1 { 64 | font-size: 1.5rem; 65 | } 66 | } 67 | } 68 | 69 | #day-select { 70 | .days { 71 | margin: 0; 72 | list-style-type: none; 73 | cursor: pointer; 74 | background: $charcoal; 75 | display: flex; 76 | flex-direction: row; 77 | flex-wrap: nowrap; 78 | width: 100%; 79 | padding: 0; 80 | 81 | @media screen and (max-width: $break-small) { 82 | justify-content: space-between; 83 | } 84 | 85 | .day { 86 | display: inline; 87 | color: $white; 88 | padding: 1rem; 89 | user-select: none; 90 | font-weight: bold; 91 | white-space: nowrap; 92 | overflow: hidden; 93 | 94 | &:hover { 95 | background-color: lighten($charcoal, 3%); 96 | } 97 | 98 | &.active { 99 | color: $bright-red; 100 | text-decoration: underline; 101 | background-color: darken($charcoal, 5%); 102 | } 103 | 104 | @media screen and (max-width: $break-small) { 105 | display: none; 106 | &.active { 107 | display: inline; 108 | } 109 | } 110 | } 111 | 112 | .day-selector { 113 | display: none; 114 | 115 | @media screen and (max-width: $break-small) { 116 | display: inline-flex; 117 | justify-content: space-between; 118 | width: 80px; 119 | color: $white; 120 | user-select: none; 121 | font-weight: bold; 122 | padding: 0; 123 | span { 124 | width: 40px; 125 | font-size: 3rem; 126 | position: relative; 127 | &:after { 128 | position: absolute; 129 | left: 5px; 130 | bottom: -6px; 131 | } 132 | 133 | &:hover { 134 | background-color: lighten($charcoal, 3%); 135 | } 136 | } 137 | } 138 | 139 | .dec:after { 140 | content: '<'; 141 | } 142 | 143 | .inc:after { 144 | content: '>'; 145 | } 146 | 147 | } 148 | } 149 | } 150 | 151 | .movie { 152 | display: flex; 153 | margin-bottom: 2rem; 154 | 155 | .movie-col-left { 156 | 157 | img { 158 | height: 250px; 159 | display: block; 160 | 161 | @media screen and (max-width: $break-small) { 162 | height: 150px; 163 | } 164 | } 165 | } 166 | .movie-col-right { 167 | padding-left: 1rem; 168 | 169 | .movie-title { 170 | margin-bottom: 1rem; 171 | display: flex; 172 | align-items: flex-start; 173 | flex-wrap: wrap; 174 | 175 | h2 { 176 | color: $sunshade; 177 | margin: 0; 178 | text-shadow: $text-shadow; 179 | display: inline-block; 180 | margin-right: 0.5rem; 181 | } 182 | 183 | .movie-rating { 184 | color: white; 185 | text-shadow: $text-shadow; 186 | background-color: $bright-red; 187 | line-height: 1.5rem; 188 | padding: 0.3rem 0.5rem 0.2rem; 189 | font-weight: bold; 190 | user-select: none; 191 | white-space: nowrap; 192 | overflow: hidden; 193 | } 194 | 195 | @media screen and (max-width: $break-small) { 196 | h2 { 197 | font-size: 1.25rem; 198 | line-height: 1.25rem; 199 | } 200 | .movie-rating { 201 | font-size: 0.8rem; 202 | line-height: 1rem; 203 | padding: 0.2rem 0.35rem 0.1rem; 204 | } 205 | 206 | } 207 | } 208 | } 209 | } 210 | 211 | #overview { 212 | @include body-view; 213 | 214 | .main { 215 | display: flex; 216 | 217 | @media screen and (max-width: $break-small) { 218 | flex-direction: column; 219 | } 220 | 221 | #movie-list { 222 | flex-basis: 75%; 223 | } 224 | #movie-filter { 225 | flex-basis: 25%; 226 | 227 | @media screen and (max-width: $break-small) { 228 | order: -1; 229 | } 230 | } 231 | } 232 | } 233 | 234 | #movie-list { 235 | padding-top: 2rem; 236 | 237 | .movie { 238 | border-bottom: ridge 2px $dove-gray; 239 | padding-bottom: 2rem; 240 | 241 | .movie-col-right { 242 | 243 | .movie-sessions { 244 | 245 | .session-time-wrapper { 246 | float: left; 247 | 248 | .session-time { 249 | background-color: $dove-gray; 250 | padding: 0.5rem; 251 | margin-right: 0.5rem; 252 | user-select: none; 253 | margin-bottom: 0.5rem; 254 | font-weight: bold; 255 | color: white; 256 | text-shadow: 1px 1px 1px rgba(0,0,0,0.3); 257 | white-space: nowrap; 258 | 259 | @media screen and (max-width: $break-small) { 260 | padding: 0.35rem; 261 | font-size: 0.8rem; 262 | } 263 | } 264 | } 265 | } 266 | } 267 | } 268 | 269 | .no-results { 270 | color: white; 271 | font-weight: bold; 272 | font-size: 1.25rem; 273 | padding-bottom: 2rem; 274 | } 275 | } 276 | 277 | $filter-shadow: 1px 1px 2px rgba(0,0,0,0.3); 278 | 279 | #movie-filter { 280 | color: $white; 281 | font-size: 1.15rem; 282 | margin-bottom: 2rem; 283 | padding-left: 2rem; 284 | 285 | @media screen and (max-width: $break-small) { 286 | padding-bottom: 2rem; 287 | margin-bottom: 0; 288 | padding-left: 0; 289 | border-bottom: ridge 2px $dove-gray; 290 | font-size: 1rem; 291 | } 292 | 293 | h2 { 294 | border-bottom: 3px solid $white; 295 | text-shadow: $filter-shadow; 296 | } 297 | 298 | h3 { 299 | margin: 2rem 0 0 0; 300 | text-shadow: $filter-shadow; 301 | } 302 | 303 | .filter-group { 304 | display: flex; 305 | flex-direction: column; 306 | 307 | @media screen and (max-width: $break-small) { 308 | flex-direction: row; 309 | flex-wrap: wrap; 310 | } 311 | 312 | .check-filter { 313 | color: $alto; 314 | cursor: pointer; 315 | margin-top: 0.5rem; 316 | margin-right: 1rem; 317 | text-shadow: $filter-shadow; 318 | display: flex; 319 | flex-direction: row; 320 | 321 | @media screen and (max-width: $break-small) { 322 | width: 150px; 323 | } 324 | 325 | &:hover { 326 | color: $white; 327 | 328 | .checkbox { 329 | border-color: $white; 330 | } 331 | } 332 | 333 | &.active { 334 | color: $white; 335 | 336 | .checkbox::after { 337 | content: ''; 338 | border-color: $white; 339 | background-color: $sunshade; 340 | position: absolute; 341 | width: 14px; 342 | height: 14px; 343 | left: 3px; 344 | top: 3px; 345 | border-radius: 2px; 346 | 347 | } 348 | } 349 | 350 | .checkbox { 351 | display: inline-block; 352 | position: relative; 353 | width: 20px; 354 | height: 20px; 355 | border: 1px solid $alto; 356 | border-radius: 3px; 357 | user-select: none; 358 | box-shadow: $filter-shadow; 359 | } 360 | 361 | .check-filter-title { 362 | user-select: none; 363 | vertical-align: top; 364 | line-height: 1.6rem; 365 | padding-left: 0.45rem; 366 | } 367 | } 368 | } 369 | 370 | } 371 | 372 | #detail { 373 | @include body-view; 374 | padding-bottom: 2rem; 375 | 376 | .home { 377 | padding: 1rem 0; 378 | margin-bottom: 1rem; 379 | 380 | a { 381 | border-top: 2px solid white; 382 | color: white; 383 | text-decoration: none; 384 | font-size: 1.25rem; 385 | padding: 0.5rem 0; 386 | } 387 | } 388 | 389 | .movie { 390 | .movie-details { 391 | color: $white; 392 | 393 | .movie-genre { 394 | font-weight: bold; 395 | } 396 | 397 | table { 398 | tr { 399 | td { 400 | vertical-align: top; 401 | } 402 | td:first-child { 403 | font-weight: bold; 404 | padding-right: 0.5rem; 405 | } 406 | } 407 | } 408 | } 409 | } 410 | } 411 | } 412 | 413 | } 414 | 415 | 416 | $tooltip-width-desktop: 9rem; 417 | $tooltip-width-mobile: 9rem; 418 | $tooltip-padding: 1rem; 419 | $arrow-border: 7px; 420 | 421 | .tooltip-wrapper { 422 | position: relative; 423 | 424 | .tooltip { 425 | display: none; 426 | 427 | &.tooltip-show { 428 | text-align: center; 429 | display: block; 430 | position: absolute; 431 | left: 50%; 432 | top: 0; 433 | width: $tooltip-width-desktop; 434 | transform: translate(-($tooltip-width-desktop/2 + $tooltip-padding), 50px); 435 | background-color: $cod-gray; 436 | color: white; 437 | padding: $tooltip-padding; 438 | z-index: 10; 439 | 440 | @media screen and (max-width: $break-small) { 441 | width: $tooltip-width-mobile; 442 | transform: translate(-($tooltip-width-mobile/2 + $tooltip-padding), 40px); 443 | } 444 | } 445 | 446 | &:after { 447 | content:''; 448 | position: absolute; 449 | width: 0; 450 | height: 0; 451 | border-left: $arrow-border solid transparent; 452 | border-right: $arrow-border solid transparent; 453 | border-bottom: 10px solid $cod-gray; 454 | top: -10px; 455 | left: calc(50% - #{$arrow-border}); 456 | } 457 | } 458 | } 459 | -------------------------------------------------------------------------------- /src/util/genres.js: -------------------------------------------------------------------------------- 1 | module.exports = Object.freeze({ 2 | ANIMATION: 'Animation', 3 | COMEDY: 'Comedy', 4 | CRIME: 'Crime', 5 | DOCUMENTARY: 'Documentary', 6 | DRAMA: 'Drama', 7 | FANTASY: 'Fantasy', 8 | HORROR: 'Horror' 9 | }); 10 | -------------------------------------------------------------------------------- /src/util/helpers.js: -------------------------------------------------------------------------------- 1 | function hasClass(el, className) { 2 | if (el.classList) 3 | return el.classList.contains(className); 4 | else 5 | return !!el.className.match(new RegExp('(\\s|^)' + className + '(\\s|$)')) 6 | } 7 | 8 | function addClass(el, className) { 9 | if (el.classList) 10 | el.classList.add(className); 11 | else if (!hasClass(el, className)) el.className += " " + className 12 | } 13 | 14 | function removeClass(el, className) { 15 | if (el.classList) 16 | el.classList.remove(className); 17 | else if (hasClass(el, className)) { 18 | var reg = new RegExp('(\\s|^)' + className + '(\\s|$)'); 19 | el.className = el.className.replace(reg, ' ') 20 | } 21 | } 22 | 23 | export { hasClass, addClass, removeClass }; 24 | -------------------------------------------------------------------------------- /src/util/times.js: -------------------------------------------------------------------------------- 1 | export default Object.freeze({ 2 | BEFORE_6PM: 'Before 6pm', 3 | AFTER_6PM: 'After 6pm' 4 | }); 5 | -------------------------------------------------------------------------------- /webpack-dev-middleware.js: -------------------------------------------------------------------------------- 1 | const webpackDevMiddleware = require("webpack-dev-middleware"); 2 | const webpack = require("webpack"); 3 | const webpackConfig = require('./webpack.config'); 4 | const compiler = webpack(webpackConfig); 5 | 6 | module.exports = { 7 | init(app) { 8 | app.use(webpackDevMiddleware(compiler, { 9 | hot: true, 10 | stats: { 11 | colors: true 12 | }, 13 | historyApiFallback: true, 14 | publicPath: webpackConfig.output.publicPath, 15 | filename: webpackConfig.output.filename, 16 | })); 17 | 18 | app.use(require("webpack-hot-middleware")(compiler, { 19 | log: console.log, 20 | path: '/__webpack_hmr', 21 | heartbeat: 10 * 1000, 22 | })); 23 | } 24 | }; 25 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config(); 2 | 3 | const path = require('path'); 4 | const webpack = require('webpack'); 5 | 6 | module.exports = { 7 | entry: [ 8 | './src/main.js' 9 | ], 10 | output: { 11 | path: path.resolve(__dirname, './dist'), 12 | publicPath: '/dist/', 13 | filename: 'build.js' 14 | }, 15 | module: { 16 | rules: [ 17 | { 18 | test: /\.js$/, 19 | use: [{ 20 | loader: 'babel-loader', 21 | options: { 22 | "presets": [ [ "env" ] ], 23 | "plugins": [ "transform-es2015-destructuring", "transform-object-rest-spread", "transform-runtime" ] 24 | } 25 | }], 26 | exclude: /node_modules/, 27 | }, 28 | { 29 | test: /\.scss$/, 30 | loader: 'style-loader!css-loader!sass-loader' 31 | }, 32 | { 33 | test: /\.vue$/, 34 | loader: 'vue-loader', 35 | options: { 36 | loaders: { 37 | // Since sass-loader (weirdly) has SCSS as its default parse mode, we map 38 | // the "scss" and "sass" values for the lang attribute to the right configs here. 39 | // other preprocessors should work out of the box, no loader config like this nessessary. 40 | 'scss': 'vue-style-loader!css-loader!sass-loader', 41 | 'sass': 'vue-style-loader!css-loader!sass-loader?indentedSyntax', 42 | 'js': 'babel-loader?presets[]=env' 43 | } 44 | } 45 | } 46 | ] 47 | }, 48 | resolve: { 49 | alias: { 50 | 'vue$': 'vue/dist/vue.common.js' 51 | } 52 | }, 53 | devServer: { 54 | historyApiFallback: true, 55 | noInfo: true 56 | }, 57 | performance: { 58 | hints: false 59 | }, 60 | devtool: '#eval-source-map' 61 | }; 62 | 63 | if (process.env.NODE_ENV === 'development') { 64 | module.exports.plugins = [ 65 | new webpack.optimize.OccurrenceOrderPlugin(), 66 | new webpack.HotModuleReplacementPlugin(), 67 | new webpack.NoEmitOnErrorsPlugin() 68 | ]; 69 | module.exports.entry.push('webpack-hot-middleware/client?path=/__webpack_hmr&timeout=20000'); //?noInfo=true&quiet=true) 70 | module.exports.module.rules[0].use.push({ loader: 'webpack-module-hot-accept' }); 71 | } 72 | 73 | if (process.env.NODE_ENV === 'production') { 74 | module.exports.devtool = '#source-map'; 75 | // http://vue-loader.vuejs.org/en/workflow/production.html 76 | module.exports.plugins = (module.exports.plugins || []).concat([ 77 | new webpack.DefinePlugin({ 78 | 'process.env': { 79 | NODE_ENV: '"production"' 80 | } 81 | }), 82 | new webpack.optimize.UglifyJsPlugin({ 83 | sourceMap: true, 84 | compress: { 85 | warnings: false 86 | } 87 | }), 88 | new webpack.LoaderOptionsPlugin({ 89 | minimize: true 90 | }) 91 | ]) 92 | } 93 | --------------------------------------------------------------------------------