refinerycms-location_explorer 1.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.
Files changed (38) hide show
  1. data/app/assets/javascripts/refinery/location_explorer/locations_map.coffee +43 -0
  2. data/app/assets/javascripts/refinery/location_explorer/map_picker.coffee +28 -0
  3. data/app/assets/javascripts/refinery/location_explorer/vendor/gmaps.js +1091 -0
  4. data/app/assets/stylesheets/refinery/location_explorer.css.scss +70 -0
  5. data/app/assets/stylesheets/refinery/location_explorer/map_picker.css.scss +26 -0
  6. data/app/controllers/refinery/location_explorer/admin/locations_controller.rb +12 -0
  7. data/app/controllers/refinery/location_explorer/locations_controller.rb +44 -0
  8. data/app/models/refinery/location_explorer/location.rb +41 -0
  9. data/app/models/refinery/location_explorer/owner_decorator.rb +46 -0
  10. data/app/views/refinery/location_explorer/admin/locations/_actions.html.erb +25 -0
  11. data/app/views/refinery/location_explorer/admin/locations/_form.html.erb +27 -0
  12. data/app/views/refinery/location_explorer/admin/locations/_location.html.erb +20 -0
  13. data/app/views/refinery/location_explorer/admin/locations/_locations.html.erb +2 -0
  14. data/app/views/refinery/location_explorer/admin/locations/_map.html.erb +29 -0
  15. data/app/views/refinery/location_explorer/admin/locations/_records.html.erb +18 -0
  16. data/app/views/refinery/location_explorer/admin/locations/_sortable_list.html.erb +5 -0
  17. data/app/views/refinery/location_explorer/admin/locations/edit.html.erb +1 -0
  18. data/app/views/refinery/location_explorer/admin/locations/index.html.erb +7 -0
  19. data/app/views/refinery/location_explorer/admin/locations/new.html.erb +1 -0
  20. data/app/views/refinery/location_explorer/locations/index.html.haml +30 -0
  21. data/app/views/refinery/location_explorer/locations/show.html.haml +16 -0
  22. data/config/locales/en.yml +30 -0
  23. data/config/locales/es.yml +31 -0
  24. data/config/locales/fr.yml +30 -0
  25. data/config/locales/nb.yml +30 -0
  26. data/config/locales/nl.yml +30 -0
  27. data/config/routes.rb +17 -0
  28. data/db/migrate/1_create_location_explorer_locations.rb +33 -0
  29. data/db/seeds.rb +25 -0
  30. data/lib/generators/refinery/location_explorer_generator.rb +23 -0
  31. data/lib/generators/refinery/templates/config/initializers/refinery/location_explorer.rb.erb +4 -0
  32. data/lib/refinery/location_explorer.rb +22 -0
  33. data/lib/refinery/location_explorer/configuration.rb +9 -0
  34. data/lib/refinery/location_explorer/engine.rb +27 -0
  35. data/lib/refinerycms-location_explorer.rb +3 -0
  36. data/lib/tasks/refinery/locations.rake +13 -0
  37. data/readme.md +51 -0
  38. metadata +148 -0
@@ -0,0 +1,70 @@
1
+ .refinerycms-locations {
2
+ #locations {
3
+ #locations_index_map {
4
+ border: 2px solid black;
5
+ height: 500px;
6
+ $radius: 10px;
7
+ -webkit-border-radius: $radius;
8
+ -moz-border-radius: $radius;
9
+ border-radius: $radius;
10
+ }
11
+ }
12
+
13
+ .map_sidebar {
14
+ position: relative;
15
+
16
+ .arrow {
17
+ border: 15px solid transparent;
18
+ border-right: 15px solid black;
19
+ width: 0px;
20
+ position: absolute;
21
+ top: 10px;
22
+ left: -30px;
23
+ }
24
+ }
25
+
26
+ .location_preview {
27
+ border: 2px solid #000000;
28
+ background-color: #1c1714;
29
+ color: #CCC;
30
+
31
+ h2.location_name {
32
+ color: #FFFFFF !important;
33
+ margin: 0;
34
+ background-color: black;
35
+ padding: 10px;
36
+ }
37
+
38
+ .location_content {
39
+ padding: 10px;
40
+
41
+ a {
42
+ color: #FFF;
43
+ }
44
+
45
+ .description_preview {
46
+ margin-bottom: 1em;
47
+ }
48
+
49
+ img.location_image {
50
+ border: 1px solid black !important;
51
+ }
52
+ }
53
+
54
+ }
55
+
56
+ #location_show {
57
+ #submenu {
58
+ display: none;
59
+ }
60
+ h1#body_content_title {
61
+ height: 26px;
62
+ line-height: 26px;
63
+ margin-bottom: 20px;
64
+ }
65
+ #submenu_container {
66
+ margin-top: 46px;
67
+ }
68
+ }
69
+ }
70
+
@@ -0,0 +1,26 @@
1
+ #map-picker {
2
+ height: 400px;
3
+ width: 600px;
4
+ border: 1px solid #666;
5
+ margin: 0 10px 5px 0;
6
+ float: left;
7
+ }
8
+
9
+ .formtastic {
10
+ .page_part aside {
11
+ width: 335px;
12
+ margin-left: 610px;
13
+
14
+ fieldset {
15
+ width: 335px;
16
+
17
+ ol {
18
+ width: 335px;
19
+
20
+ input {
21
+ width: 98%;
22
+ }
23
+ }
24
+ }
25
+ }
26
+ }
@@ -0,0 +1,12 @@
1
+ module Refinery
2
+ module LocationExplorer
3
+ module Admin
4
+ class LocationsController < ::Refinery::AdminController
5
+
6
+ crudify :'refinery/location_explorer/location',
7
+ :title_attribute => 'name', :xhr_paging => true
8
+
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,44 @@
1
+ module Refinery
2
+ module LocationExplorer
3
+ class LocationsController < ::ApplicationController
4
+
5
+ before_filter :find_all_locations
6
+ before_filter :find_page
7
+
8
+ def index
9
+ # you can use meta fields from your model instead (e.g. browser_title)
10
+ # by swapping @page for @location in the line below:
11
+ present(@page)
12
+ end
13
+
14
+ def show
15
+ @location = decorate_location(Location.find(params[:id]))
16
+
17
+ # you can use meta fields from your model instead (e.g. browser_title)
18
+ # by swapping @page for @location in the line below:
19
+ present(@page)
20
+ end
21
+
22
+ protected
23
+
24
+ def decorate_location(location)
25
+ location.owner ? OwnerDecorator.new(location) : location
26
+ end
27
+
28
+ def decorate_locations(locations)
29
+ locations.map do |location|
30
+ decorate_location(location)
31
+ end
32
+ end
33
+
34
+ def find_all_locations
35
+ @locations = decorate_locations(Location.order('position ASC'))
36
+ end
37
+
38
+ def find_page
39
+ @page = ::Refinery::Page.where(:link_url => "/location_explorer").first
40
+ end
41
+
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,41 @@
1
+ module Refinery
2
+ module LocationExplorer
3
+ class Location < Refinery::Core::BaseModel
4
+ self.table_name = 'refinery_locations'
5
+
6
+ attr_accessible :name, :description, :latitude, :longitude, :position, :owner, :colour_override
7
+
8
+ acts_as_indexed :fields => [:name, :description]
9
+
10
+ belongs_to :owner, :polymorphic => true
11
+ has_many_page_images
12
+
13
+ delegate :colour, :name, :description, :to => :owner, :allow_nil => true, :prefix => :owner
14
+
15
+ def description_preview
16
+ if description
17
+ matches = description.match(/<p>(.*)<\/p>/)
18
+ text = matches ? matches[1] : description
19
+ text.truncate(200)
20
+ end
21
+ end
22
+
23
+ def latlng
24
+ [latitude, longitude] if latitude && longitude
25
+ end
26
+
27
+ def preview_image_url
28
+ image = images.first
29
+ image.thumbnail("253x160#c").url if image
30
+ end
31
+
32
+ def colour
33
+ colour_override
34
+ end
35
+
36
+ def detail_url
37
+ "/locations/#{to_param}"
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,46 @@
1
+ module Refinery
2
+ module LocationExplorer
3
+ class OwnerDecorator
4
+ def self.use_owner_attribute(*keys)
5
+ keys.each do |key|
6
+ define_method(key) do
7
+ owner.send(key) || @subject.send(key)
8
+ end
9
+ end
10
+ end
11
+
12
+ use_owner_attribute :name, :description, :preview_image_url, :colour, :description_preview
13
+
14
+ def initialize(subject)
15
+ @subject = subject
16
+ end
17
+
18
+ def method_missing(sym, *args, &block)
19
+ @subject.send sym, *args, &block
20
+ end
21
+
22
+ def as_json(options = {})
23
+ results = {}
24
+ methods = [:latitude, :longitude, :name] + (options[:methods] || [])
25
+ methods.each do |method|
26
+ results[method.to_s] = send(method)
27
+ end
28
+ results.as_json
29
+ end
30
+
31
+ def detail_url
32
+ "/#{owner_resource_name}/#{owner.to_param}"
33
+ end
34
+
35
+ private
36
+
37
+ def owner_resource_name
38
+ owner.class.model_name.split('::').last.underscore.pluralize
39
+ end
40
+
41
+ def owner
42
+ @subject.owner
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,25 @@
1
+ <ul>
2
+ <% if ::Refinery::LocationExplorer::Admin::LocationsController.searchable? %>
3
+ <li>
4
+ <%= render '/refinery/admin/search', :url => refinery.location_explorer_admin_locations_path %>
5
+ </li>
6
+ <% end %>
7
+ <li>
8
+ <%= link_to t('.create_new'), refinery.new_location_explorer_admin_location_path,
9
+ :class => "add_icon" %>
10
+ </li>
11
+ <% if !searching? && ::Refinery::LocationExplorer::Admin::LocationsController.sortable? && ::Refinery::LocationExplorer::Location.any? %>
12
+ <li>
13
+ <%= link_to t('.reorder', :what => "Locations"),
14
+ refinery.location_explorer_admin_locations_path,
15
+ :id => "reorder_action",
16
+ :class => "reorder_icon" %>
17
+
18
+ <%= link_to t('.reorder_done', :what => "Locations"),
19
+ refinery.location_explorer_admin_locations_path,
20
+ :id => "reorder_action_done",
21
+ :style => "display: none;",
22
+ :class => "reorder_icon" %>
23
+ </li>
24
+ <% end %>
25
+ </ul>
@@ -0,0 +1,27 @@
1
+ <%= semantic_form_for [refinery, :location_explorer_admin, @location] do |f| -%>
2
+ <%= render '/refinery/admin/error_messages',
3
+ :object => @location,
4
+ :include_object_name => true %>
5
+
6
+ <%= f.inputs do %>
7
+ <%= f.input :name, :input_html => {:class => 'larger widest'} %>
8
+ <% end %>
9
+
10
+ <%= tabbed_fieldsets f, [
11
+ Refinery::Pages::Tab.new(:name => 'map', :partial => '/refinery/location_explorer/admin/locations/map'),
12
+ :description,
13
+ Refinery::Pages::Tab.new(:name => 'images', :partial => '/refinery/admin/pages/tabs/images')
14
+ ] %>
15
+
16
+ <%= render '/refinery/admin/form_actions', :f => f,
17
+ :continue_editing => false,
18
+ :delete_title => t('delete', :scope => 'refinery.locations.admin.locations.location'),
19
+ :delete_confirmation => t('message', :scope => 'refinery.admin.delete', :title => @location.name) %>
20
+ <% end -%>
21
+ <% content_for :javascripts do %>
22
+ <script>
23
+ $(document).ready(function(){
24
+ page_options.init(false, '', '');
25
+ });
26
+ </script>
27
+ <% end %>
@@ -0,0 +1,20 @@
1
+ <li class='clearfix record <%= cycle("on", "on-hover") %>' id="<%= dom_id(location) -%>">
2
+ <span class='title'>
3
+ <%= location.name %>
4
+
5
+ </span>
6
+ <span class='actions'>
7
+
8
+ <%= link_to refinery_icon_tag("application_go.png"), refinery.location_explorer_location_path(location),
9
+ :title => t('.view_live_html'),
10
+ :target => "_blank" %>
11
+
12
+ <%= link_to refinery_icon_tag("application_edit.png"), refinery.edit_location_explorer_admin_location_path(location),
13
+ :title => t('.edit') %>
14
+ <%= link_to refinery_icon_tag("delete.png"), refinery.location_explorer_admin_location_path(location),
15
+ :class => "cancel confirm-delete",
16
+ :title => t('.delete'),
17
+ :confirm => t('message', :scope => 'refinery.admin.delete', :title => location.name),
18
+ :method => :delete %>
19
+ </span>
20
+ </li>
@@ -0,0 +1,2 @@
1
+ <%= will_paginate @locations if Refinery::LocationExplorer::Admin::LocationsController.pageable? %>
2
+ <%= render 'sortable_list' %>
@@ -0,0 +1,29 @@
1
+ <div class="wym_skin_refinery page_part">
2
+ <div class="wym_box field">
3
+ <div id="map-picker">
4
+ </div>
5
+
6
+ <aside>
7
+ <%= f.inputs do %>
8
+ <%= f.input :latitude, :input_html => {:id => 'location_latitude'} %>
9
+ <%= f.input :longitude, :input_html => {:id => 'location_longitude'} %>
10
+ <% end %>
11
+ </aside>
12
+ </div>
13
+ </div>
14
+
15
+ <% content_for :stylesheets, stylesheet_link_tag('refinery/location_explorer/map_picker.css') %>
16
+ <% content_for :javascripts do %>
17
+ <%= javascript_include_tag('http://maps.google.com/maps/api/js?sensor=true') %>
18
+ <%= javascript_include_tag('refinery/location_explorer/vendor/gmaps.js') %>
19
+ <%= javascript_include_tag('refinery/location_explorer/map_picker') %>
20
+
21
+ <script type="text/javascript">
22
+ $(document).ready(function(){
23
+ var map_picker = new Application.MapPicker(
24
+ '#map-picker',
25
+ <%= Refinery::LocationExplorer.config.map_center.to_json.html_safe %>,
26
+ <%= f.object.latlng.to_json.html_safe %>);
27
+ });
28
+ </script>
29
+ <% end %>
@@ -0,0 +1,18 @@
1
+ <% if searching? %>
2
+ <h2><%= t('results_for', :scope => 'refinery.admin.search', :query => params[:search]) %></h2>
3
+ <% end %>
4
+ <div class='pagination_container'>
5
+ <% if @locations.any? %>
6
+ <%= render 'locations' %>
7
+ <% else %>
8
+ <p>
9
+ <% unless searching? %>
10
+ <strong>
11
+ <%= t('.no_items_yet') %>
12
+ </strong>
13
+ <% else %>
14
+ <%= t('no_results', :scope => 'refinery.admin.search') %>
15
+ <% end %>
16
+ </p>
17
+ <% end %>
18
+ </div>
@@ -0,0 +1,5 @@
1
+ <ul id='sortable_list'>
2
+ <%= render :partial => 'location', :collection => @locations %>
3
+ </ul>
4
+ <%= render '/refinery/admin/sortable_list',
5
+ :continue_reordering => (local_assigns.keys.include?(:continue_reordering)) ? continue_reordering : true %>
@@ -0,0 +1,7 @@
1
+ <section id='records'>
2
+ <%= render 'records' %>
3
+ </section>
4
+ <aside id='actions'>
5
+ <%= render 'actions' %>
6
+ </aside>
7
+ <%= render '/refinery/admin/make_sortable', :tree => false if !searching? and ::Refinery::LocationExplorer::Admin::LocationsController.sortable? and ::Refinery::LocationExplorer::Location.count > 1 %>
@@ -0,0 +1,30 @@
1
+ - content_for :body_content_left do
2
+ %article#locations
3
+ #locations_index_map
4
+
5
+ - content_for :body_content_right do
6
+ - location = @locations.first
7
+ - if location
8
+ #location_preview.map_sidebar{:style => "display: none"}
9
+ .arrow
10
+ .location_preview
11
+ %h2.location_name
12
+ .location_content
13
+ .description_preview
14
+ .image_container
15
+ = link_to "more details", '#', :class => 'more_details'
16
+
17
+ - content_for :javascripts do
18
+ = javascript_include_tag('http://maps.google.com/maps/api/js?sensor=true')
19
+ = javascript_include_tag('refinery/location_explorer/vendor/gmaps.js')
20
+ = javascript_include_tag('refinery/location_explorer/locations_map')
21
+ :javascript
22
+ $(document).ready(function(){
23
+ var locations_map = new Application.LocationsMap('#locations_index_map', #{Refinery::LocationExplorer.config.map_center});
24
+ locations_map.addLocations(#{@locations.to_json(:methods => [:description_preview, :preview_image_url, :colour, :detail_url]).html_safe});
25
+ });
26
+
27
+ .refinerycms-locations
28
+ = render '/refinery/content_page'
29
+
30
+
@@ -0,0 +1,16 @@
1
+ - content_for :body_content_title do
2
+ = @location.name
3
+
4
+ - content_for :body do
5
+ %article.location
6
+ = render 'refinery/jquery_gallery/gallery', :page => @location
7
+
8
+ %section.description
9
+ - if @location.description.present?
10
+ %h3 Description
11
+ =raw @location.description
12
+
13
+
14
+ .refinerycms-locations
15
+ #location_show
16
+ = render '/refinery/content_page'