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 +4 -4
- data/Rakefile +4 -7
- data/app/assets/images/bootsy/ajax-loader.gif +0 -0
- data/app/assets/javascripts/bootsy.js +1 -0
- data/app/assets/javascripts/bootsy/bootstrap-wysihtml5.js +2 -2
- data/app/assets/javascripts/bootsy/bootstrap.file-input.js +122 -0
- data/app/assets/javascripts/bootsy/bootsy.js +55 -2
- data/app/assets/javascripts/bootsy/locales/bootstrap-wysihtml5.pt-BR.js +1 -1
- data/app/assets/stylesheets/bootsy/bootsy.css +41 -1
- data/app/views/bootsy/images/_index.html.erb +44 -38
- data/app/views/bootsy/images/_modal.html.erb +6 -5
- data/app/views/bootsy/images/_new.html.erb +6 -4
- data/app/views/bootsy/images/destroy.js.erb +1 -1
- data/config/locales/en.yml +7 -3
- data/lib/bootsy/version.rb +1 -1
- metadata +17 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d39459ba06843f6310669394df4e9e02390e83a3
|
4
|
+
data.tar.gz: 7a3bf0f12f9d4c8b14a4ccc6c5cb035d51d309ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
31
|
+
task default: [:spec, :cucumber, 'coveralls:push']
|
32
32
|
|
33
33
|
RSpec::Core::RakeTask.new(:spec)
|
34
34
|
|
35
|
-
Cucumber::Rake::Task.new
|
36
|
-
|
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
|
Binary file
|
@@ -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-
|
38
|
-
"<a class='btn" + size + "' data-wysihtml5-command='Indent' title='" + locale.lists.indent + "' tabindex='-1'><i class='icon-indent-
|
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
|
-
|
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
|
-
|
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
|
|
@@ -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
|
-
<
|
2
|
-
<% gallery.images.
|
3
|
-
<
|
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
|
-
|
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
|
-
|
43
|
+
<%= refresh_btn %>
|
41
44
|
|
42
|
-
|
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
|
-
<
|
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-
|
10
|
-
<
|
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
|
-
|
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].
|
1
|
+
Bootsy.areas[0].deleteImage(<%= @image.id %>);
|
data/config/locales/en.yml
CHANGED
@@ -2,9 +2,10 @@ en:
|
|
2
2
|
bootsy:
|
3
3
|
action:
|
4
4
|
refresh: Refresh
|
5
|
-
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
|
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.
|
data/lib/bootsy/version.rb
CHANGED
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.
|
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-
|
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.
|
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.
|
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
|
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
|
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.
|
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.
|
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:
|
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:
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|