bootsy 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 10213f792bf2d4b2a8e5a29aa80b63b21ca14e8a
4
- data.tar.gz: 8786ccb949991086a701ea862ceae43898843bc8
3
+ metadata.gz: d39459ba06843f6310669394df4e9e02390e83a3
4
+ data.tar.gz: 7a3bf0f12f9d4c8b14a4ccc6c5cb035d51d309ff
5
5
  SHA512:
6
- metadata.gz: 46477141879b70d6e6e1989aafe182fb49c70946cb8df87d9b2ccea0ecb1f8111d93574435d46ef1cea1edca58ed01af99e3e8f265bd4a4c5bf64374ea453ff1
7
- data.tar.gz: e4ef2cb97c4e5b54d4b56e437c8bfff94f909443bb426efaaedf8a651d5703c21b2d53e9b5af4af586d06925440ea531d961dc872cabb6451d632218a63b6962
6
+ metadata.gz: 2ad8bb69fa7cdb0c75624e220ee4b64ae4b343e6601f8bc290a3518e39f8d08cedddaaae3812559bfce82486cef7d2daf4717be64cbc5c7a3938bd265a5aad38
7
+ data.tar.gz: 7624652a602ce80baf4a2b2d724c6fe54960d072386bcc7ff8ab3b97accdaecc8f0a9e7cf3e091925a495dd65f89c076ac5de99dba44a978c402299ec7ed6b96
data/Rakefile CHANGED
@@ -28,14 +28,11 @@ require 'coveralls/rake/task'
28
28
 
29
29
  Coveralls::RakeTask.new
30
30
 
31
- task default: [:spec,:run, 'coveralls:push']
31
+ task default: [:spec, :cucumber, 'coveralls:push']
32
32
 
33
33
  RSpec::Core::RakeTask.new(:spec)
34
34
 
35
- Cucumber::Rake::Task.new(:run) do |t|
36
- t.cucumber_opts = ["-t","~@pending","features --format pretty","-s"]
35
+ Cucumber::Rake::Task.new do |t|
36
+ # Uncomment this line when cucumber/multi_test work with minitest.
37
+ # t.cucumber_opts = %w{--format pretty -s}
37
38
  end
38
-
39
- Cucumber::Rake::Task.new(:wip) do |t|
40
- t.cucumber_opts = ["-t","@wip","features"]
41
- end
@@ -2,6 +2,7 @@
2
2
  //= require bootsy/wysihtml5
3
3
  //= require bootsy/bootstrap-wysihtml5
4
4
  //= require bootsy/bootsy
5
+ //= require bootsy/bootstrap.file-input.js
5
6
  //= require bootsy/init
6
7
  //= require bootsy/editor_options
7
8
  //= require bootsy/translations
@@ -34,8 +34,8 @@
34
34
  "<div class='btn-group'>" +
35
35
  "<a class='btn" + size + "' data-wysihtml5-command='insertUnorderedList' title='" + locale.lists.unordered + "' tabindex='-1'><i class='icon-list'></i></a>" +
36
36
  "<a class='btn" + size + "' data-wysihtml5-command='insertOrderedList' title='" + locale.lists.ordered + "' tabindex='-1'><i class='icon-th-list'></i></a>" +
37
- "<a class='btn" + size + "' data-wysihtml5-command='Outdent' title='" + locale.lists.outdent + "' tabindex='-1'><i class='icon-indent-right'></i></a>" +
38
- "<a class='btn" + size + "' data-wysihtml5-command='Indent' title='" + locale.lists.indent + "' tabindex='-1'><i class='icon-indent-left'></i></a>" +
37
+ "<a class='btn" + size + "' data-wysihtml5-command='Outdent' title='" + locale.lists.outdent + "' tabindex='-1'><i class='icon-indent-left'></i></a>" +
38
+ "<a class='btn" + size + "' data-wysihtml5-command='Indent' title='" + locale.lists.indent + "' tabindex='-1'><i class='icon-indent-right'></i></a>" +
39
39
  "</div>" +
40
40
  "</li>";
41
41
  },
@@ -0,0 +1,122 @@
1
+ /*
2
+ Bootstrap - File Input
3
+ ======================
4
+
5
+ This is meant to convert all file input tags into a set of elements that displays consistently in all browsers.
6
+
7
+ Converts all
8
+ <input type="file">
9
+ into Bootstrap buttons
10
+ <a class="btn">Browse</a>
11
+
12
+ */
13
+ $(function() {
14
+
15
+ $.fn.bootstrapFileInput = function() {
16
+
17
+ this.each(function(i,elem){
18
+
19
+ var $elem = $(elem);
20
+
21
+ // Maybe some fields don't need to be standardized.
22
+ if (typeof $elem.attr('data-bfi-disabled') != 'undefined') {
23
+ return;
24
+ }
25
+
26
+ // Set the word to be displayed on the button
27
+ var buttonWord = 'Browse';
28
+
29
+ if (typeof $elem.attr('title') != 'undefined') {
30
+ buttonWord = $elem.attr('title');
31
+ }
32
+
33
+ // Start by getting the HTML of the input element.
34
+ // Thanks for the tip http://stackoverflow.com/a/1299069
35
+ var input = $('<div>').append( $elem.eq(0).clone() ).html();
36
+ var className = '';
37
+
38
+ if (!!$elem.attr('class')) {
39
+ className = ' ' + $elem.attr('class');
40
+ }
41
+
42
+ // Now we're going to replace that input field with a Bootstrap button.
43
+ // The input will actually still be there, it will just be float above and transparent (done with the CSS).
44
+ $elem.replaceWith('<a class="file-input-wrapper btn' + className + '">'+buttonWord+input+'</a>');
45
+ })
46
+
47
+ // After we have found all of the file inputs let's apply a listener for tracking the mouse movement.
48
+ // This is important because the in order to give the illusion that this is a button in FF we actually need to move the button from the file input under the cursor. Ugh.
49
+ .promise().done( function(){
50
+
51
+ // As the cursor moves over our new Bootstrap button we need to adjust the position of the invisible file input Browse button to be under the cursor.
52
+ // This gives us the pointer cursor that FF denies us
53
+ $('.file-input-wrapper').mousemove(function(cursor) {
54
+
55
+ var input, wrapper,
56
+ wrapperX, wrapperY,
57
+ inputWidth, inputHeight,
58
+ cursorX, cursorY;
59
+
60
+ // This wrapper element (the button surround this file input)
61
+ wrapper = $(this);
62
+ // The invisible file input element
63
+ input = wrapper.find("input");
64
+ // The left-most position of the wrapper
65
+ wrapperX = wrapper.offset().left;
66
+ // The top-most position of the wrapper
67
+ wrapperY = wrapper.offset().top;
68
+ // The with of the browsers input field
69
+ inputWidth= input.width();
70
+ // The height of the browsers input field
71
+ inputHeight= input.height();
72
+ //The position of the cursor in the wrapper
73
+ cursorX = cursor.pageX;
74
+ cursorY = cursor.pageY;
75
+
76
+ //The positions we are to move the invisible file input
77
+ // The 20 at the end is an arbitrary number of pixels that we can shift the input such that cursor is not pointing at the end of the Browse button but somewhere nearer the middle
78
+ moveInputX = cursorX - wrapperX - inputWidth + 20;
79
+ // Slides the invisible input Browse button to be positioned middle under the cursor
80
+ moveInputY = cursorY- wrapperY - (inputHeight/2);
81
+
82
+ // Apply the positioning styles to actually move the invisible file input
83
+ input.css({
84
+ left:moveInputX,
85
+ top:moveInputY
86
+ });
87
+ });
88
+
89
+ $('.file-input-wrapper input[type=file]').change(function(){
90
+
91
+ var fileName;
92
+ fileName = $(this).val();
93
+
94
+ // Remove any previous file names
95
+ $(this).parent().next('.file-input-name').remove();
96
+ if (!!$(this).prop('files') && $(this).prop('files').length > 1) {
97
+ fileName = $(this)[0].files.length+' files';
98
+ //$(this).parent().after('<span class="file-input-name">'+$(this)[0].files.length+' files</span>');
99
+ }
100
+ else {
101
+ // var fakepath = 'C:\\fakepath\\';
102
+ // fileName = $(this).val().replace('C:\\fakepath\\','');
103
+ fileName = fileName.substring(fileName.lastIndexOf('\\')+1,fileName.length);
104
+ }
105
+
106
+ $(this).parent().after('<span class="file-input-name">'+fileName+'</span>');
107
+ });
108
+
109
+ });
110
+
111
+ };
112
+
113
+ // Add the styles before the first stylesheet
114
+ // This ensures they can be easily overridden with developer styles
115
+ var cssHtml = '<style>'+
116
+ '.file-input-wrapper { overflow: hidden; position: relative; cursor: pointer; z-index: 1; }'+
117
+ '.file-input-wrapper input[type=file], .file-input-wrapper input[type=file]:focus, .file-input-wrapper input[type=file]:hover { position: absolute; top: 0; left: 0; cursor: pointer; opacity: 0; filter: alpha(opacity=0); z-index: 99; outline: 0; }'+
118
+ '.file-input-name { margin-left: 8px; }'+
119
+ '</style>';
120
+ $('link[rel=stylesheet]').eq(0).before(cssHtml);
121
+
122
+ });
@@ -2,9 +2,11 @@ window.Bootsy = window.Bootsy || {};
2
2
 
3
3
  window.Bootsy.Area = function ($el) {
4
4
  var self = this;
5
+ self.bootsyUploadInit = false; // this flag tells the refreshGallery method whether there was a new upload or not
5
6
 
6
7
  this.progressBar = function () {
7
- self.imageGalleryModal.find('div.modal-body').html('<div class="progress progress-striped active"><div class="bar" style="width: 100%;"></div></div>');
8
+ // Show loading spinner
9
+ $('.bootsy-spinner img').fadeIn(200);
8
10
  };
9
11
 
10
12
  this.setImageGalleryId = function (id) {
@@ -12,6 +14,16 @@ window.Bootsy.Area = function ($el) {
12
14
  $('input.bootsy_image_gallery_id').val(id);
13
15
  };
14
16
 
17
+ this.deleteImage = function (id) {
18
+ self.imageGalleryModal.find("ul.thumbnails").find("[data-id='" + id + "']").hide(200, function(){
19
+ $(this).remove();
20
+ // Put message back if 0 images
21
+ if ( self.imageGalleryModal.find('.thumbnails li').length == 0 ) {
22
+ self.imageGalleryModal.find('.alert').fadeIn(200);
23
+ }
24
+ });
25
+ };
26
+
15
27
  this.refreshGallery = function () {
16
28
  self.progressBar();
17
29
  $.ajax({
@@ -23,8 +35,48 @@ window.Bootsy.Area = function ($el) {
23
35
  },
24
36
  dataType: 'json',
25
37
  success: function (data) {
26
- self.imageGalleryModal.find('div.modal-body').html(data.partial);
38
+ // Hide loading spinner
39
+ $('.bootsy-spinner img').fadeOut(200);
40
+
41
+ // Cache the returned data
42
+ var $data = $(data.partial);
43
+
44
+ // Retrieve the last added li from the cached data
45
+ img = $data.find('ul.thumbnails > li').last();
46
+
47
+ if ( img.length ) {
48
+ // Thumbnails currently exist in the retrieved data, so hide the message
49
+ $('.alert').hide();
50
+ } else {
51
+ // Thumbnails do not exist in the retrieved data, so show the message
52
+ $('.thumbnails li').hide();
53
+ $('.alert').fadeIn(100);
54
+ }
55
+
56
+ if ( self.imageGalleryModal.find('.modal-body').children().length == 0 ) {
57
+ // Init the modal content (only loads first time)
58
+ self.imageGalleryModal.find('.modal-content').html($data).hide().fadeIn(200);
59
+ // Nicer file input
60
+ $('.modal-footer #image_image_file').bootstrapFileInput();
61
+ } else if ( self.bootsyUploadInit == true ) {
62
+ self.bootsyUploadInit = false;
63
+ $(img).hide().appendTo(self.imageGalleryModal.find('.modal-body .thumbnails')).fadeIn(200);
64
+ } else {
65
+ // do nothing
66
+ }
67
+
27
68
  self.imageGalleryModal.find('a.refresh-btn').hide();
69
+ self.imageGalleryModal.find('#refresh-gallery').hide();
70
+ self.imageGalleryModal.find('input#upload_submit').hide();
71
+
72
+
73
+ // Autosubmit on image selection
74
+ $('.modal-footer #image_image_file').on('change', function(){
75
+ self.progressBar();
76
+ self.bootsyUploadInit = true;
77
+ $(this).closest('form').submit();
78
+ });
79
+
28
80
  },
29
81
  error: function (e) {
30
82
  alert(Bootsy.translations[self.locale].error);
@@ -119,6 +171,7 @@ window.Bootsy.Area = function ($el) {
119
171
  };
120
172
 
121
173
  this.imageGalleryModal = $('#bootsy_image_gallery');
174
+ this.imageGalleryModal.find('a.refresh-btn').hide();
122
175
 
123
176
  this.imageGalleryModal.parents('form').after(this.imageGalleryModal);
124
177
 
@@ -47,4 +47,4 @@
47
47
  orange: "Laranja"
48
48
  }
49
49
  };
50
- }(jQuery));
50
+ }(jQuery));
@@ -129,4 +129,44 @@ blockquote:after {
129
129
 
130
130
  textarea.bootsy:required:invalid {
131
131
  color: inherit;
132
- }
132
+ }
133
+
134
+ /*Allow dropdown menus to show be displayed if they overflow the footer or modal*/
135
+ #bootsy_image_gallery .modal { overflow: visible; }
136
+ #bootsy_image_gallery .modal-body { overflow-y: visible; }
137
+
138
+ /*Modal Design Styles*/
139
+ #bootsy_image_gallery form { margin-bottom: 0px; } /*remove default bottom margin*/
140
+ #bootsy_image_gallery .file-input-name {display: none;} /*Hide the input file name from showing as it's not needed and ruins design*/
141
+ /*Set a min-height on the modal body to prevent jumping up and down of modal when adding content*/
142
+ #bootsy_image_gallery .modal-body {
143
+ min-height: 78px;
144
+ margin-bottom: 0;
145
+ padding-bottom: 7px;
146
+ }
147
+ #bootsy_image_gallery .modal-body .thumbnails {
148
+ margin-left: -10px;
149
+ margin-bottom: 0;
150
+ }
151
+ #bootsy_image_gallery .modal-body .thumbnails > li {
152
+ margin-left: 7px;
153
+ margin-bottom: 8px;
154
+ }
155
+
156
+ #bootsy_image_gallery .modal-body .thumbnails > li.alert {
157
+ width: 100%;
158
+ margin-right: 8px;
159
+ }
160
+ .bootsy-spinner {
161
+ display: inline-block;
162
+ padding-right: 5px;
163
+ }
164
+ .bootsy-spinner img {
165
+ display: none;
166
+ }
167
+
168
+ /*The below code is needed for capybara to be able to find the input, as it*/
169
+ /*does not work*/
170
+ .file-input-wrapper input[type=file], .file-input-wrapper input[type=file]:focus, .file-input-wrapper input[type=file]:hover {
171
+ opacity: .01;
172
+ }
@@ -1,42 +1,48 @@
1
- <ul class="thumbnails">
2
- <% gallery.images.each do |image| %>
3
- <li class="span1 dropdown">
4
- <%= link_to image_tag(image.image_file.thumb.url), '#', :class => 'thumbnail', data: { toggle: 'dropdown'} %>
5
- <ul class="dropdown-menu" role="menu">
6
- <li class="nav-header"><%= t 'bootsy.image.size' %></li>
7
- <% Bootsy.image_versions_available.each do |size| %>
8
- <li class="dropdown-submenu">
9
- <%= link_to '#' do %>
10
- <i class="icon-picture"></i>
11
- <%= t "bootsy.image.#{size}" %>
12
- <% end %>
13
- <ul class="dropdown-menu">
14
- <% [:left, :right, :inline].each do |position| %>
15
- <li>
16
- <%= link_to '#', :class => 'insert', tabindex: '-1', data: { :'image-size' => size.to_s, position: position.to_s} do %>
17
- <%= t "bootsy.image.position.#{position}" %>
18
- <% end %>
19
- </li>
20
- <% end %>
21
- </ul>
22
- </li>
23
- <% end %>
24
- <% if Bootsy.allow_destroy %>
25
- <li class="divider"></li>
26
- <li>
27
- <%= link_to image, method: :delete, remote: true, data: { confirm: t('bootsy.image.confirm.destroy')}, tabindex: '-1', :class => 'destroy_btn' do %>
28
- <i class="icon-trash"></i>
29
- <%= t 'bootsy.action.destroy' %>
30
- <% end %>
31
- </li>
32
- <% end %>
33
- </ul>
34
- </li>
1
+ <div class="modal-body">
2
+ <% if gallery.images.count == 0 %>
3
+ <p class='alert'><%= t 'bootsy.no_images_uploaded' %></p>
35
4
  <% end %>
36
- </ul>
37
5
 
38
- <%= refresh_btn %>
6
+ <ul class="thumbnails">
7
+ <% gallery.images.each do |image| %>
8
+ <li class="dropdown" data-id="<%= image.id %>">
9
+ <%= link_to image_tag(image.image_file.thumb.url), '#', :class => 'thumbnail', data: { toggle: 'dropdown'} %>
10
+ <ul class="dropdown-menu" role="menu">
11
+ <li class="nav-header"><%= t 'bootsy.image.size' %></li>
12
+ <% Bootsy.image_versions_available.each do |size| %>
13
+ <li class="dropdown-submenu">
14
+ <%= link_to '#' do %>
15
+ <i class="icon-picture"></i>
16
+ <%= t "bootsy.image.#{size}" %>
17
+ <% end %>
18
+ <ul class="dropdown-menu">
19
+ <% [:left, :right, :inline].each do |position| %>
20
+ <li>
21
+ <%= link_to '#', :class => 'insert', tabindex: '-1', data: { :'image-size' => size.to_s, position: position.to_s} do %>
22
+ <%= t "bootsy.image.position.#{position}" %>
23
+ <% end %>
24
+ </li>
25
+ <% end %>
26
+ </ul>
27
+ </li>
28
+ <% end %>
29
+ <% if Bootsy.allow_destroy %>
30
+ <li class="divider"></li>
31
+ <li>
32
+ <%= link_to image, method: :delete, remote: true, data: { confirm: t('bootsy.image.confirm.destroy')}, tabindex: '-1', :class => 'destroy_btn' do %>
33
+ <i class="icon-trash"></i>
34
+ <%= t('bootsy.action.destroy') %>
35
+ <% end %>
36
+ </li>
37
+ <% end %>
38
+ </ul>
39
+ </li>
40
+ <% end %>
41
+ </ul>
39
42
 
40
- <hr />
43
+ <%= refresh_btn %>
41
44
 
42
- <%= render 'bootsy/images/new', {image: (defined?(image) && image.errors.any?) ? image : gallery.images.new } %>
45
+ </div>
46
+ <div class="modal-footer">
47
+ <%= render 'bootsy/images/new', {image: (defined?(image) && image.errors.any?) ? image : gallery.images.new } %>
48
+ </div>
@@ -1,12 +1,13 @@
1
1
  <div class="modal hide fade" id="bootsy_image_gallery" data-no-turbolink data-bootsy-gallery-id="<%= container.bootsy_image_gallery_id %>">
2
2
  <div class="modal-header">
3
3
  <button type="button" class="close" data-dismiss="modal">×</button>
4
- <h2><%= t 'bootsy.image.p' %></h2>
5
- </div>
6
- <div class="modal-body">
4
+ <h3><%= t 'bootsy.image.p' %></h3>
7
5
  <%= refresh_btn %>
8
6
  </div>
9
- <div class="modal-footer">
10
- <a href="#" class="btn" data-dismiss="modal"><%= t 'bootsy.action.close' %></a>
7
+ <div class="modal-content">
8
+ <div class="modal-body">
9
+ </div>
10
+ <div class="modal-footer">
11
+ </div>
11
12
  </div>
12
13
  </div>
@@ -1,5 +1,3 @@
1
- <h3><%= t 'bootsy.image.new' %></h3>
2
-
3
1
  <%= form_for [bootsy, resource_or_nil(image.image_gallery), image], remote: true, html: {:class => 'bootsy form-inline'} do |f| %>
4
2
  <%= hidden_field_tag :authenticity_token, form_authenticity_token %>
5
3
  <% if image.errors.any? %>
@@ -8,7 +6,11 @@
8
6
  <% end %>
9
7
  <% end %>
10
8
 
11
- <%= f.file_field :image_file %>
9
+ <div class="bootsy-spinner">
10
+ <%= image_tag "bootsy/ajax-loader.gif" %>
11
+ </div>
12
+
13
+ <%= f.file_field :image_file, title: t('bootsy.action.upload') %>
12
14
 
13
- <%= f.submit t('bootsy.action.load'), :class => 'btn btn-primary' %>
15
+ <%= f.submit t('bootsy.action.load'), id: 'upload_submit', :class => 'btn btn-primary' %>
14
16
  <% end %>
@@ -1 +1 @@
1
- Bootsy.areas[0].refreshGallery($('#bootsy_image_gallery'));
1
+ Bootsy.areas[0].deleteImage(<%= @image.id %>);
@@ -2,9 +2,10 @@ en:
2
2
  bootsy:
3
3
  action:
4
4
  refresh: Refresh
5
- destroy: Destroy
5
+ destroy: Delete
6
6
  close: Close
7
7
  load: Load
8
+ upload: Upload New Image
8
9
  image_gallery: Image Gallery
9
10
  image:
10
11
  s: Image
@@ -16,8 +17,11 @@ en:
16
17
  original: Original
17
18
  new: New image
18
19
  confirm:
19
- destroy: Are you sure you want do destroy this image?
20
+ destroy: Are you sure you want to delete this image?
20
21
  position:
21
22
  left: Left
22
23
  right: Right
23
- inline: Inline
24
+ inline: Inline
25
+ no_images_uploaded: There are currently no uploaded images.
26
+ js:
27
+ alert_unsaved: You have unsaved changes.
@@ -1,3 +1,3 @@
1
1
  module Bootsy
2
- VERSION = '1.0.0'
2
+ VERSION = '1.1.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bootsy
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Volmer Soares
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-07 00:00:00.000000000 Z
11
+ date: 2013-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mini_magick
@@ -30,42 +30,42 @@ dependencies:
30
30
  requirements:
31
31
  - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: 0.8.0
33
+ version: 0.9.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ~>
39
39
  - !ruby/object:Gem::Version
40
- version: 0.8.0
40
+ version: 0.9.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: remotipart
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ~>
46
46
  - !ruby/object:Gem::Version
47
- version: 1.1.0
47
+ version: 1.2.1
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
- version: 1.1.0
54
+ version: 1.2.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec-rails
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: '2.13'
61
+ version: '2.14'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ~>
67
67
  - !ruby/object:Gem::Version
68
- version: '2.13'
68
+ version: '2.14'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: factory_girl_rails
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - ~>
88
88
  - !ruby/object:Gem::Version
89
- version: '1.0'
89
+ version: 1.0.1
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - ~>
95
95
  - !ruby/object:Gem::Version
96
- version: '1.0'
96
+ version: 1.0.1
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: cucumber-rails
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -114,28 +114,28 @@ dependencies:
114
114
  requirements:
115
115
  - - ~>
116
116
  - !ruby/object:Gem::Version
117
- version: '2.1'
117
+ version: '2.2'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - ~>
123
123
  - !ruby/object:Gem::Version
124
- version: '2.1'
124
+ version: '2.2'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: selenium-webdriver
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - ~>
130
130
  - !ruby/object:Gem::Version
131
- version: '2.33'
131
+ version: '2.35'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - ~>
137
137
  - !ruby/object:Gem::Version
138
- version: '2.33'
138
+ version: '2.35'
139
139
  description: A beautiful WYSIWYG editor with image uploads for Rails.
140
140
  email:
141
141
  - volmerius@gmail.com
@@ -143,7 +143,9 @@ executables: []
143
143
  extensions: []
144
144
  extra_rdoc_files: []
145
145
  files:
146
+ - app/assets/images/bootsy/ajax-loader.gif
146
147
  - app/assets/javascripts/bootsy/bootstrap-wysihtml5.js
148
+ - app/assets/javascripts/bootsy/bootstrap.file-input.js
147
149
  - app/assets/javascripts/bootsy/bootsy.js
148
150
  - app/assets/javascripts/bootsy/editor_options.js
149
151
  - app/assets/javascripts/bootsy/init.js
@@ -207,7 +209,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
207
209
  version: '0'
208
210
  requirements: []
209
211
  rubyforge_project:
210
- rubygems_version: 2.0.3
212
+ rubygems_version: 2.0.5
211
213
  signing_key:
212
214
  specification_version: 4
213
215
  summary: A beautiful WYSIWYG editor with image uploads for Rails.