bootsy_full_html 2.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +159 -0
  4. data/Rakefile +35 -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 +11 -0
  8. data/app/assets/javascripts/bootsy/area.js +89 -0
  9. data/app/assets/javascripts/bootsy/editor_options.js +47 -0
  10. data/app/assets/javascripts/bootsy/image_template.js +11 -0
  11. data/app/assets/javascripts/bootsy/init.js +38 -0
  12. data/app/assets/javascripts/bootsy/locales/en.js +54 -0
  13. data/app/assets/javascripts/bootsy/locales/pt-BR.js +54 -0
  14. data/app/assets/javascripts/bootsy/modal.js +192 -0
  15. data/app/assets/javascripts/bootsy/vendor/bootstrap-wysihtml5.js +530 -0
  16. data/app/assets/javascripts/bootsy/vendor/bootstrap.file-input.js +122 -0
  17. data/app/assets/javascripts/bootsy/vendor/polyfill.js +29 -0
  18. data/app/assets/javascripts/bootsy/vendor/wysihtml5.js +9565 -0
  19. data/app/assets/stylesheets/bootsy.css +337 -0
  20. data/app/controllers/bootsy/application_controller.rb +7 -0
  21. data/app/controllers/bootsy/images_controller.rb +96 -0
  22. data/app/helpers/bootsy/application_helper.rb +13 -0
  23. data/app/uploaders/bootsy/image_uploader.rb +39 -0
  24. data/app/views/bootsy/images/_image.html.erb +43 -0
  25. data/app/views/bootsy/images/_modal.html.erb +29 -0
  26. data/app/views/bootsy/images/_new.html.erb +17 -0
  27. data/config/locales/bootsy.en.yml +30 -0
  28. data/config/locales/bootsy.pt-BR.yml +30 -0
  29. data/config/routes.rb +11 -0
  30. data/db/migrate/20120624171333_create_bootsy_images.rb +9 -0
  31. data/db/migrate/20120628124845_create_bootsy_image_galleries.rb +8 -0
  32. data/lib/bootsy.rb +68 -0
  33. data/lib/bootsy/activerecord/image.rb +12 -0
  34. data/lib/bootsy/activerecord/image_gallery.rb +23 -0
  35. data/lib/bootsy/container.rb +52 -0
  36. data/lib/bootsy/core_ext.rb +4 -0
  37. data/lib/bootsy/engine.rb +34 -0
  38. data/lib/bootsy/form_builder.rb +18 -0
  39. data/lib/bootsy/form_helper.rb +114 -0
  40. data/lib/bootsy/simple_form/bootsy_input.rb +24 -0
  41. data/lib/bootsy/version.rb +4 -0
  42. data/lib/generators/bootsy/USAGE +12 -0
  43. data/lib/generators/bootsy/install_generator.rb +53 -0
  44. data/lib/generators/bootsy/templates/bootsy.rb +69 -0
  45. data/lib/tasks/bootsy_tasks.rake +4 -0
  46. metadata +130 -0
@@ -0,0 +1,39 @@
1
+ module Bootsy
2
+ class ImageUploader < CarrierWave::Uploader::Base
3
+ include CarrierWave::MiniMagick
4
+
5
+ storage Bootsy.storage
6
+
7
+ def store_dir
8
+ "#{Bootsy.store_dir}/#{model.class.to_s.underscore}/#{model.id}"
9
+ end
10
+
11
+ process resize_to_limit: [1160, 2000]
12
+
13
+ version :large do
14
+ process resize_to_fit: [
15
+ Bootsy.large_image[:width], Bootsy.large_image[:height]
16
+ ]
17
+ end
18
+
19
+ version :medium do
20
+ process resize_to_fit: [
21
+ Bootsy.medium_image[:width], Bootsy.medium_image[:height]
22
+ ]
23
+ end
24
+
25
+ version :small do
26
+ process resize_to_fit: [
27
+ Bootsy.small_image[:width], Bootsy.small_image[:height]
28
+ ]
29
+ end
30
+
31
+ version :thumb do
32
+ process resize_to_fill: [60, 60]
33
+ end
34
+
35
+ def extension_white_list
36
+ %w(jpg jpeg gif png)
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,43 @@
1
+ <div class="bootsy-image dropdown col-sm-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,29 @@
1
+ <div class="modal fade bootsy-modal" tabindex="-1" role="dialog"
2
+ data-no-turbolink data-gallery-id="<%= container.bootsy_image_gallery_id %>">
3
+ <div class="modal-dialog" role="document">
4
+ <div class="modal-content">
5
+ <div class="modal-header">
6
+ <button type="button" class="close" data-dismiss="modal">
7
+ <span aria-hidden="true">&times;</span>
8
+ </button>
9
+
10
+ <h4 class="modal-title"><%= t 'bootsy.image.p' %></h4>
11
+ </div>
12
+
13
+ <div class="modal-body">
14
+ <div class="alert alert-info bootsy-empty-alert">
15
+ <%= t 'bootsy.no_images_uploaded' %>
16
+ </div>
17
+
18
+ <div class="row bootsy-gallery"></div>
19
+
20
+ <%= image_tag 'bootsy/gallery-loader.gif', class: 'bootsy-gallery-loader' %>
21
+
22
+ <%= refresh_btn %>
23
+ </div>
24
+
25
+ <div class="modal-footer">
26
+ </div>
27
+ </div>
28
+ </div>
29
+ </div>
@@ -0,0 +1,17 @@
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
+ <div class="input-group">
8
+ <%= f.url_field :remote_image_file_url, class: 'form-control', placeholder: t('bootsy.action.enter_image_url') %>
9
+ <span class="input-group-btn">
10
+ <%= f.submit t('bootsy.action.submit_upload'), class: 'btn btn-default' %>
11
+ </span>
12
+ </div>
13
+
14
+ <span class="bootsy-upload-spacer"><%= t('bootsy.action.or') %></span>
15
+
16
+ <%= f.file_field :image_file, title: t('bootsy.action.upload') %>
17
+ <% end %>
@@ -0,0 +1,30 @@
1
+ en:
2
+ bootsy:
3
+ action:
4
+ refresh: Refresh
5
+ destroy: Delete
6
+ close: Close
7
+ load: Load
8
+ or: or
9
+ upload: Upload New Image
10
+ submit_upload: Go
11
+ enter_image_url: Enter a URL from the web...
12
+ image_gallery: Image Gallery
13
+ image:
14
+ s: Image
15
+ p: Images
16
+ size: Size
17
+ large: Large
18
+ medium: Medium
19
+ small: Small
20
+ original: Original
21
+ new: New image
22
+ confirm:
23
+ destroy: Are you sure you want to delete this image?
24
+ position:
25
+ left: Left
26
+ right: Right
27
+ inline: Inline
28
+ no_images_uploaded: There are currently no uploaded images.
29
+ js:
30
+ alert_unsaved: You have unsaved changes.
@@ -0,0 +1,30 @@
1
+ pt-BR:
2
+ bootsy:
3
+ action:
4
+ refresh: Atualizar
5
+ destroy: Apagar
6
+ close: Fechar
7
+ load: Carregar
8
+ or: ou
9
+ upload: Nova imagem
10
+ submit_upload: Ir
11
+ enter_image_url: Digite uma URL da web...
12
+ image_gallery: Galeria de Imagens
13
+ image:
14
+ s: Imagem
15
+ p: Imagens
16
+ size: Tamanho
17
+ large: Grande
18
+ medium: Médio
19
+ small: Pequeno
20
+ original: Original
21
+ new: Nova imagem
22
+ confirm:
23
+ destroy: Tem certeza que deseja apagar esta imagem?
24
+ position:
25
+ left: Esquerda
26
+ right: Direita
27
+ inline: Mesma linha
28
+ no_images_uploaded: Não existem imagens salvas.
29
+ js:
30
+ 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, :destroy]
4
+ end
5
+
6
+ file_routes = [:index, :create]
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,68 @@
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
+ # Public: Top Bootsy module
12
+ module Bootsy
13
+ ## CONFIGURATION OPTIONS
14
+
15
+ # Default editor options
16
+ mattr_accessor :editor_options
17
+ @@editor_options = {
18
+ font_styles: true,
19
+ emphasis: true,
20
+ lists: true,
21
+ html: false,
22
+ link: true,
23
+ image: true,
24
+ color: true
25
+ }
26
+
27
+ # Image versions available
28
+ mattr_accessor :image_versions_available
29
+ @@image_versions_available = [:small, :medium, :large, :original]
30
+
31
+ # Whether user can destroy uploaded files
32
+ mattr_accessor :allow_destroy
33
+ @@allow_destroy = true
34
+
35
+ # Settings for small images
36
+ mattr_accessor :small_image
37
+ @@small_image = { width: 160, height: 160 }
38
+
39
+ # Settings for medium images
40
+ mattr_accessor :medium_image
41
+ @@medium_image = { width: 360, height: 360 }
42
+
43
+ # Settings for large images
44
+ mattr_accessor :large_image
45
+ @@large_image = { width: 760, height: 760 }
46
+
47
+ # Settings for the original version of images
48
+ mattr_accessor :original_image
49
+ @@original_image = {}
50
+
51
+ # Storage mode
52
+ mattr_accessor :storage
53
+ @@storage = :file
54
+
55
+ # Store directory (inside 'public')
56
+ mattr_accessor :store_dir
57
+ @@store_dir = 'uploads'
58
+
59
+ # Specify which controller to inherit from
60
+ mattr_accessor :base_controller
61
+ @@base_controller = ActionController::Base
62
+
63
+ # Default way to setup Bootsy. Run rails generate bootsy:install
64
+ # to create a fresh initializer with all configuration values.
65
+ def self.setup
66
+ yield self
67
+ end
68
+ end
@@ -0,0 +1,12 @@
1
+ module Bootsy
2
+ # Public: Model to reference the actual image stored trough Bootsy.
3
+ # It contains the CarrierWave uploader and belongs to a
4
+ # particular image gallery.
5
+ class Image < ActiveRecord::Base
6
+ belongs_to :image_gallery, touch: true
7
+
8
+ mount_uploader :image_file, ImageUploader
9
+
10
+ validates_presence_of :image_file, :image_gallery_id
11
+ end
12
+ end
@@ -0,0 +1,23 @@
1
+ module Bootsy
2
+ # Public: A model that groups all images related to a
3
+ # Bootsy container (also called a resource).
4
+ #
5
+ # It is important to note that the relation gallery - resource
6
+ # is not mandatory due to the need of having galleries
7
+ # related to unsaved containers. This may lead to creation
8
+ # of orphan galleries. Because of that, this model includes
9
+ # the `destroy_orphans` method, that removes all galleries
10
+ # that do not point to resources older than the given time
11
+ # limit.
12
+ class ImageGallery < ActiveRecord::Base
13
+ belongs_to :bootsy_resource, polymorphic: true, autosave: false
14
+ has_many :images, dependent: :destroy
15
+
16
+ scope :destroy_orphans, lambda { |time_limit|
17
+ where(
18
+ 'created_at < ? AND bootsy_resource_id IS NULL',
19
+ time_limit
20
+ ).destroy_all
21
+ }
22
+ end
23
+ end
@@ -0,0 +1,52 @@
1
+ module Bootsy
2
+ # Public: Methods and attributes to turn any
3
+ # model into a Bootsy Container.
4
+ #
5
+ # Examples
6
+ #
7
+ # class Post < ActiveRecord::Base
8
+ # include Bootsy::Container
9
+ # end
10
+ module Container
11
+ extend ActiveSupport::Concern
12
+
13
+ included do
14
+ has_one :bootsy_image_gallery,
15
+ class_name: 'Bootsy::ImageGallery',
16
+ as: :bootsy_resource,
17
+ dependent: :destroy
18
+ end
19
+
20
+ # Public: Get the `id` attribute of the image gallery.
21
+ #
22
+ # Returns an Integer id or nil when there is
23
+ # not an image gallery.
24
+ def bootsy_image_gallery_id
25
+ bootsy_image_gallery.try(:id)
26
+ end
27
+
28
+ # Public: Set the image gallery `id` and save
29
+ # the association between models.
30
+ #
31
+ # Examples
32
+ #
33
+ # container.id
34
+ # # => 34
35
+ # gallery.id
36
+ # # => 12
37
+ # container.bootsy_image_gallery_id = gallery.id
38
+ # container.image_gallery_id
39
+ # # => 12
40
+ # gallery.bootsy_resource.id
41
+ # # => 34
42
+ def bootsy_image_gallery_id=(value)
43
+ if bootsy_image_gallery.nil? && value.present?
44
+ self.bootsy_image_gallery = Bootsy::ImageGallery.find(value)
45
+ bootsy_image_gallery.bootsy_resource = self
46
+ bootsy_image_gallery.save
47
+ else
48
+ value
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,4 @@
1
+ # Extend and include Bootsy in proper scopes.
2
+
3
+ ActionView::Base.send(:include, Bootsy::FormHelper)
4
+ ActionView::Helpers::FormBuilder.send(:include, Bootsy::FormBuilder)
@@ -0,0 +1,34 @@
1
+ module Bootsy
2
+ # Public: Define and setup Bootsy as a Rails engine.
3
+ class Engine < Rails::Engine
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.helper(Bootsy::ApplicationHelper)
13
+ # Included at ApplicationController to prevent
14
+ # missing helpers when it is eager loaded.
15
+ ApplicationController.helper(Bootsy::ApplicationHelper)
16
+ end
17
+
18
+ config.after_initialize do
19
+ if defined?(BOOTSY_ORM)
20
+ orm = BOOTSY_ORM
21
+ else
22
+ orm = :activerecord
23
+ end
24
+
25
+ # Require Active Record models. Other ORMs must
26
+ # include their own Bootsy models.
27
+ if orm == :activerecord
28
+ Dir[File.expand_path('../activerecord/*.rb', __FILE__)].each do |f|
29
+ require f
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,18 @@
1
+ module Bootsy
2
+ # Public: Convenience module to include Bootsy
3
+ # in `ActionView::Helpers::FormBuilder`.
4
+ module FormBuilder
5
+ # Public: Return a textarea element with proper attributes to
6
+ # be loaded as a WYSIWYG editor.
7
+ #
8
+ # method - The Symbol attribute name on the object assigned to the
9
+ # form builder that will tailor the editor.
10
+ #
11
+ # options - The Hash of options used to enable/disable features of
12
+ # the editor (default: {}).
13
+ # Available options are:
14
+ def bootsy_area(method, options = {})
15
+ @template.bootsy_area(@object_name, method, objectify_options(options))
16
+ end
17
+ end
18
+ end