odeon_uk 0.0.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +1 -0
- data/README.md +46 -2
- data/Rakefile +9 -1
- data/lib/odeon_uk.rb +10 -1
- data/lib/odeon_uk/cinema.rb +152 -0
- data/lib/odeon_uk/film.rb +18 -0
- data/lib/odeon_uk/internal/film_with_screenings_parser.rb +51 -0
- data/lib/odeon_uk/screening.rb +34 -0
- data/lib/odeon_uk/version.rb +1 -1
- data/odeon_uk.gemspec +7 -0
- data/test/fixtures/brighton-showtimes/about-time.html +175 -0
- data/test/fixtures/brighton-showtimes/autism-friendly-planes.html +75 -0
- data/test/fixtures/brighton-showtimes/bolshoi-spartacus-live.html +67 -0
- data/test/fixtures/brighton-showtimes/cinemagic-echo-planet.html +67 -0
- data/test/fixtures/brighton-showtimes/globe-on-screen-twelfth-night.html +67 -0
- data/test/fixtures/brighton-showtimes/met-opera-eugene-onegin.html +67 -0
- data/test/fixtures/brighton-showtimes/national-theatre-live-frankenstein.html +78 -0
- data/test/fixtures/brighton-showtimes/nt-live-war-horse.html +67 -0
- data/test/fixtures/brighton-showtimes/royal-opera-house-turandot.html +66 -0
- data/test/fixtures/brighton-showtimes/rsc-richard-ii.html +67 -0
- data/test/fixtures/brighton-showtimes/star-trek-into-darkness-2d.html +83 -0
- data/test/fixtures/brighton-showtimes/ukjff-from-cable-street-to-brick-lane.html +67 -0
- data/test/fixtures/manchester-showtimes/thor-the-dark-world.html +300 -0
- data/test/fixtures/odeon-brighton-showtimes.html +1238 -0
- data/test/fixtures/odeon-brighton.html +2706 -0
- data/test/fixtures/odeon-sitemap.html +1263 -0
- data/test/lib/odeon_uk/cinema_test.rb +185 -0
- data/test/lib/odeon_uk/film_test.rb +13 -0
- data/test/lib/odeon_uk/internal/film_with_screenings_parser_test.rb +167 -0
- data/test/lib/odeon_uk/screening_test.rb +32 -0
- data/test/test_helper.rb +3 -0
- metadata +126 -2
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# OdeonUk
|
2
2
|
|
3
|
-
|
3
|
+
A simple gem to parse the (Odeon UK website)[http://odeon.co.uk] and spit out useful formatted info.
|
4
|
+
|
5
|
+
[](https://codeclimate.com/github/andycroll/odeon_uk)
|
4
6
|
|
5
7
|
## Installation
|
6
8
|
|
@@ -18,7 +20,49 @@ Or install it yourself as:
|
|
18
20
|
|
19
21
|
## Usage
|
20
22
|
|
21
|
-
|
23
|
+
### Cinema
|
24
|
+
|
25
|
+
``` ruby
|
26
|
+
OdeonUk::Cinema.all
|
27
|
+
#=> [<OdeonUk::Cinema brand="Odeon" name="Odeon Tunbridge Wells" slug="odeon-tunbridge-wells" chain_id="23" url="...">, #=> <OdeonUk::Cinema brand="Odeon" name="Odeon Brighton" slug="odeon-brighton" chain_id="71" url="...">, ...]
|
28
|
+
|
29
|
+
OdeonUk::Cinema.find_by_id('71')
|
30
|
+
#=> <OdeonUk::Cinema brand="Odeon" name="Odeon Brighton" slug="odeon-brighton" address="..." chain_id="71" url="...">
|
31
|
+
|
32
|
+
OdeonUk::Cinema.find_by_id(71)
|
33
|
+
#=> <OdeonUk::Cinema brand="Odeon" name="Odeon Brighton" slug="odeon-brighton" address="..." chain_id="71" url="...">
|
34
|
+
|
35
|
+
cinema = OdeonUk::Cinema.find_by_slug('odeon-brighton')
|
36
|
+
#=> <OdeonUk::Cinema brand="Odeon" name="Odeon Brighton" slug="odeon-brighton" chain_id="71" url="...">
|
37
|
+
|
38
|
+
cinema.brand
|
39
|
+
#=> 'Odeon'
|
40
|
+
|
41
|
+
cinema.chain_id
|
42
|
+
#=> '71'
|
43
|
+
|
44
|
+
cinema.url
|
45
|
+
#=> "http://www.odeon.co.uk/cinemas/brighton/71/"
|
46
|
+
|
47
|
+
cinema.films
|
48
|
+
#=> [<OdeonUk::Film name="Iron Man 3">, <OdeonUk::Film name="Star Trek: Into Darkness">]
|
49
|
+
|
50
|
+
cinema.screenings
|
51
|
+
#=> [<OdeonUk::Screening film="About Time" when="2013-09-09 11:00 UTC" varient="3d">, <OdeonUk::Screening film="Iron Man 3" when="2013-09-09 13:50 UTC" varient="kids">, <OdeonUk::Screening ..>, <OdeonUk::Screening ...>]
|
52
|
+
|
53
|
+
cinema.screenings_of 'Iron Man 3'
|
54
|
+
#=> [<OdeonUk::Screening film="Iron Man 3" when="2013-09-09 11:00 UTC" varient="3d">, <OdeonUk::Screening film="Iron Man 3" when="2013-09-09 13:50 UTC" varient="kids">]
|
55
|
+
|
56
|
+
cinema.screenings_of <OdeonUk::Film name="Iron Man 3">
|
57
|
+
#=> [<OdeonUk::Screening film="Iron Man 3" when="2013-09-09 11:00 UTC" varient="3d">, <OdeonUk::Screening film="Iron Man 3" when="2013-09-09 13:50 UTC" varient="kids">]
|
58
|
+
```
|
59
|
+
|
60
|
+
### Film
|
61
|
+
|
62
|
+
``` ruby
|
63
|
+
OdeonUk::Film.all
|
64
|
+
#=> [<OdeonUk::Film name="Iron Man 3" slug="iron-man-3">, <OdeonUk::Film name="Star Trek Into Darkness" slug="star-trek-into-darkness">, <OdeonUk::Film name="Captain America: The First Avenger" slug="captain-america-the-first-avenger">, <OdeonUk::Film name="Thor: The Dark World" slug="thor-the-dark-world">]
|
65
|
+
```
|
22
66
|
|
23
67
|
## Contributing
|
24
68
|
|
data/Rakefile
CHANGED
@@ -5,8 +5,16 @@ require 'rake/testtask'
|
|
5
5
|
|
6
6
|
Rake::TestTask.new do |t|
|
7
7
|
t.libs << 'lib/odeon_uk'
|
8
|
-
t.test_files = FileList['test/lib/odeon_uk/*_test.rb']
|
8
|
+
t.test_files = FileList['test/lib/odeon_uk/*_test.rb', 'test/lib/odeon_uk/internal/*_test.rb']
|
9
9
|
t.verbose = true
|
10
10
|
end
|
11
11
|
|
12
|
+
task :build do
|
13
|
+
system "gem build odeon_uk.gemspec"
|
14
|
+
end
|
15
|
+
|
16
|
+
task :release => :build do
|
17
|
+
system "gem push odeon_uk-#{OdeonUk::VERSION}"
|
18
|
+
end
|
19
|
+
|
12
20
|
task :default => :test
|
data/lib/odeon_uk.rb
CHANGED
@@ -1,4 +1,13 @@
|
|
1
|
-
require
|
1
|
+
require 'httparty'
|
2
|
+
require 'nokogiri'
|
3
|
+
require 'tzinfo'
|
4
|
+
require 'pp'
|
5
|
+
|
6
|
+
require_relative './odeon_uk/internal/film_with_screenings_parser'
|
7
|
+
require_relative './odeon_uk/version'
|
8
|
+
require_relative './odeon_uk/cinema'
|
9
|
+
require_relative './odeon_uk/film'
|
10
|
+
require_relative './odeon_uk/screening'
|
2
11
|
|
3
12
|
module OdeonUk
|
4
13
|
# Your code goes here...
|
@@ -0,0 +1,152 @@
|
|
1
|
+
module OdeonUk
|
2
|
+
|
3
|
+
# Public: The object representing a cinema on the Odeon UK website
|
4
|
+
class Cinema
|
5
|
+
|
6
|
+
# Public: Returns the String brand of the cinema #=> 'Odeon'
|
7
|
+
attr_reader :brand
|
8
|
+
# Public: Returns the Integer id of the cinema on teh odeon website
|
9
|
+
attr_reader :id
|
10
|
+
# Public: Returns the String name of the cinema
|
11
|
+
attr_reader :name
|
12
|
+
# Public: Returns the String slug of the cinema
|
13
|
+
attr_reader :slug
|
14
|
+
# Public: Returns the String url of the cinema's page on odeon.co.uk
|
15
|
+
attr_reader :url
|
16
|
+
|
17
|
+
# Public: Initialize a cinema
|
18
|
+
#
|
19
|
+
# id - Integer/String of the cinema on the odeon website
|
20
|
+
# name - String of cinema name
|
21
|
+
# url - String of cinema url on the odeon website
|
22
|
+
def initialize(id, name, url)
|
23
|
+
@brand = 'Odeon'
|
24
|
+
@id = id.to_i
|
25
|
+
@name = name
|
26
|
+
@slug = name.downcase.gsub(/[^0-9a-z ]/,'').gsub(/\s+/, '-')
|
27
|
+
@url = (url[0] == '/') ? "http://www.odeon.co.uk#{url}" : url
|
28
|
+
end
|
29
|
+
|
30
|
+
# Public: Return basic cinema information for all Odeon cinemas
|
31
|
+
#
|
32
|
+
# Examples
|
33
|
+
#
|
34
|
+
# OdeonUk::Cinema.all
|
35
|
+
# # => [<OdeonUk::Cinema brand="Odeon" name="Odeon Tunbridge Wells" slug="odeon-tunbridge-wells" id=23 url="...">, #=> <OdeonUk::Cinema brand="Odeon" name="Odeon Brighton" slug="odeon-brighton" chain_id="71" url="...">, ...]
|
36
|
+
#
|
37
|
+
# Returns an array of hashes of cinema information.
|
38
|
+
def self.all
|
39
|
+
cinema_links.map do |link|
|
40
|
+
new_from_link link
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# Public: Return single cinema information for an Odeon cinema
|
45
|
+
#
|
46
|
+
# id_string - a string/int representing the cinema id
|
47
|
+
# of the format '32'/32 as used on the odeon.co.uk website
|
48
|
+
#
|
49
|
+
# Examples
|
50
|
+
#
|
51
|
+
# OdeonUk::Cinema.find('71')
|
52
|
+
# # => <OdeonUk::Cinema brand="Odeon" name="Brighton" slug="brighton" id=71 url="...">
|
53
|
+
#
|
54
|
+
# Returns an Odeon::Cinema or nil if none was found
|
55
|
+
def self.find(id)
|
56
|
+
id = id.to_i
|
57
|
+
return nil unless id > 0
|
58
|
+
|
59
|
+
all.select { |cinema| cinema.id == id }[0]
|
60
|
+
end
|
61
|
+
|
62
|
+
# Public: Returns films for an Odeon cinema
|
63
|
+
#
|
64
|
+
# Examples
|
65
|
+
#
|
66
|
+
# cinema = OdeonUk::Cinema.find('71')
|
67
|
+
# cinema.films
|
68
|
+
# # => [<OdeonUk::Film name="Iron Man 3">, <OdeonUk::Film name="Star Trek Into Darkness">]
|
69
|
+
#
|
70
|
+
# Returns an array of Odeon::Film objects
|
71
|
+
def films
|
72
|
+
film_nodes.map do |node|
|
73
|
+
parser = OdeonUk::Internal::FilmWithScreeningsParser.new node.to_s
|
74
|
+
OdeonUk::Film.new parser.film_name
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
# Public: Returns screenings for an Odeon cinema
|
79
|
+
#
|
80
|
+
# Examples
|
81
|
+
#
|
82
|
+
# cinema = OdeonUk::Cinema.find('71')
|
83
|
+
# cinema.screenings
|
84
|
+
# # => [<OdeonUk::Screening film_name="Iron Man 3" cinema_name="Brighton" when="..." varient="...">, <OdeonUk::Screening ...>]
|
85
|
+
#
|
86
|
+
# Returns an array of Odeon::Screening objects
|
87
|
+
def screenings
|
88
|
+
film_nodes.map do |node|
|
89
|
+
parser = OdeonUk::Internal::FilmWithScreeningsParser.new node.to_s
|
90
|
+
parser.showings.map do |screening_type, times|
|
91
|
+
times.map do |time|
|
92
|
+
OdeonUk::Screening.new parser.film_name, self.name, time.strftime('%d/%m/%Y'), time.strftime('%H:%M:%S'), nil
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end.flatten
|
96
|
+
end
|
97
|
+
|
98
|
+
# Public: Returns screenings for particular film at an Odeon cinema
|
99
|
+
#
|
100
|
+
# Examples
|
101
|
+
#
|
102
|
+
# cinema = OdeonUk::Cinema.find('71')
|
103
|
+
# cinema.screenings_of 'Iron Man 3'
|
104
|
+
# # => [<OdeonUk::Screening film_name="Iron Man 3" cinema_name="Brighton" when="..." varient="...">, <OdeonUk::Screening ...>]
|
105
|
+
# cinema.screenings_of <OdeonUk::Film name="Iron Man 3">
|
106
|
+
# # => [<OdeonUk::Screening film_name="Iron Man 3" cinema_name="Brighton" when="..." varient="...">, <OdeonUk::Screening ...>]
|
107
|
+
#
|
108
|
+
# Returns an array of Odeon::Screening objects
|
109
|
+
def screenings_of film
|
110
|
+
film_name = (film.is_a?(OdeonUk::Film) ? film.name : film)
|
111
|
+
screenings.select { |s| s.film_name == film_name }
|
112
|
+
end
|
113
|
+
|
114
|
+
private
|
115
|
+
|
116
|
+
def self.cinema_links
|
117
|
+
links = parsed_sitemap.css('.sitemap > .span12:nth-child(4) a[href*=cinemas]')
|
118
|
+
links.select { |link| link.get_attribute('href').match(/\/\d+\/$/) }
|
119
|
+
end
|
120
|
+
|
121
|
+
def self.new_from_link(link)
|
122
|
+
url = link.get_attribute('href')
|
123
|
+
id = url.match(/\/(\d+)\/$/)[1]
|
124
|
+
name = link.children.first.to_s
|
125
|
+
new id, name, url
|
126
|
+
end
|
127
|
+
|
128
|
+
def self.parsed_sitemap
|
129
|
+
Nokogiri::HTML(sitemap_response)
|
130
|
+
end
|
131
|
+
|
132
|
+
def self.sitemap_response
|
133
|
+
@sitemap_response ||= HTTParty.get('http://www.odeon.co.uk/sitemap/')
|
134
|
+
end
|
135
|
+
|
136
|
+
def cinema_response
|
137
|
+
@cinema_response ||= HTTParty.get(@url)
|
138
|
+
end
|
139
|
+
|
140
|
+
def film_nodes
|
141
|
+
parsed_showtimes.css('.film-detail')
|
142
|
+
end
|
143
|
+
|
144
|
+
def parsed_showtimes
|
145
|
+
Nokogiri::HTML(showtimes_response)
|
146
|
+
end
|
147
|
+
|
148
|
+
def showtimes_response
|
149
|
+
@showtimes_response ||= HTTParty.get("http://www.odeon.co.uk/showtimes/week/#{@id}?siteId=#{@id}")
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module OdeonUk
|
2
|
+
|
3
|
+
# Public: The object representing a film on the Odeon UK website
|
4
|
+
class Film
|
5
|
+
|
6
|
+
# Public: Returns the String name of the film
|
7
|
+
attr_reader :name
|
8
|
+
|
9
|
+
# Public: Initialize a screening
|
10
|
+
#
|
11
|
+
# name - String of the film name
|
12
|
+
def initialize(name)
|
13
|
+
@name = name
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module OdeonUk
|
2
|
+
module Internal
|
3
|
+
# Private: An object to parse a film HTML snippet
|
4
|
+
class FilmWithScreeningsParser
|
5
|
+
|
6
|
+
def initialize(film_html)
|
7
|
+
@nokogiri_html = Nokogiri::HTML(film_html)
|
8
|
+
end
|
9
|
+
|
10
|
+
def film_name
|
11
|
+
name = @nokogiri_html.css('.presentation-info h4 a').children.first.to_s
|
12
|
+
|
13
|
+
# screening types
|
14
|
+
name = name.gsub /\s+[23][dD]/, '' #remove 2d or 3d from title
|
15
|
+
name = name.gsub 'Autism Friendly Screening -', '' # remove autism friendly
|
16
|
+
|
17
|
+
# special screenings
|
18
|
+
name = name.gsub 'ROH -', 'Royal Opera House:' # fill out Royal Opera House
|
19
|
+
name = name.gsub 'Met Opera -', 'Met Opera:' # fill out Met Opera
|
20
|
+
name = name.gsub /Cinemagic \d{1,4} \-/, '' # remove cinemagic stuff
|
21
|
+
name = name.gsub 'UKJFF -', '' # remove UK Jewish festival prefix
|
22
|
+
name = name.gsub 'NT Live -', 'National Theatre:' # National theatre
|
23
|
+
name = name.gsub 'National Theatre Live -', 'National Theatre:'
|
24
|
+
name = name.gsub /\(Encore.+\)/, '' # National theatre, remove encore
|
25
|
+
name = name.gsub 'Bolshoi -', 'Bolshoi:' # bolshoi ballet
|
26
|
+
name = name.gsub /\([Ll]ive\)/, '' # remove bolshoi-style live
|
27
|
+
name = name.gsub 'Globe On Screen:', 'Globe:' # globe
|
28
|
+
if name.match /RSC Live/
|
29
|
+
name = 'Royal Shakespeare Company: ' + name.gsub(/\- RSC Live \d{1,4}/, '')
|
30
|
+
end
|
31
|
+
|
32
|
+
name = name.squeeze(' ') # spaces compressed
|
33
|
+
name = name.gsub /\A\s+/, '' # remove leading spaces
|
34
|
+
name = name.gsub /\s+\z/, '' # remove trailing spaces
|
35
|
+
end
|
36
|
+
|
37
|
+
def showings
|
38
|
+
tz = TZInfo::Timezone.get('Europe/London')
|
39
|
+
@nokogiri_html.css('.times-all.accordion-group').inject({}) do |result, varient_node|
|
40
|
+
varient = varient_node.css('.tech a').text.gsub('in ', '').upcase
|
41
|
+
|
42
|
+
times = varient_node.css('.performance-detail').map do |screening_node|
|
43
|
+
tz.local_to_utc(Time.parse(screening_node['title'].match(/\d+\/\d+\/\d+ \d{2}\:\d{2}/).to_s))
|
44
|
+
end
|
45
|
+
|
46
|
+
result.merge(varient => times)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module OdeonUk
|
2
|
+
|
3
|
+
# Public: The object representing a screening of a film on the Odeon UK website
|
4
|
+
class Screening
|
5
|
+
|
6
|
+
# Public: Returns the String name of the cinema
|
7
|
+
attr_reader :cinema_name
|
8
|
+
# Public: Returns the String name of the film
|
9
|
+
attr_reader :film_name
|
10
|
+
# Public: Returns the Time of the screening
|
11
|
+
attr_reader :when
|
12
|
+
# Public: Returns the Type of screening (3d, baby, kids, live)
|
13
|
+
attr_reader :varient
|
14
|
+
|
15
|
+
# Public: Initialize a screening
|
16
|
+
#
|
17
|
+
# film_name - String of the film name
|
18
|
+
# cinema_name - String of the cinema name on the Odeon website
|
19
|
+
# date - String/Date representing the date of the screening
|
20
|
+
# time - String representing the time of the screening (24 hour clock)
|
21
|
+
# varient - String representing the type of showing (e.g. 3d/baby/live)
|
22
|
+
def initialize(film_name, cinema_name, date, time, varient=nil)
|
23
|
+
@cinema_name, @film_name, @varient = cinema_name, film_name, varient
|
24
|
+
@when = Time.parse("#{date} #{time} UTC")
|
25
|
+
end
|
26
|
+
|
27
|
+
# Public: The Date of the screening
|
28
|
+
#
|
29
|
+
# Returns a Date
|
30
|
+
def date
|
31
|
+
@when.to_date
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/odeon_uk/version.rb
CHANGED
data/odeon_uk.gemspec
CHANGED
@@ -18,5 +18,12 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.require_paths = ["lib"]
|
19
19
|
|
20
20
|
gem.version = OdeonUk::VERSION
|
21
|
+
|
21
22
|
gem.add_development_dependency 'rake'
|
23
|
+
gem.add_development_dependency 'webmock'
|
24
|
+
|
25
|
+
gem.add_runtime_dependency 'httparty'
|
26
|
+
gem.add_runtime_dependency 'nokogiri'
|
27
|
+
gem.add_runtime_dependency 'tzinfo'
|
28
|
+
gem.add_runtime_dependency 'tzinfo-data'
|
22
29
|
end
|
@@ -0,0 +1,175 @@
|
|
1
|
+
<div id="22876" class="film-detail WEEK">
|
2
|
+
<div class="content-container film _WEEK" id="film-22876">
|
3
|
+
<div class="grad-hor">
|
4
|
+
<a href="/films/about_time/14426/">
|
5
|
+
<img src="http://odeon-fastly.krankikom.de.global.prod.fastly.net/_uploads/asset_management/70x108_fedb25894d81108e06f9dd8903ea1d51.jpg"></a>
|
6
|
+
<div class="presentation-info">
|
7
|
+
<h4>
|
8
|
+
<a href="/films/about_time/14426/">About Time</a>
|
9
|
+
</h4>
|
10
|
+
<div class="cert-icon-uk-12A-small"></div>
|
11
|
+
<span class="description"></span>
|
12
|
+
</div>
|
13
|
+
<p> <strong>Charming time-travelling rom-com with Rachel McAdams</strong>
|
14
|
+
</p>
|
15
|
+
<div class="presentation-info">
|
16
|
+
<div rating-master-id="14426" class="star-rating-container star-rating rating-icon-star-light-small-inactive">
|
17
|
+
<div class="rating-icon-star-small-active s7">
|
18
|
+
<div class="rate-over s1"></div>
|
19
|
+
<div class="rate-over s2"></div>
|
20
|
+
<div class="rate-over s3"></div>
|
21
|
+
<div class="rate-over s4"></div>
|
22
|
+
<div class="rate-over s5"></div>
|
23
|
+
</div>
|
24
|
+
</div>
|
25
|
+
<span class="description"> <strong>Film length: 123 mins</strong>
|
26
|
+
</span>
|
27
|
+
</div>
|
28
|
+
<p class="description">
|
29
|
+
Contains infrequent strong language and moderate sex references
|
30
|
+
</p>
|
31
|
+
</div>
|
32
|
+
<div class="info-corner">
|
33
|
+
<div class="img-bundle">
|
34
|
+
<div class="film-icon-WEEK feature-icon-light-2d-medium WEEK_2D" data-schedule="2D" data-film="22876"></div>
|
35
|
+
</div>
|
36
|
+
<div class="btn-group">
|
37
|
+
<a href="http://odeon.trailer.cineweb.de/about_time.mp4" class="btn btn-primary trailer kkvideo-trigger" data-film-id="14426" data-showbooknowbutton="false"> <i class="film-icon-btn-play"></i>
|
38
|
+
Trailer
|
39
|
+
</a>
|
40
|
+
<button class="btn btn-primary trailer dropdown-toggle" data-toggle="dropdown">
|
41
|
+
<span class="caret"></span>
|
42
|
+
</button>
|
43
|
+
<ul class="dropdown-menu">
|
44
|
+
<li>
|
45
|
+
<a href="#">Add to Playlist</a>
|
46
|
+
</li>
|
47
|
+
</ul>
|
48
|
+
</div>
|
49
|
+
</div>
|
50
|
+
</div>
|
51
|
+
<div id="performances-WEEK-22876" class="content-container times-all _WEEK">
|
52
|
+
<div class="accordion-group times-all performances-WEEK _22876" id="tech-22876-0">
|
53
|
+
<div class="content-container tech accordion-heading _WEEK">
|
54
|
+
<a data-toggle="collapse" data-parent="#tech-22876-0-WEEK" class="accordion-toggle" href="#collapse-22876-0-WEEK">in 2D</a>
|
55
|
+
<a href="#" class="icon-info-blue info-icon-form-info-small" data-toggle="popover" title="" data-placement="bottom" data-content="2D means two dimensional. No 3D glasses required. Sit back, relax and enjoy."></a>
|
56
|
+
</div>
|
57
|
+
<div id="collapse-22876-0-WEEK" class="accordion-body in collapse" style="height: auto;">
|
58
|
+
<div class="accordion-inner">
|
59
|
+
<div class="content-container times containerWEEK">
|
60
|
+
<div class="presentation-info week">
|
61
|
+
<strong>Saturday</strong>
|
62
|
+
<br>14 Sep</div>
|
63
|
+
<ul class="unstyled inline">
|
64
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_AFTERNOON WEEK_2D WEEK_GENRE_7 show">
|
65
|
+
<a href="/booking/init/MUZFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 14/09/2013 12:20" data-popup="popup" data-duration="123" data-start="12:20" data-end="14:23" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">12:20</a>
|
66
|
+
</li>
|
67
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_AFTERNOON WEEK_2D WEEK_GENRE_7 show">
|
68
|
+
<a href="/booking/init/RkRFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 14/09/2013 15:10" data-popup="popup" data-duration="123" data-start="15:10" data-end="17:13" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">15:10</a>
|
69
|
+
</li>
|
70
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_EVENING WEEK_2D WEEK_GENRE_7 show">
|
71
|
+
<a href="/booking/init/NUVFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 14/09/2013 17:50" data-popup="popup" data-duration="123" data-start="17:50" data-end="19:53" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">17:50</a>
|
72
|
+
</li>
|
73
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_EVENING WEEK_2D WEEK_GENRE_7 show">
|
74
|
+
<a href="/booking/init/QkVFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 14/09/2013 20:30" data-popup="popup" data-duration="123" data-start="20:30" data-end="22:33" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">20:30</a>
|
75
|
+
</li>
|
76
|
+
</ul>
|
77
|
+
</div>
|
78
|
+
<div class="content-container times containerWEEK">
|
79
|
+
<div class="presentation-info week">
|
80
|
+
<strong>Sunday</strong>
|
81
|
+
<br>15 Sep</div>
|
82
|
+
<ul class="unstyled inline">
|
83
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_AFTERNOON WEEK_2D WEEK_GENRE_7 show">
|
84
|
+
<a href="/booking/init/M0ZFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 15/09/2013 12:20" data-popup="popup" data-duration="123" data-start="12:20" data-end="14:23" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">12:20</a>
|
85
|
+
</li>
|
86
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_AFTERNOON WEEK_2D WEEK_GENRE_7 show">
|
87
|
+
<a href="/booking/init/MEVFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 15/09/2013 15:10" data-popup="popup" data-duration="123" data-start="15:10" data-end="17:13" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">15:10</a>
|
88
|
+
</li>
|
89
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_EVENING WEEK_2D WEEK_GENRE_7 show">
|
90
|
+
<a href="/booking/init/NkVFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 15/09/2013 17:50" data-popup="popup" data-duration="123" data-start="17:50" data-end="19:53" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">17:50</a>
|
91
|
+
</li>
|
92
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_EVENING WEEK_2D WEEK_GENRE_7 show">
|
93
|
+
<a href="/booking/init/Q0VFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 15/09/2013 20:30" data-popup="popup" data-duration="123" data-start="20:30" data-end="22:33" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">20:30</a>
|
94
|
+
</li>
|
95
|
+
</ul>
|
96
|
+
</div>
|
97
|
+
<div class="content-container times containerWEEK">
|
98
|
+
<div class="presentation-info week">
|
99
|
+
<strong>Monday</strong>
|
100
|
+
<br>16 Sep</div>
|
101
|
+
<ul class="unstyled inline">
|
102
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-lightblue WEEK_ISSUPERSAVER WEEK_12A WEEK_AFTERNOON WEEK_2D WEEK_GENRE_7 show">
|
103
|
+
<a href="/booking/init/MUVFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Super Saver - book About Time on 16/09/2013 15:10" data-popup="popup" data-duration="123" data-start="15:10" data-end="17:13" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">15:10</a>
|
104
|
+
</li>
|
105
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_EVENING WEEK_2D WEEK_GENRE_7 show">
|
106
|
+
<a href="/booking/init/N0VFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 16/09/2013 17:50" data-popup="popup" data-duration="123" data-start="17:50" data-end="19:53" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">17:50</a>
|
107
|
+
</li>
|
108
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_EVENING WEEK_2D WEEK_GENRE_7 show">
|
109
|
+
<a href="/booking/init/REVFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 16/09/2013 20:30" data-popup="popup" data-duration="123" data-start="20:30" data-end="22:33" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">20:30</a>
|
110
|
+
</li>
|
111
|
+
</ul>
|
112
|
+
</div>
|
113
|
+
<div class="content-container times containerWEEK">
|
114
|
+
<div class="presentation-info week">
|
115
|
+
<strong>Tuesday</strong>
|
116
|
+
<br>17 Sep</div>
|
117
|
+
<ul class="unstyled inline">
|
118
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-lightblue WEEK_ISSAVER WEEK_12A WEEK_AFTERNOON WEEK_2D WEEK_GENRE_7 show">
|
119
|
+
<a href="/booking/init/MkVFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Saver - book About Time on 17/09/2013 15:10" data-popup="popup" data-duration="123" data-start="15:10" data-end="17:13" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">15:10</a>
|
120
|
+
</li>
|
121
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-lightblue WEEK_ISSAVER WEEK_12A WEEK_EVENING WEEK_2D WEEK_GENRE_7 show">
|
122
|
+
<a href="/booking/init/OEVFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Saver - book About Time on 17/09/2013 17:50" data-popup="popup" data-duration="123" data-start="17:50" data-end="19:53" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">17:50</a>
|
123
|
+
</li>
|
124
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-lightblue WEEK_ISSAVER WEEK_12A WEEK_EVENING WEEK_2D WEEK_GENRE_7 show">
|
125
|
+
<a href="/booking/init/RUVFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Saver - book About Time on 17/09/2013 20:30" data-popup="popup" data-duration="123" data-start="20:30" data-end="22:33" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">20:30</a>
|
126
|
+
</li>
|
127
|
+
</ul>
|
128
|
+
</div>
|
129
|
+
<div class="content-container times containerWEEK">
|
130
|
+
<div class="presentation-info week">
|
131
|
+
<strong>Wednesday</strong>
|
132
|
+
<br>18 Sep</div>
|
133
|
+
<ul class="unstyled inline">
|
134
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-lightblue WEEK_ISSUPERSAVER WEEK_12A WEEK_AFTERNOON WEEK_2D WEEK_GENRE_7 show">
|
135
|
+
<a href="/booking/init/M0VFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Super Saver - book About Time on 18/09/2013 15:10" data-popup="popup" data-duration="123" data-start="15:10" data-end="17:13" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">15:10</a>
|
136
|
+
</li>
|
137
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_EVENING WEEK_2D WEEK_GENRE_7 show">
|
138
|
+
<a href="/booking/init/OUVFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 18/09/2013 17:50" data-popup="popup" data-duration="123" data-start="17:50" data-end="19:53" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">17:50</a>
|
139
|
+
</li>
|
140
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_EVENING WEEK_2D WEEK_GENRE_7 show">
|
141
|
+
<a href="/booking/init/RkVFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 18/09/2013 20:30" data-popup="popup" data-duration="123" data-start="20:30" data-end="22:33" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">20:30</a>
|
142
|
+
</li>
|
143
|
+
</ul>
|
144
|
+
</div>
|
145
|
+
<div class="content-container times containerWEEK">
|
146
|
+
<div class="content-container brown">
|
147
|
+
<h6>Newbies</h6>
|
148
|
+
</div>
|
149
|
+
<div class="presentation-info week">
|
150
|
+
<strong>Thursday</strong>
|
151
|
+
<br>19 Sep</div>
|
152
|
+
<ul class="unstyled inline">
|
153
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-lightblue WEEK_ISSUPERSAVER WEEK_12A WEEK_MORNING WEEK_NEWBIES WEEK_2D WEEK_GENRE_7 show">
|
154
|
+
<a href="/booking/init/NUZFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Super Saver - book About Time on 19/09/2013 10:45" data-popup="popup" data-duration="123" data-start="10:45" data-end="12:48" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 4 (Wheelchair Accessible)" data-is-online="1">10:45</a>
|
155
|
+
</li>
|
156
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-lightblue WEEK_ISSUPERSAVER WEEK_12A WEEK_AFTERNOON WEEK_2D WEEK_GENRE_7 show">
|
157
|
+
<a href="/booking/init/NEVFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Super Saver - book About Time on 19/09/2013 15:10" data-popup="popup" data-duration="123" data-start="15:10" data-end="17:13" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">15:10</a>
|
158
|
+
</li>
|
159
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_EVENING WEEK_2D WEEK_GENRE_7 show">
|
160
|
+
<a href="/booking/init/QUVFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 19/09/2013 17:50" data-popup="popup" data-duration="123" data-start="17:50" data-end="19:53" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">17:50</a>
|
161
|
+
</li>
|
162
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_EVENING WEEK_2D WEEK_GENRE_7 show">
|
163
|
+
<a href="/booking/init/MEZFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 19/09/2013 20:30" data-popup="popup" data-duration="123" data-start="20:30" data-end="22:33" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">20:30</a>
|
164
|
+
</li>
|
165
|
+
</ul>
|
166
|
+
</div>
|
167
|
+
<div class="content-container times stopper performances-WEEK _22876"></div>
|
168
|
+
</div>
|
169
|
+
</div>
|
170
|
+
</div>
|
171
|
+
<!-- <div class="content-container times stopper performances-WEEK _22876"></div>
|
172
|
+
-->
|
173
|
+
<div class="content-container white performances-WEEK _22876"></div>
|
174
|
+
</div>
|
175
|
+
</div>
|