bootsy-rails3 2.0.5.1

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 (49) hide show
  1. checksums.yaml +15 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +155 -0
  4. data/Rakefile +38 -0
  5. data/app/assets/images/bootsy/gallery-loader.gif +0 -0
  6. data/app/assets/images/bootsy/upload-loader.gif +0 -0
  7. data/app/assets/javascripts/bootsy.js +8 -0
  8. data/app/assets/javascripts/bootsy/bootstrap-wysihtml5.js +530 -0
  9. data/app/assets/javascripts/bootsy/bootstrap.file-input.js +122 -0
  10. data/app/assets/javascripts/bootsy/bootsy.js +305 -0
  11. data/app/assets/javascripts/bootsy/editor_options.js +80 -0
  12. data/app/assets/javascripts/bootsy/init.js +31 -0
  13. data/app/assets/javascripts/bootsy/locales/bootstrap-wysihtml5.pt-BR.js +50 -0
  14. data/app/assets/javascripts/bootsy/locales/bootsy.pt-BR.js +9 -0
  15. data/app/assets/javascripts/bootsy/translations.js +8 -0
  16. data/app/assets/javascripts/bootsy/wysihtml5.js +9564 -0
  17. data/app/assets/stylesheets/bootsy.css +3 -0
  18. data/app/assets/stylesheets/bootsy/bootstrap-submenu.css +47 -0
  19. data/app/assets/stylesheets/bootsy/bootstrap-wysihtml5.css +102 -0
  20. data/app/assets/stylesheets/bootsy/bootsy.css +161 -0
  21. data/app/controllers/bootsy/application_controller.rb +7 -0
  22. data/app/controllers/bootsy/images_controller.rb +80 -0
  23. data/app/helpers/bootsy/application_helper.rb +11 -0
  24. data/app/uploaders/bootsy/image_uploader.rb +35 -0
  25. data/app/views/bootsy/images/_image.html.erb +43 -0
  26. data/app/views/bootsy/images/_modal.html.erb +28 -0
  27. data/app/views/bootsy/images/_new.html.erb +8 -0
  28. data/config/cucumber.yml +8 -0
  29. data/config/locales/en.yml +27 -0
  30. data/config/locales/pt-BR.yml +27 -0
  31. data/config/routes.rb +11 -0
  32. data/db/migrate/20120624171333_create_bootsy_images.rb +9 -0
  33. data/db/migrate/20120628124845_create_bootsy_image_galleries.rb +8 -0
  34. data/lib/bootsy-rails3.rb +66 -0
  35. data/lib/bootsy/activerecord/image.rb +11 -0
  36. data/lib/bootsy/activerecord/image_gallery.rb +8 -0
  37. data/lib/bootsy/container.rb +31 -0
  38. data/lib/bootsy/core_ext.rb +2 -0
  39. data/lib/bootsy/engine.rb +31 -0
  40. data/lib/bootsy/form_builder.rb +7 -0
  41. data/lib/bootsy/form_helper.rb +68 -0
  42. data/lib/bootsy/simple_form/bootsy_input.rb +11 -0
  43. data/lib/bootsy/version.rb +3 -0
  44. data/lib/generators/bootsy/USAGE +12 -0
  45. data/lib/generators/bootsy/install_generator.rb +50 -0
  46. data/lib/generators/bootsy/templates/bootsy.rb +64 -0
  47. data/lib/tasks/bootsy_tasks.rake +4 -0
  48. data/lib/tasks/cucumber.rake +65 -0
  49. metadata +137 -0
@@ -0,0 +1,43 @@
1
+ <div class="bootsy-image dropdown col-md-2" data-id="<%= image.id %>">
2
+ <%= link_to image_tag(image.image_file.thumb.url), '#', class: 'thumbnail',
3
+ data: { toggle: 'dropdown' } %>
4
+
5
+ <ul class="dropdown-menu" role="menu">
6
+ <li role="presentation" class="dropdown-header"><%= t 'bootsy.image.size' %></li>
7
+
8
+ <% Bootsy.image_versions_available.each do |size| %>
9
+ <li role="presentation" class="dropdown dropdown-submenu">
10
+ <%= link_to '#', tabindex: '-1', role: 'menuitem', data: { toggle: 'dropdown' } do %>
11
+ <i class="icon-picture"></i>
12
+
13
+ <%= t size, scope: 'bootsy.image' %>
14
+ <% end %>
15
+
16
+ <ul class="dropdown-menu" role="menu">
17
+ <% [:left, :right, :inline].each do |position| %>
18
+ <li role="presentation">
19
+ <%= link_to '#', class: 'insert', tabindex: '-1', role: 'menuitem',
20
+ data: { image_size: size.to_s, position: position.to_s} do %>
21
+ <%= t position, scope: 'bootsy.image.position' %>
22
+ <% end %>
23
+ </li>
24
+ <% end %>
25
+ </ul>
26
+ </li>
27
+ <% end %>
28
+
29
+ <% if Bootsy.allow_destroy %>
30
+ <li role="presentation" class="divider"></li>
31
+
32
+ <li role="presentation">
33
+ <%= link_to image, method: :delete, remote: true,
34
+ data: { confirm: t('bootsy.image.confirm.destroy'), type: 'json' },
35
+ tabindex: '-1', role: 'menuitem', class: 'destroy-btn' do %>
36
+ <i class="icon-trash"></i>
37
+
38
+ <%= t('bootsy.action.destroy') %>
39
+ <% end %>
40
+ </li>
41
+ <% end %>
42
+ </ul>
43
+ </div>
@@ -0,0 +1,28 @@
1
+ <div class="modal fade bootsy-modal" tabindex="-1"
2
+ role="dialog" aria-hidden="true" data-no-turbolink
3
+ data-gallery-id="<%= container.bootsy_image_gallery_id %>">
4
+ <div class="modal-dialog">
5
+ <div class="modal-content">
6
+ <div class="modal-header">
7
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
8
+
9
+ <h3 class="modal-title"><%= t 'bootsy.image.p' %></h3>
10
+ </div>
11
+
12
+ <div class="modal-body">
13
+ <div class="alert alert-info bootsy-empty-alert">
14
+ <%= t 'bootsy.no_images_uploaded' %>
15
+ </div>
16
+
17
+ <div class="row bootsy-gallery"></div>
18
+
19
+ <%= image_tag 'bootsy/gallery-loader.gif', class: 'bootsy-gallery-loader' %>
20
+
21
+ <%= refresh_btn %>
22
+ </div>
23
+
24
+ <div class="modal-footer">
25
+ </div>
26
+ </div>
27
+ </div>
28
+ </div>
@@ -0,0 +1,8 @@
1
+ <%= form_for([bootsy, resource_or_nil(gallery), image], remote: true,
2
+ html: { multipart: true, class: 'bootsy-upload-form form-inline' }, data: { type: 'json' }) do |f| %>
3
+ <%= hidden_field_tag :authenticity_token, form_authenticity_token %>
4
+
5
+ <%= image_tag 'bootsy/upload-loader.gif', class: 'bootsy-upload-loader' %>
6
+
7
+ <%= f.file_field :image_file, title: t('bootsy.action.upload') %>
8
+ <% end %>
@@ -0,0 +1,8 @@
1
+ <%
2
+ rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : ""
3
+ rerun_opts = rerun.to_s.strip.empty? ? "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}"
4
+ std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} --strict --tags ~@wip"
5
+ %>
6
+ default: <%= std_opts %> features
7
+ wip: --tags @wip:3 --wip features
8
+ rerun: <%= rerun_opts %> --format rerun --out rerun.txt --strict --tags ~@wip
@@ -0,0 +1,27 @@
1
+ en:
2
+ bootsy:
3
+ action:
4
+ refresh: Refresh
5
+ destroy: Delete
6
+ close: Close
7
+ load: Load
8
+ upload: Upload New Image
9
+ image_gallery: Image Gallery
10
+ image:
11
+ s: Image
12
+ p: Images
13
+ size: Size
14
+ large: Large
15
+ medium: Medium
16
+ small: Small
17
+ original: Original
18
+ new: New image
19
+ confirm:
20
+ destroy: Are you sure you want to delete this image?
21
+ position:
22
+ left: Left
23
+ right: Right
24
+ inline: Inline
25
+ no_images_uploaded: There are currently no uploaded images.
26
+ js:
27
+ alert_unsaved: You have unsaved changes.
@@ -0,0 +1,27 @@
1
+ pt-BR:
2
+ bootsy:
3
+ action:
4
+ refresh: Atualizar
5
+ destroy: Apagar
6
+ close: Fechar
7
+ load: Carregar
8
+ upload: Nova imagem
9
+ image_gallery: Galeria de Imagens
10
+ image:
11
+ s: Imagem
12
+ p: Imagens
13
+ size: Tamanho
14
+ large: Grande
15
+ medium: Médio
16
+ small: Pequeno
17
+ original: Original
18
+ new: Nova imagem
19
+ confirm:
20
+ destroy: Tem certeza que deseja apagar esta imagem?
21
+ position:
22
+ left: Esquerda
23
+ right: Direita
24
+ inline: Mesma linha
25
+ no_images_uploaded: Não existem imagens salvas.
26
+ js:
27
+ alert_unsaved: As suas modificações ainda não foram gravadas.
@@ -0,0 +1,11 @@
1
+ Bootsy::Engine.routes.draw do
2
+ resources :image_galleries, only: [] do
3
+ resources :images, only: [:index, :create, :update, :destroy]
4
+ end
5
+
6
+ file_routes = [:index, :create, :update]
7
+
8
+ file_routes << :destroy if Bootsy.allow_destroy
9
+
10
+ resources :images, only: file_routes
11
+ end
@@ -0,0 +1,9 @@
1
+ class CreateBootsyImages < ActiveRecord::Migration
2
+ def change
3
+ create_table :bootsy_images do |t|
4
+ t.string :image_file
5
+ t.references :image_gallery
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ class CreateBootsyImageGalleries < ActiveRecord::Migration
2
+ def change
3
+ create_table :bootsy_image_galleries do |t|
4
+ t.references :bootsy_resource, polymorphic: true
5
+ t.timestamps
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,66 @@
1
+ require 'carrierwave'
2
+ require 'remotipart'
3
+ require 'bootsy/engine'
4
+ require 'bootsy/container'
5
+ require 'bootsy/form_helper'
6
+ require 'bootsy/form_builder'
7
+ require 'bootsy/core_ext'
8
+
9
+ autoload :BootsyInput, 'bootsy/simple_form/bootsy_input'
10
+
11
+ module Bootsy
12
+ ## CONFIGURATION OPTIONS
13
+
14
+ # Default editor options
15
+ mattr_accessor :editor_options
16
+ @@editor_options = {
17
+ font_styles: true,
18
+ emphasis: true,
19
+ lists: true,
20
+ html: false,
21
+ link: true,
22
+ image: true,
23
+ color: true
24
+ }
25
+
26
+ # Image versions available
27
+ mattr_accessor :image_versions_available
28
+ @@image_versions_available = [:small, :medium, :large, :original]
29
+
30
+ # Whether user can destroy uploaded files
31
+ mattr_accessor :allow_destroy
32
+ @@allow_destroy = true
33
+
34
+ # Settings for small images
35
+ mattr_accessor :small_image
36
+ @@small_image = {width: 160, height: 160}
37
+
38
+ # Settings for medium images
39
+ mattr_accessor :medium_image
40
+ @@medium_image = {width: 360, height: 360}
41
+
42
+ # Settings for large images
43
+ mattr_accessor :large_image
44
+ @@large_image = {width: 760, height: 760}
45
+
46
+ # Settings for the original version of images
47
+ mattr_accessor :original_image
48
+ @@original_image = {}
49
+
50
+ # Storage mode
51
+ mattr_accessor :storage
52
+ @@storage = :file
53
+
54
+ # Store directory (inside 'public')
55
+ mattr_accessor :store_dir
56
+ @@store_dir = 'uploads'
57
+
58
+
59
+ ## SETUP
60
+
61
+ # Default way to setup Bootsy. Run rails generate bootsy:install
62
+ # to create a fresh initializer with all configuration values.
63
+ def self.setup
64
+ yield self
65
+ end
66
+ end
@@ -0,0 +1,11 @@
1
+ module Bootsy
2
+ class Image < ActiveRecord::Base
3
+ attr_accessible :image_file
4
+
5
+ belongs_to :image_gallery, touch: true
6
+
7
+ mount_uploader :image_file, ImageUploader
8
+
9
+ validates_presence_of :image_file, :image_gallery_id
10
+ end
11
+ end
@@ -0,0 +1,8 @@
1
+ module Bootsy
2
+ class ImageGallery < ActiveRecord::Base
3
+ belongs_to :bootsy_resource, polymorphic: true
4
+ has_many :images, dependent: :destroy
5
+
6
+ scope :destroy_orphans, ->(time_limit) { where('created_at < ? AND bootsy_resource_id IS NULL', time_limit).destroy_all }
7
+ end
8
+ end
@@ -0,0 +1,31 @@
1
+ require 'active_support/concern'
2
+
3
+ module Bootsy
4
+ module Container
5
+
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ class_eval do
10
+ has_one :bootsy_image_gallery, class_name: 'Bootsy::ImageGallery', as: :bootsy_resource, dependent: :destroy
11
+
12
+ def bootsy_image_gallery_id
13
+ if self.bootsy_image_gallery.nil?
14
+ nil
15
+ else
16
+ self.bootsy_image_gallery.id
17
+ end
18
+ end
19
+
20
+ def bootsy_image_gallery_id=(value)
21
+ if self.bootsy_image_gallery.nil? && !value.blank?
22
+ ig = Bootsy::ImageGallery.find(value)
23
+ self.bootsy_image_gallery = ig
24
+ ig.bootsy_resource = self
25
+ ig.save
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,2 @@
1
+ ActionView::Base.send :include, Bootsy::FormHelper
2
+ ActionView::Helpers::FormBuilder.send :include, Bootsy::FormBuilder
@@ -0,0 +1,31 @@
1
+ module Bootsy
2
+ class Engine < Rails::Engine
3
+
4
+ isolate_namespace Bootsy
5
+
6
+ config.generators do |g|
7
+ g.test_framework :rspec
8
+ g.integration_tool :rspec
9
+ end
10
+
11
+ config.to_prepare do
12
+ ActionController::Base.class_eval do
13
+ helper Bootsy::ApplicationHelper
14
+ end
15
+ end
16
+
17
+ config.after_initialize do
18
+ if defined?(BOOTSY_ORM)
19
+ orm = BOOTSY_ORM
20
+ else
21
+ orm = :activerecord
22
+ end
23
+
24
+
25
+ case orm
26
+ when :activerecord
27
+ Dir[File.expand_path('../activerecord/*.rb', __FILE__)].each {|f| require f }
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,7 @@
1
+ module Bootsy
2
+ module FormBuilder
3
+ def bootsy_area method, options = {}
4
+ @template.bootsy_area @object_name, method, objectify_options(options)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,68 @@
1
+ module Bootsy
2
+ module FormHelper
3
+ def bootsy_area(object_name, method, options = {})
4
+ container = options[:container] || options[:object]
5
+
6
+ output = self.text_area(object_name, method, text_area_options(options))
7
+
8
+ if output.present? && enable_uploader?(options)
9
+ container.bootsy_image_gallery_id ||= Bootsy::ImageGallery.create!.id
10
+
11
+ output += self.render('bootsy/images/modal', container: container)
12
+
13
+ if container.new_record?
14
+ output += self.hidden_field(object_name, :bootsy_image_gallery_id, class: 'bootsy_image_gallery_id')
15
+ end
16
+ end
17
+
18
+ output
19
+ end
20
+
21
+ private
22
+
23
+ def enable_uploader?(options)
24
+ if options[:uploader] == false
25
+ false
26
+ elsif options[:container].is_a?(Container)
27
+ true
28
+ elsif options[:container].blank? && options[:object].is_a?(Container)
29
+ true
30
+ else
31
+ false
32
+ end
33
+ end
34
+
35
+ def tag_class(options)
36
+ classes = if options[:class].blank?
37
+ []
38
+ elsif options[:class].kind_of?(Array)
39
+ options[:class]
40
+ else
41
+ [options[:class]]
42
+ end
43
+
44
+ classes << 'bootsy_text_area'
45
+ end
46
+
47
+ def data_options(options)
48
+ (options[:data] || {}).merge Hash[ bootsy_options(options).map { |k,v| ["bootsy-#{k}", v] } ]
49
+ end
50
+
51
+ def bootsy_options(options)
52
+ Bootsy.editor_options.
53
+ merge(options[:editor_options] || {}).
54
+ merge(uploader: enable_uploader?(options))
55
+ end
56
+
57
+ def text_area_options(options)
58
+ options.except(
59
+ :container,
60
+ :uploader,
61
+ :editor_options
62
+ ).merge(
63
+ data: data_options(options),
64
+ class: tag_class(options)
65
+ )
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,11 @@
1
+ require 'simple_form'
2
+
3
+ class BootsyInput < SimpleForm::Inputs::Base
4
+ enable :placeholder, :maxlength, :container, :editor_options, :uploader
5
+
6
+ def input
7
+ bootsy_params = [:editor_options, :container, :uploader]
8
+ input_html_options.merge! input_options.select {|k,v| bootsy_params.include? k }
9
+ @builder.bootsy_area attribute_name, input_html_options
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ module Bootsy
2
+ VERSION = '2.0.5.1'
3
+ end
@@ -0,0 +1,12 @@
1
+ Description:
2
+ Adds Bootsy routes, locale and assets to your application.
3
+
4
+ Example:
5
+ rails generate bootsy:install
6
+
7
+ This will create:
8
+ route mount Bootsy::Engine => '/bootsy', as: 'bootsy'
9
+ create config/locales/bootsy.en.yml
10
+ insert app/assets/javascripts/application.js
11
+ insert app/assets/stylesheets/application.css
12
+