geoblacklight 0.0.2

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.
Files changed (52) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +19 -0
  3. data/.gitmodules +5 -0
  4. data/Gemfile +11 -0
  5. data/LICENSE.txt +13 -0
  6. data/README.md +103 -0
  7. data/Rakefile +44 -0
  8. data/app/assets/images/blacklight/logo.png +0 -0
  9. data/app/assets/images/geoblacklight/src_berkeley.png +0 -0
  10. data/app/assets/images/geoblacklight/src_cambridge.png +0 -0
  11. data/app/assets/images/geoblacklight/src_harvard.png +0 -0
  12. data/app/assets/images/geoblacklight/src_maryland.png +0 -0
  13. data/app/assets/images/geoblacklight/src_massgis.png +0 -0
  14. data/app/assets/images/geoblacklight/src_mit.png +0 -0
  15. data/app/assets/images/geoblacklight/src_princeton.png +0 -0
  16. data/app/assets/images/geoblacklight/src_stanford.png +0 -0
  17. data/app/assets/images/geoblacklight/src_tufts.png +0 -0
  18. data/app/assets/images/geoblacklight/src_un.png +0 -0
  19. data/app/assets/images/geoblacklight/type_arc.png +0 -0
  20. data/app/assets/images/geoblacklight/type_dot.png +0 -0
  21. data/app/assets/images/geoblacklight/type_library.png +0 -0
  22. data/app/assets/images/geoblacklight/type_map.png +0 -0
  23. data/app/assets/images/geoblacklight/type_polygon.png +0 -0
  24. data/app/assets/images/geoblacklight/type_raster.png +0 -0
  25. data/app/assets/javascripts/geoblacklight/application.js +2 -0
  26. data/app/assets/javascripts/geoblacklight/geoblacklight.js +4 -0
  27. data/app/assets/javascripts/geoblacklight/modules/map-home.js +25 -0
  28. data/app/assets/javascripts/geoblacklight/modules/map-results.js +72 -0
  29. data/app/assets/javascripts/geoblacklight/modules/map-view.js +211 -0
  30. data/app/controllers/download_controller.rb +107 -0
  31. data/app/controllers/wms_controller.rb +81 -0
  32. data/app/helpers/geoblacklight_helper.rb +91 -0
  33. data/app/views/catalog/_document_list.html.erb +12 -0
  34. data/app/views/catalog/_home_text.html.erb +40 -0
  35. data/app/views/catalog/_index_header_default.html.erb +59 -0
  36. data/app/views/catalog/_show_default.html.erb +68 -0
  37. data/app/views/catalog/_show_sidebar.html.erb +76 -0
  38. data/geoblacklight.gemspec +36 -0
  39. data/lib/generators/geoblacklight/install_generator.rb +46 -0
  40. data/lib/generators/geoblacklight/templates/catalog_controller.rb +217 -0
  41. data/lib/generators/geoblacklight/templates/geoblacklight.css.scss +79 -0
  42. data/lib/generators/geoblacklight/templates/geoblacklight.js +1 -0
  43. data/lib/geoblacklight.rb +5 -0
  44. data/lib/geoblacklight/config.rb +0 -0
  45. data/lib/geoblacklight/engine.rb +15 -0
  46. data/lib/geoblacklight/fixtures_indexer.rb +34 -0
  47. data/lib/geoblacklight/version.rb +3 -0
  48. data/lib/tasks/geoblacklight.rake +13 -0
  49. data/spec/fixtures/geoblacklight_schema/transformed.json +53 -0
  50. data/spec/spec_helper.rb +37 -0
  51. data/spec/test_app_templates/lib/generators/test_app_generator.rb +23 -0
  52. metadata +299 -0
@@ -0,0 +1,76 @@
1
+ <%-
2
+ # Compare with render_document_functions_partial helper, and
3
+ # _document_functions partial. BL actually has two groups
4
+ # of document-related tools. "document functions" by default
5
+ # contains Bookmark functionality shown on both results and
6
+ # item view. While "document tools" contains external export type
7
+ # functions by default only on detail.
8
+
9
+ -%>
10
+ <div id='geoblacklight-tools'>
11
+ <div class="panel panel-default show-tools">
12
+ <div class="panel-heading">
13
+ Tools
14
+ </div>
15
+ <div class="panel-body">
16
+ <ul class="list-group">
17
+ <%= render_show_doc_actions @document %>
18
+ <!-- <a href="#" data-no-turbolink class="list-group-item disabled">
19
+ <i class="fa fa-li fa-star-o"></i> Bookmark
20
+ </a> -->
21
+ <% if @document.respond_to?( :to_email_text ) %>
22
+ <%= link_to email_helper, email_catalog_path(:id => @document), {:id => 'emailLink', :data => {:ajax_modal => "trigger"}, :class => 'list-group-item'} %>
23
+ <%- end -%>
24
+ <%- if @document.respond_to?( :to_sms_text ) -%>
25
+ <%= link_to sms_helper, sms_catalog_path(:id => @document), {:id => 'smsLink', :data => {:ajax_modal => "trigger"}, :class => 'list-group-item'} %>
26
+ <%- end -%>
27
+ <a href="#" data-no-turbolink class="list-group-item">
28
+ <i class="fa fa-li fa-bookmark"></i>Cite This
29
+ </a>
30
+ </ul>
31
+ <ul class="list-group">
32
+ <a id="download-metadata" data-no-turbolink class="list-group-item"
33
+ <% if @document['dct_provenance_s'] == 'Stanford' %>
34
+ href="<%= @document['dc_identifier_s'] %>.mods"
35
+ <% else %>
36
+ href="#"
37
+ <% end %>
38
+ >
39
+ <i class="fa fa-li fa-download" id="icon-metadata"></i>Metadata
40
+ </a>
41
+ <% if @document['dc_rights_s'] == 'Restricted' and @document['dct_provenance_s'] != 'Stanford' %>
42
+ <a href="#" data-no-turbolink class="list-group-item">
43
+ <i class="fa fa-li fa-download" id="icon-request"></i>Request This
44
+ </a><br/>
45
+ <% else %>
46
+ <a href="#" id="download-kml" data-no-turbolink class="list-group-item">
47
+ <i class="fa fa-li fa-download" id="icon-kml"></i>KML
48
+ </a>
49
+ <% if @document['dc_format_s'] == 'Shapefile' %>
50
+ <a href="#" id="download-shapefile" data-no-turbolink class="list-group-item">
51
+ <i class="fa fa-li fa-download" id="icon-shapefile"></i>Shapefile
52
+ </a>
53
+ <% end %>
54
+ <% end %>
55
+
56
+ </ul>
57
+ <% unless @document['dc_rights_s'] == 'Restricted' and @document['dct_provenance_s'] != 'Stanford' %>
58
+
59
+ <ul class="list-group">
60
+ <a href="<%= @document['solr_wms_url'] %>?request=GetCapabilities" data-no-turbolink class="list-group-item">
61
+ <i class="fa fa-li fa-link"></i>WMS Link
62
+ </a>
63
+ <% if @document['layer_geom_type_s'] == 'Raster' %>
64
+ <a href="<%= @document['solr_wcs_url'] %>?request=GetCapabilities" data-no-turbolink class="list-group-item">
65
+ <i class="fa fa-li fa-link"></i>WCS Link
66
+ </a>
67
+ <% else %>
68
+ <a href="<%= @document['solr_wfs_url'] %>?request=GetCapabilities" data-no-turbolink class="list-group-item">
69
+ <i class="fa fa-li fa-link"></i>WFS Link
70
+ </a>
71
+ <% end %>
72
+ </ul>
73
+ <% end %>
74
+ </div>
75
+ </div>
76
+ </div>
@@ -0,0 +1,36 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'geoblacklight/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'geoblacklight'
8
+ spec.version = Geoblacklight::VERSION
9
+ spec.authors = ['Darren Hardy', 'Jack Reed']
10
+ spec.email = ['drh@stanford.edu', 'pjreed@stanford.edu']
11
+ spec.summary = 'A discovery platform for geospatial holdings'
12
+ spec.description = 'GeoBlacklight started at Stanford and its goal is to provide a world-class discovery platform for geospatial (GIS) holdings. It is an open collaborative project aiming to build off of the successes of the Blacklight Solr-powered discovery interface and the multi-institutional OpenGeoportal federated metadata sharing communities.'
13
+ spec.homepage = 'http://github.com/sul-dlss/geoblacklight'
14
+ spec.license = 'Apache 2.0'
15
+
16
+ spec.files = `git ls-files -z`.split(%Q{\x0})
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_dependency 'rails', '~> 4.0.0' # Rails 4.1.x has Spring on by default
22
+ spec.add_dependency 'blacklight', '~> 5.4.0'
23
+ spec.add_dependency 'bootstrap-sass', '~> 3.0'
24
+ spec.add_dependency 'leaflet-rails', '~> 0.7.3'
25
+ spec.add_dependency 'blacklight_range_limit', '~> 5.0.1'
26
+ spec.add_dependency 'font-awesome-rails', '~> 4.1.0.0'
27
+ spec.add_dependency 'httparty', '~> 0.13.1'
28
+
29
+ spec.add_development_dependency 'bundler', '~> 1.5'
30
+ spec.add_development_dependency 'rake', '~> 10.3.2'
31
+ spec.add_development_dependency 'rspec-rails', '~> 3.0.1'
32
+ spec.add_development_dependency 'jettywrapper', '~> 1.7.0'
33
+ spec.add_development_dependency 'engine_cart', '~> 0.3.4'
34
+ spec.add_development_dependency 'capybara', '~> 2.3.0'
35
+ spec.add_development_dependency 'poltergeist', '~> 1.5.0'
36
+ end
@@ -0,0 +1,46 @@
1
+ require 'rails/generators'
2
+
3
+ module Geoblacklight
4
+ class Install < Rails::Generators::Base
5
+
6
+ source_root File.expand_path('../templates', __FILE__)
7
+
8
+ desc "Install Geoblacklight"
9
+
10
+ def assets
11
+ copy_file "geoblacklight.css.scss", "app/assets/stylesheets/geoblacklight.css.scss"
12
+ copy_file "geoblacklight.js", "app/assets/javascripts/geoblacklight.js"
13
+ end
14
+
15
+ def create_blacklight_catalog
16
+ remove_file "app/controllers/catalog_controller.rb"
17
+ copy_file "catalog_controller.rb", "app/controllers/catalog_controller.rb"
18
+ end
19
+
20
+ def fixtures
21
+ FileUtils.mkdir_p "spec/fixtures/geoblacklight_schema"
22
+ copy_file "../../../../schema/examples/selected.json", "spec/fixtures/geoblacklight_schema/selected.json"
23
+ end
24
+
25
+ def add_unique_key
26
+ inject_into_file 'app/models/solr_document.rb', after: "# self.unique_key = 'id'" do
27
+ "\n self.unique_key = 'layer_slug_s'"
28
+ end
29
+ end
30
+
31
+ def inject_routes
32
+ # route 'devise_for :users'
33
+ # route 'constraints(:id => /[0-9A-Za-z\-\.\:\_\/]+/) do
34
+ # blacklight_for :catalog
35
+ # resources :bookmarks
36
+ # end'
37
+ # route 'get \'/catalog/facet/:id\' => \'catalog#facet\''
38
+ # route 'root :to => "catalog#index"'
39
+ route 'post "wms/handle"'
40
+ route 'post "download/kml"'
41
+ route 'post "download/shapefile"'
42
+ route 'get "download/file"'
43
+ end
44
+
45
+ end
46
+ end
@@ -0,0 +1,217 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'blacklight/catalog'
3
+
4
+ class CatalogController < ApplicationController
5
+
6
+ include Blacklight::Catalog
7
+
8
+ configure_blacklight do |config|
9
+ ## Default parameters to send to solr for all search-like requests. See also SolrHelper#solr_search_params
10
+ config.default_solr_params = {
11
+ :start => 0,
12
+ :rows => 10,
13
+ 'q.alt' => '*:*'
14
+ }
15
+
16
+ ## Default parameters to send on single-document requests to Solr. These settings are the Blackligt defaults (see SolrHelper#solr_doc_params) or
17
+ ## parameters included in the Blacklight-jetty document requestHandler.
18
+ #
19
+ config.default_document_solr_params = {
20
+ :qt => 'document',
21
+ :q => '{!raw f=layer_slug_s v=$id}'
22
+ }
23
+
24
+ # solr field configuration for search results/index views
25
+ # config.index.show_link = 'title_display'
26
+ # config.index.record_display_type = 'format'
27
+
28
+ config.index.title_field = 'dc_title_s'
29
+
30
+ # solr field configuration for document/show views
31
+
32
+ config.show.display_type_field = 'format'
33
+
34
+
35
+
36
+ # solr fields that will be treated as facets by the blacklight application
37
+ # The ordering of the field names is the order of the display
38
+ #
39
+ # Setting a limit will trigger Blacklight's 'more' facet values link.
40
+ # * If left unset, then all facet values returned by solr will be displayed.
41
+ # * If set to an integer, then "f.somefield.facet.limit" will be added to
42
+ # solr request, with actual solr request being +1 your configured limit --
43
+ # you configure the number of items you actually want _displayed_ in a page.
44
+ # * If set to 'true', then no additional parameters will be sent to solr,
45
+ # but any 'sniffed' request limit parameters will be used for paging, with
46
+ # paging at requested limit -1. Can sniff from facet.limit or
47
+ # f.specific_field.facet.limit solr request params. This 'true' config
48
+ # can be used if you set limits in :default_solr_params, or as defaults
49
+ # on the solr side in the request handler itself. Request handler defaults
50
+ # sniffing requires solr requests to be made with "echoParams=all", for
51
+ # app code to actually have it echo'd back to see it.
52
+ #
53
+ # :show may be set to false if you don't want the facet to be drawn in the
54
+ # facet bar
55
+ # config.add_facet_field 'format', :label => 'Format'
56
+ # config.add_facet_field 'pub_date', :label => 'Publication Year', :single => true
57
+ # config.add_facet_field 'subject_topic_facet', :label => 'Topic', :limit => 20
58
+ # config.add_facet_field 'language_facet', :label => 'Language', :limit => true
59
+ # config.add_facet_field 'lc_1letter_facet', :label => 'Call Number'
60
+ # config.add_facet_field 'subject_geo_facet', :label => 'Region'
61
+ # config.add_facet_field 'solr_bbox', :fq => "solr_bbox:IsWithin(-88,26,-79,36)", :label => 'Spatial'
62
+
63
+ # config.add_facet_field 'example_pivot_field', :label => 'Pivot Field', :pivot => ['format', 'language_facet']
64
+
65
+ # config.add_facet_field 'example_query_facet_field', :label => 'Publish Date', :query => {
66
+ # :years_5 => { :label => 'within 5 Years', :fq => "pub_date:[#{Time.now.year - 5 } TO *]" },
67
+ # :years_10 => { :label => 'within 10 Years', :fq => "pub_date:[#{Time.now.year - 10 } TO *]" },
68
+ # :years_25 => { :label => 'within 25 Years', :fq => "pub_date:[#{Time.now.year - 25 } TO *]" }
69
+ # }
70
+
71
+ config.add_facet_field 'dct_provenance_s', :label => 'Institution', :limit => 7
72
+ config.add_facet_field 'dc_creator_sm', :label => 'Author', :limit => 6
73
+ config.add_facet_field 'dc_publisher_s', :label => 'Publisher', :limit => 6
74
+ config.add_facet_field 'dc_subject_sm', :label => 'Subject', :limit => 6
75
+ config.add_facet_field 'dct_spatial_sm', :label => 'Place', :limit => 6
76
+ config.add_facet_field 'dct_isPartOf_sm', :label => 'Collection', :limit => 6
77
+
78
+ config.add_facet_field 'solr_year_i', :label => 'Year', :limit => 10, :range => {
79
+ # :num_segments => 6,
80
+ :assumed_boundaries => [1100, 2015]
81
+ # :segments => true
82
+ }
83
+
84
+ config.add_facet_field 'dc_rights_s', :label => 'Access', :limit => 3
85
+ config.add_facet_field 'layer_geom_type_s', :label => 'Data type', :limit => 5
86
+ config.add_facet_field 'dc_format_s', :label => 'Format', :limit => 3
87
+ config.add_facet_field 'dc_language_s', :label => 'Language', :limit => 3
88
+
89
+
90
+ # Have BL send all facet field names to Solr, which has been the default
91
+ # previously. Simply remove these lines if you'd rather use Solr request
92
+ # handler defaults, or have no facets.
93
+ config.add_facet_fields_to_solr_request!
94
+
95
+ # solr fields to be displayed in the index (search results) view
96
+ # The ordering of the field names is the order of the display
97
+ # config.add_index_field 'title_display', :label => 'Title:'
98
+ # config.add_index_field 'title_vern_display', :label => 'Title:'
99
+ # config.add_index_field 'author_display', :label => 'Author:'
100
+ # config.add_index_field 'author_vern_display', :label => 'Author:'
101
+ # config.add_index_field 'format', :label => 'Format:'
102
+ # config.add_index_field 'language_facet', :label => 'Language:'
103
+ # config.add_index_field 'published_display', :label => 'Published:'
104
+ # config.add_index_field 'published_vern_display', :label => 'Published:'
105
+ # config.add_index_field 'lc_callnum_display', :label => 'Call number:'
106
+
107
+ # config.add_index_field 'dc_title_t', :label => 'Display Name:'
108
+ # config.add_index_field 'dct_provenance_s', :label => 'Institution:'
109
+ # config.add_index_field 'dc_rights_s', :label => 'Access:'
110
+ # # config.add_index_field 'Area', :label => 'Area:'
111
+ # config.add_index_field 'dc_subject_sm', :label => 'Keywords:'
112
+
113
+
114
+
115
+ # solr fields to be displayed in the show (single result) view
116
+ # The ordering of the field names is the order of the display
117
+ # config.add_show_field 'dc_title_t', :label => 'Title:'
118
+ # config.add_show_field 'title_display', :label => 'Title:'
119
+ # config.add_show_field 'title_vern_display', :label => 'Title:'
120
+ # config.add_show_field 'subtitle_display', :label => 'Subtitle:'
121
+ # config.add_show_field 'subtitle_vern_display', :label => 'Subtitle:'
122
+ # config.add_show_field 'author_display', :label => 'Author:'
123
+ # config.add_show_field 'author_vern_display', :label => 'Author:'
124
+ # config.add_show_field 'format', :label => 'Format:'
125
+ # config.add_show_field 'url_fulltext_display', :label => 'URL:'
126
+ # config.add_show_field 'url_suppl_display', :label => 'More Information:'
127
+ # config.add_show_field 'language_facet', :label => 'Language:'
128
+ # config.add_show_field 'published_display', :label => 'Published:'
129
+ # config.add_show_field 'published_vern_display', :label => 'Published:'
130
+ # config.add_show_field 'lc_callnum_display', :label => 'Call number:'
131
+ # config.add_show_field 'isbn_t', :label => 'ISBN:'
132
+
133
+ # "fielded" search configuration. Used by pulldown among other places.
134
+ # For supported keys in hash, see rdoc for Blacklight::SearchFields
135
+ #
136
+ # Search fields will inherit the :qt solr request handler from
137
+ # config[:default_solr_parameters], OR can specify a different one
138
+ # with a :qt key/value. Below examples inherit, except for subject
139
+ # that specifies the same :qt as default for our own internal
140
+ # testing purposes.
141
+ #
142
+ # The :key is what will be used to identify this BL search field internally,
143
+ # as well as in URLs -- so changing it after deployment may break bookmarked
144
+ # urls. A display label will be automatically calculated from the :key,
145
+ # or can be specified manually to be different.
146
+
147
+ # This one uses all the defaults set by the solr request handler. Which
148
+ # solr request handler? The one set in config[:default_solr_parameters][:qt],
149
+ # since we aren't specifying it otherwise.
150
+
151
+ # config.add_search_field 'text', :label => 'All Fields'
152
+ # config.add_search_field 'dc_title_ti', :label => 'Title'
153
+ # config.add_search_field 'dc_description_ti', :label => 'Description'
154
+
155
+ # Now we see how to over-ride Solr request handler defaults, in this
156
+ # case for a BL "search field", which is really a dismax aggregate
157
+ # of Solr search fields.
158
+
159
+ # config.add_search_field('title') do |field|
160
+ # # solr_parameters hash are sent to Solr as ordinary url query params.
161
+ # field.solr_parameters = { :'spellcheck.dictionary' => 'title' }
162
+
163
+ # # :solr_local_parameters will be sent using Solr LocalParams
164
+ # # syntax, as eg {! qf=$title_qf }. This is neccesary to use
165
+ # # Solr parameter de-referencing like $title_qf.
166
+ # # See: http://wiki.apache.org/solr/LocalParams
167
+ # field.solr_local_parameters = {
168
+ # :qf => '$title_qf',
169
+ # :pf => '$title_pf'
170
+ # }
171
+ # end
172
+
173
+ # config.add_search_field('author') do |field|
174
+ # field.solr_parameters = { :'spellcheck.dictionary' => 'author' }
175
+ # field.solr_local_parameters = {
176
+ # :qf => '$author_qf',
177
+ # :pf => '$author_pf'
178
+ # }
179
+ # end
180
+
181
+ # # Specifying a :qt only to show it's possible, and so our internal automated
182
+ # # tests can test it. In this case it's the same as
183
+ # # config[:default_solr_parameters][:qt], so isn't actually neccesary.
184
+ # config.add_search_field('subject') do |field|
185
+ # field.solr_parameters = { :'spellcheck.dictionary' => 'subject' }
186
+ # field.qt = 'search'
187
+ # field.solr_local_parameters = {
188
+ # :qf => '$subject_qf',
189
+ # :pf => '$subject_pf'
190
+ # }
191
+ # end
192
+
193
+ # config.add_search_field('Institution') do |field|
194
+ # field.solr_parameters = { :'spellcheck.dictionary' => 'Institution' }
195
+ # field.solr_local_parameters = {
196
+ # :qf => '$Institution_qf',
197
+ # :pf => '$Institution_pf'
198
+ # }
199
+ # end
200
+
201
+ # "sort results by" select (pulldown)
202
+ # label in pulldown is followed by the name of the SOLR field to sort by and
203
+ # whether the sort is ascending or descending (it must be asc or desc
204
+ # except in the relevancy case).
205
+ config.add_sort_field 'score desc, dc_title_sort asc', :label => 'relevance'
206
+ config.add_sort_field 'solr_year_i desc, dc_title_sort asc', :label => 'year'
207
+ config.add_sort_field 'dc_publisher_sort asc, dc_title_sort asc', :label => 'publisher'
208
+ config.add_sort_field 'dc_title_sort asc', :label => 'title'
209
+
210
+ # If there are more than this many search results, no spelling ("did you
211
+ # mean") suggestion is offered.
212
+ config.spell_max = 5
213
+ end
214
+
215
+
216
+
217
+ end
@@ -0,0 +1,79 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the top of the
9
+ * compiled file, but it's generally better to create a new file per style scope.
10
+ *
11
+ *= require_self
12
+ *= require leaflet
13
+ *= require font-awesome
14
+ */
15
+
16
+ .docView{
17
+
18
+ }
19
+
20
+ .text-span{
21
+ width:100%;
22
+ }
23
+
24
+ .hide-overflow {
25
+ white-space: nowrap;
26
+ overflow: hidden;
27
+ text-overflow: ellipsis;
28
+ display:block
29
+ }
30
+
31
+ #map.mapview-map {
32
+ height: 440px;
33
+ cursor: crosshair;
34
+ }
35
+
36
+ #map.listview-map {
37
+ height: 485px;
38
+ }
39
+
40
+ #table-container{
41
+ overflow:scroll;
42
+ max-height: 450px;
43
+ }
44
+
45
+ #control {
46
+ text-align: center;
47
+ background: #FFF;
48
+ position: absolute;
49
+ left: 24px;
50
+ top: 120px;
51
+ height: 200px;
52
+ width: 28px;
53
+ border: 1px solid #BBB;
54
+ -webkit-border-radius: 3px;
55
+ border-radius: 3px;
56
+ z-index: 999;
57
+ }
58
+
59
+ #handle {
60
+ background: #000;
61
+ position: absolute;
62
+ left: -1px;
63
+ top: 20px;
64
+ width: 28px;
65
+ height: 10px;
66
+ }
67
+
68
+ #bottom {
69
+ position: absolute;
70
+ bottom:0px;
71
+ left: 8px;
72
+ text-align: center;
73
+ }
74
+
75
+ #handle:hover {
76
+ cursor: pointer;
77
+ background: #444;
78
+ cursor: ns-resize;
79
+ }