bootstrap_builders 0.0.10 → 0.0.11
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.
- checksums.yaml +4 -4
- data/README.md +9 -0
- data/app/assets/javascripts/bootstrap_builders.coffee +3 -0
- data/app/assets/javascripts/bootstrap_builders/bb-btn-responsive.coffee +9 -0
- data/app/assets/javascripts/bootstrap_builders/tabs.js.coffee +14 -0
- data/app/assets/javascripts/bootstrap_builders/view-port-detection.coffee +69 -0
- data/app/assets/stylesheets/bootstrap_builders.scss +1 -0
- data/app/assets/stylesheets/bootstrap_builders/bb-btn-responsive.scss +6 -0
- data/lib/bootstrap_builders/arguments_parser.rb +6 -6
- data/lib/bootstrap_builders/button.rb +21 -18
- data/lib/bootstrap_builders/tab.rb +2 -1
- data/lib/bootstrap_builders/table.rb +4 -1
- data/lib/bootstrap_builders/tabs.rb +1 -0
- data/lib/bootstrap_builders/version.rb +1 -1
- metadata +9 -5
- data/app/assets/javascripts/bootstrap_builders/application.js +0 -13
- data/app/assets/stylesheets/bootstrap_builders/application.css +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a0826b4f8fcc18607bb51d8737da9f2e4d9067c
|
4
|
+
data.tar.gz: 6647d3933ffcbadc667d2ac7e8a018eac3046dd7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bc159ed82574a9eb51cfe5033df325857f86a4ed0f0cc5453efaa5e50058d38f2ea7daf6f7b23f1faa63148a69bef398baef09b0208ed4be904bb50f48b33f28
|
7
|
+
data.tar.gz: caa58021299bc802189b91e3d9a31eb645fc19d7c2635032ff14452576b9bd9c0a1f2ccb8c97d2e21d2775f7a7cb6593b3920beb4e9a402a3e2b4a33aba17928
|
data/README.md
CHANGED
@@ -14,6 +14,14 @@ module ApplicationHelper
|
|
14
14
|
end
|
15
15
|
```
|
16
16
|
|
17
|
+
Then add to your `application.js`:
|
18
|
+
```javascript
|
19
|
+
//= require bootstrap_builders
|
20
|
+
```
|
21
|
+
|
22
|
+
Then add to your `application.css`:
|
23
|
+
//= require bootstrap_builders
|
24
|
+
|
17
25
|
## Usage
|
18
26
|
|
19
27
|
### Panel
|
@@ -95,6 +103,7 @@ The classes "bb-table" and "table" are always added.
|
|
95
103
|
= bb_tabs :pills, :stacked do |tabs|
|
96
104
|
= tabs.tab "Title", "id-of-content-container" do
|
97
105
|
Content of tab
|
106
|
+
= tabs.tab "Load on demand", ajax_url: some_path
|
98
107
|
```
|
99
108
|
|
100
109
|
## Contributing to bootstrap_builders
|
@@ -0,0 +1,14 @@
|
|
1
|
+
$ ->
|
2
|
+
$("body").on "click", ".bb-tabs-container .nav li[data-ajax-url]", ->
|
3
|
+
li = $(this)
|
4
|
+
link = $("a", li)
|
5
|
+
content_id = link.attr("href").substring(1, 999)
|
6
|
+
content = $(".bb-tabs-container #" + content_id + " .bb-tab-container")
|
7
|
+
|
8
|
+
return if li.data("ajax-loaded")
|
9
|
+
li.data("ajax-loaded", true)
|
10
|
+
|
11
|
+
content.fadeOut 0, ->
|
12
|
+
$.get li.data("ajax-url"), (data) ->
|
13
|
+
content.html(data)
|
14
|
+
content.fadeIn "fast"
|
@@ -0,0 +1,69 @@
|
|
1
|
+
$ ->
|
2
|
+
sizes = {
|
3
|
+
xs: [0, 767],
|
4
|
+
sm: [768, 991],
|
5
|
+
md: [992, 1199],
|
6
|
+
lg: [1200, 999999]
|
7
|
+
}
|
8
|
+
|
9
|
+
$.bbViewPort = ->
|
10
|
+
width = window.innerWidth
|
11
|
+
|
12
|
+
for size of sizes
|
13
|
+
size_width = sizes[size][0]
|
14
|
+
size_height = sizes[size][1]
|
15
|
+
return size if width >= size_width && width < size_height
|
16
|
+
|
17
|
+
throw "Could not figure out the Bootstrap view port from this width: " + width
|
18
|
+
|
19
|
+
$.bbViewPortOrAbove = (given_size) ->
|
20
|
+
current_size = $.bbViewPort()
|
21
|
+
reached = false
|
22
|
+
|
23
|
+
for size of sizes
|
24
|
+
reached = true if size == current_size
|
25
|
+
|
26
|
+
if size == given_size
|
27
|
+
if reached
|
28
|
+
return false
|
29
|
+
else
|
30
|
+
return true
|
31
|
+
|
32
|
+
throw "Invalid size: " + given_size
|
33
|
+
|
34
|
+
$.bbViewPortOrBelow = (given_size) ->
|
35
|
+
current_size = $.bbViewPort()
|
36
|
+
reached = false
|
37
|
+
|
38
|
+
for size of sizes
|
39
|
+
reached = true if size == current_size
|
40
|
+
|
41
|
+
if given_size == size
|
42
|
+
if reached
|
43
|
+
return true
|
44
|
+
else
|
45
|
+
return false
|
46
|
+
|
47
|
+
throw "Invalid size: " + given_size
|
48
|
+
|
49
|
+
viewport_callbacks = []
|
50
|
+
$.bbViewPortChange = (func) -> viewport_callbacks.push(func)
|
51
|
+
|
52
|
+
resize_timeout = null
|
53
|
+
current_viewport = $.bbViewPort()
|
54
|
+
$.bbViewPortOnChanged = ->
|
55
|
+
clearTimeout(resize_timeout) if resize_timeout
|
56
|
+
|
57
|
+
resize_timeout = setTimeout( ->
|
58
|
+
$("body").removeClass("bb-view-port-xs bb-view-port-sm bb-view-port-md bb-view-port-lg")
|
59
|
+
new_viewport = $.bbViewPort()
|
60
|
+
$("body").addClass("bb-view-port-" + new_viewport)
|
61
|
+
|
62
|
+
if new_viewport != current_viewport
|
63
|
+
current_viewport = new_viewport
|
64
|
+
|
65
|
+
for number, viewport_callback of viewport_callbacks
|
66
|
+
viewport_callback.call()
|
67
|
+
, 200)
|
68
|
+
|
69
|
+
$(window).resize -> $.bbViewPortOnChanged()
|
@@ -0,0 +1 @@
|
|
1
|
+
//= require bootstrap_builders/bb-btn-responsive
|
@@ -1,20 +1,20 @@
|
|
1
1
|
class BootstrapBuilders::ArgumentsParser
|
2
|
-
attr_reader :arguments
|
2
|
+
attr_reader :arguments, :arguments_hash
|
3
3
|
|
4
4
|
def initialize(args)
|
5
5
|
@arguments = args.fetch(:arguments)
|
6
6
|
|
7
7
|
if args[:argument_hash_default]
|
8
|
-
@
|
8
|
+
@arguments_hash = args.fetch(:argument_hash_default)
|
9
9
|
else
|
10
|
-
@
|
10
|
+
@arguments_hash = {}
|
11
11
|
end
|
12
12
|
|
13
13
|
if @arguments.last.is_a?(Hash)
|
14
|
-
@
|
14
|
+
@arguments_hash = @arguments_hash.merge(@arguments.pop)
|
15
15
|
end
|
16
16
|
|
17
|
-
@arguments << @
|
17
|
+
@arguments << @arguments_hash
|
18
18
|
|
19
19
|
@short_true_arguments = args[:short_true_arguments]
|
20
20
|
parse_short_true_arguments if @short_true_arguments
|
@@ -25,7 +25,7 @@ private
|
|
25
25
|
def parse_short_true_arguments
|
26
26
|
@arguments.delete_if do |argument|
|
27
27
|
if @short_true_arguments.include?(argument)
|
28
|
-
@
|
28
|
+
@arguments_hash[argument] = true
|
29
29
|
true
|
30
30
|
else
|
31
31
|
false
|
@@ -2,27 +2,21 @@ class BootstrapBuilders::Button
|
|
2
2
|
attr_accessor :label
|
3
3
|
|
4
4
|
def self.parse_url_args(args)
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
args_parser = BootstrapBuilders::ArgumentsParser.new(
|
6
|
+
arguments: args,
|
7
|
+
short_true_arguments: [:block, :confirm, :responsive, :lg, :md, :mini, :sm, :xs]
|
8
|
+
)
|
9
|
+
args = args_parser.arguments
|
10
10
|
|
11
11
|
is_an_active_record = BootstrapBuilders::IsAChecker.is_a?(args.first, "ActiveRecord::Base")
|
12
12
|
is_a_baza_model = BootstrapBuilders::IsAChecker.is_a?(args.first, "BazaModels::Model")
|
13
13
|
|
14
14
|
if args.first.is_a?(Array) || args.first.is_a?(String) || is_an_active_record || is_a_baza_model
|
15
|
-
|
16
|
-
end
|
17
|
-
|
18
|
-
real_args[:label] ||= args.shift if args.first.is_a?(String)
|
19
|
-
|
20
|
-
pass_args = [:block, :confirm, :lg, :md, :mini, :sm, :xs]
|
21
|
-
args.each do |arg|
|
22
|
-
real_args[arg] = true if pass_args.include?(arg)
|
15
|
+
args_parser.arguments_hash[:url] ||= args.shift
|
23
16
|
end
|
24
17
|
|
25
|
-
|
18
|
+
args_parser.arguments_hash[:label] ||= args.shift if args.first.is_a?(String)
|
19
|
+
args_parser.arguments_hash
|
26
20
|
end
|
27
21
|
|
28
22
|
def initialize(args)
|
@@ -35,6 +29,11 @@ class BootstrapBuilders::Button
|
|
35
29
|
@icon = args[:icon]
|
36
30
|
@can = args[:can]
|
37
31
|
@mini = args[:mini]
|
32
|
+
|
33
|
+
@data = args[:data] || {}
|
34
|
+
@data[:bb_icon] = @icon.present?
|
35
|
+
|
36
|
+
@args[:title] ||= @label if @args[:responsive] && @label.present?
|
38
37
|
end
|
39
38
|
|
40
39
|
def classes
|
@@ -42,6 +41,7 @@ class BootstrapBuilders::Button
|
|
42
41
|
@classes = BootstrapBuilders::ClassAttributeHandler.new(class: ["btn", "btn-default"])
|
43
42
|
@classes.add("btn-xs") if @mini
|
44
43
|
@classes.add(@class) if @class
|
44
|
+
@classes.add("bb-btn-responsive") if @args[:responsive]
|
45
45
|
|
46
46
|
size_classes = [:lg, :md, :sm, :xs]
|
47
47
|
size_classes.each do |size_class|
|
@@ -61,7 +61,7 @@ class BootstrapBuilders::Button
|
|
61
61
|
|
62
62
|
link_args = {
|
63
63
|
class: classes.classes,
|
64
|
-
data: @
|
64
|
+
data: @data,
|
65
65
|
method: @args[:method],
|
66
66
|
target: @args[:target],
|
67
67
|
remote: @args[:remote],
|
@@ -71,7 +71,11 @@ class BootstrapBuilders::Button
|
|
71
71
|
@context.link_to(@url, link_args) do
|
72
72
|
html = ""
|
73
73
|
html << @context.content_tag(:i, nil, class: ["fa", "fa-#{@icon}"]) if @icon
|
74
|
-
|
74
|
+
|
75
|
+
if @label && !@mini
|
76
|
+
html << @context.content_tag(:span, " #{@label}", class: "bb-btn-label")
|
77
|
+
end
|
78
|
+
|
75
79
|
html.strip.html_safe
|
76
80
|
end
|
77
81
|
end
|
@@ -151,7 +155,6 @@ private
|
|
151
155
|
|
152
156
|
def handle_confirm_argument
|
153
157
|
return unless @args[:confirm]
|
154
|
-
@
|
155
|
-
@args[:data][:confirm] = I18n.t("are_you_sure")
|
158
|
+
@data[:confirm] = I18n.t("are_you_sure")
|
156
159
|
end
|
157
160
|
end
|
@@ -1,10 +1,11 @@
|
|
1
1
|
class BootstrapBuilders::Tab
|
2
2
|
attr_accessor :active, :container_html
|
3
|
-
attr_reader :container_id, :label
|
3
|
+
attr_reader :ajax_url, :container_id, :label
|
4
4
|
|
5
5
|
def initialize(args)
|
6
6
|
@active = args[:active]
|
7
7
|
@label = args.fetch(:label)
|
8
|
+
@ajax_url = args[:ajax_url]
|
8
9
|
|
9
10
|
@container_id = args[:container_id].presence
|
10
11
|
@container_id ||= SecureRandom.hex
|
@@ -6,7 +6,10 @@ class BootstrapBuilders::Table
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def html
|
9
|
-
@context.content_tag(:table, attributes, &@blk)
|
9
|
+
buffer = @context.content_tag(:table, attributes, &@blk)
|
10
|
+
return buffer unless @args[:responsive]
|
11
|
+
|
12
|
+
@context.content_tag(:div, buffer, class: "table-responsive")
|
10
13
|
end
|
11
14
|
|
12
15
|
private
|
@@ -29,6 +29,7 @@ class BootstrapBuilders::Tabs
|
|
29
29
|
li = ul.add_ele(:li)
|
30
30
|
li.add_ele(:a, str: tab.label, attr: {href: "##{tab.container_id}"}, data: {toggle: "tab"})
|
31
31
|
li.classes << "active" if tab.active?
|
32
|
+
li.data[:ajax_url] = tab.ajax_url if tab.ajax_url.present?
|
32
33
|
end
|
33
34
|
|
34
35
|
tabs_content = container.add_ele(:div, classes: ["tab-content"])
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bootstrap_builders
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kaspernj
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -230,8 +230,12 @@ files:
|
|
230
230
|
- MIT-LICENSE
|
231
231
|
- README.md
|
232
232
|
- Rakefile
|
233
|
-
- app/assets/javascripts/bootstrap_builders
|
234
|
-
- app/assets/
|
233
|
+
- app/assets/javascripts/bootstrap_builders.coffee
|
234
|
+
- app/assets/javascripts/bootstrap_builders/bb-btn-responsive.coffee
|
235
|
+
- app/assets/javascripts/bootstrap_builders/tabs.js.coffee
|
236
|
+
- app/assets/javascripts/bootstrap_builders/view-port-detection.coffee
|
237
|
+
- app/assets/stylesheets/bootstrap_builders.scss
|
238
|
+
- app/assets/stylesheets/bootstrap_builders/bb-btn-responsive.scss
|
235
239
|
- app/controllers/bootstrap_builders/application_controller.rb
|
236
240
|
- app/helpers/bootstrap_builders/application_helper.rb
|
237
241
|
- app/views/layouts/bootstrap_builders/application.html.erb
|
@@ -272,7 +276,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
272
276
|
version: '0'
|
273
277
|
requirements: []
|
274
278
|
rubyforge_project:
|
275
|
-
rubygems_version: 2.
|
279
|
+
rubygems_version: 2.2.2
|
276
280
|
signing_key:
|
277
281
|
specification_version: 4
|
278
282
|
summary: A library to generate Bootstrap HTML for Rails.
|
@@ -1,13 +0,0 @@
|
|
1
|
-
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
2
|
-
// listed below.
|
3
|
-
//
|
4
|
-
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
5
|
-
// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
|
6
|
-
//
|
7
|
-
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
8
|
-
// compiled file.
|
9
|
-
//
|
10
|
-
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
|
11
|
-
// about supported directives.
|
12
|
-
//
|
13
|
-
//= require_tree .
|
@@ -1,15 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
-
* listed below.
|
4
|
-
*
|
5
|
-
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
-
* or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
|
7
|
-
*
|
8
|
-
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
|
9
|
-
* compiled file so the styles you add here take precedence over styles defined in any styles
|
10
|
-
* defined in the other CSS/SCSS files in this directory. It is generally better to create a new
|
11
|
-
* file per style scope.
|
12
|
-
*
|
13
|
-
*= require_tree .
|
14
|
-
*= require_self
|
15
|
-
*/
|