trestle-mobility 0.2.0 → 0.3.0
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 +19 -3
- data/app/assets/javascript/trestle/mobility_fields.js +46 -0
- data/app/views/trestle/mobility/_text_area.html.erb +10 -14
- data/app/views/trestle/mobility/_text_field.html.erb +13 -15
- data/config/initializers/trestle.rb +4 -0
- data/lib/trestle/mobility/configuration.rb +9 -0
- data/lib/trestle/mobility/engine.rb +1 -0
- data/lib/trestle/mobility/text_area.rb +7 -1
- data/lib/trestle/mobility/text_field.rb +6 -1
- data/lib/trestle/mobility/version.rb +1 -1
- data/lib/trestle/mobility.rb +4 -0
- data/screenshot.png +0 -0
- data/trestle-mobility.gemspec +1 -0
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e6d354d0c59601aba494962abac3bd8ed37a00ec1f5b364c233cd656f962312
|
4
|
+
data.tar.gz: 488ed9a24935e94a825d96f6f9429845d8ec932abb3eaacdfd9ca9f5e5d1125b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '0791933b2b6732b353a663ac9dc4e0d6c2326da3a6312a4cc4627569cc93827600ad1b5da8205e2a7d528479e7d817ed68af6b5d61358d5e6073c3dceafcc7a8'
|
7
|
+
data.tar.gz: 4708fc86e840507be062dae338c3b92715872754b59c1c175209e951dfefa15dc9af0b3fc9af16faaff763281af64f9df574b634cf01772854059e1c566aa33f
|
data/README.md
CHANGED
@@ -10,11 +10,11 @@
|
|
10
10
|
- Supports Postgres container back-end
|
11
11
|
- Probably works with other back-ends but has not been tested
|
12
12
|
|
13
|
-
|
13
|
+
<img src="/screenshot.png?raw=true" width="529" height="242" alt="Trestle Mobility screenshot" />
|
14
14
|
|
15
15
|
## Usage
|
16
16
|
|
17
|
-
Trestle Mobility requires you to enable [Mobility's `locale_accessors` plugin](https://github.com/shioyama/mobility#getset)
|
17
|
+
Trestle Mobility requires you to enable [Mobility's `locale_accessors` plugin](https://github.com/shioyama/mobility#getset).
|
18
18
|
|
19
19
|
Assuming you've setup your models with Mobility's `translates` directives, you can use the `mobility_text_field` and `mobility_text_area` field types:
|
20
20
|
|
@@ -36,10 +36,26 @@ By default Trestle Mobility uses `I18n.available_locales` to generate the form f
|
|
36
36
|
mobility_text_field :title, locales: %w(nl de fr)
|
37
37
|
```
|
38
38
|
|
39
|
-
Quoting
|
39
|
+
Quoting Mobility's README:
|
40
40
|
|
41
41
|
> (Note however that Mobility will complain if you have I18n.enforce_available_locales set to true and you try accessing a locale not present in I18n.available_locales; set it to false if you want to allow any locale.)
|
42
42
|
|
43
|
+
### Default language selection
|
44
|
+
|
45
|
+
Trestle Mobility allows you to specify the language that is selected by default. This is possible on an application-wide basis but also per field.
|
46
|
+
|
47
|
+
To set the default language that should be selected for all fields, add the following line to your Trestle initializer:
|
48
|
+
|
49
|
+
```ruby
|
50
|
+
config.mobility.selected = "nl"
|
51
|
+
```
|
52
|
+
|
53
|
+
Or specify it per field:
|
54
|
+
|
55
|
+
```ruby
|
56
|
+
mobility_text_field :subtitle, selected: "nl"
|
57
|
+
```
|
58
|
+
|
43
59
|
## Installation
|
44
60
|
|
45
61
|
These instructions assume you have a working Trestle application. To integrate trestle-mobility, first add it to your application's Gemfile:
|
@@ -0,0 +1,46 @@
|
|
1
|
+
Trestle.ready(function() {
|
2
|
+
function init() {
|
3
|
+
$('.mobility').each(function() {
|
4
|
+
new Mobility(this);
|
5
|
+
})
|
6
|
+
}
|
7
|
+
|
8
|
+
function Mobility (element) {
|
9
|
+
var element = $(element);
|
10
|
+
var activeLocale = element.data('active');
|
11
|
+
var button = element.find('.mobility-active');
|
12
|
+
var inputFields = element.find('.mobility-field');
|
13
|
+
var dropdownItems = element.find('.dropdown-item');
|
14
|
+
|
15
|
+
function toggle (flag) {
|
16
|
+
$(inputFields).each(function() {
|
17
|
+
var field = $(this);
|
18
|
+
var active = field.data('locale') !== activeLocale;
|
19
|
+
|
20
|
+
field.toggleClass('hidden', active)
|
21
|
+
})
|
22
|
+
|
23
|
+
$(dropdownItems).each(function() {
|
24
|
+
var field = $(this);
|
25
|
+
var active = field.data('locale') === activeLocale;
|
26
|
+
|
27
|
+
field.toggleClass('active', active)
|
28
|
+
})
|
29
|
+
|
30
|
+
if (flag) {
|
31
|
+
button.text(flag);
|
32
|
+
}
|
33
|
+
}
|
34
|
+
|
35
|
+
element.find('.dropdown-item').on('click', function () {
|
36
|
+
var item = $(this);
|
37
|
+
activeLocale = item.data('locale');
|
38
|
+
|
39
|
+
toggle(item.text());
|
40
|
+
});
|
41
|
+
|
42
|
+
toggle()
|
43
|
+
}
|
44
|
+
|
45
|
+
init();
|
46
|
+
});
|
@@ -1,17 +1,13 @@
|
|
1
|
-
<div>
|
2
|
-
<
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
<div class="input-group mobility" data-active="<%= selected %>">
|
2
|
+
<button type="button" class="btn btn-default dropdown-toggle input-group-addon" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
3
|
+
<span class="mobility-active"><%= "#{EmojiFlag.new(selected)} #{selected.upcase}" %></span> <span class="caret"></span>
|
4
|
+
</button>
|
5
|
+
<ul class="dropdown-menu">
|
6
|
+
<% locales.each do |locale| %>
|
7
|
+
<li><a href="#<%= "#{field_name}_#{locale}" %>" class="dropdown-item" data-locale="<%= locale %>"><%= "#{EmojiFlag.new(locale)} #{locale.upcase}" %></a></li>
|
7
8
|
<% end %>
|
8
9
|
</ul>
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
<div role="tabpanel" class="tab-pane<%= " active" if index.zero? %>" id="<%= "#{field_name}_#{locale}" %>">
|
13
|
-
<%= form.text_area "#{field_name}_#{locale}", label: false, placeholder: "#{field_name.capitalize} (#{locale.upcase})", rows: rows %>
|
14
|
-
</div>
|
15
|
-
<% end %>
|
16
|
-
</div>
|
10
|
+
<% locales.each do |locale, index| %>
|
11
|
+
<%= form.raw_text_area "#{field_name}_#{locale}", class: "form-control mobility-field#{locale == selected ? '' : ' hidden'}", placeholder: "#{field_name.to_s.humanize} (#{locale.upcase})", rows: rows, data: { locale: locale } %>
|
12
|
+
<% end %>
|
17
13
|
</div>
|
@@ -1,17 +1,15 @@
|
|
1
|
-
<div>
|
2
|
-
<
|
3
|
-
|
4
|
-
<
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
<% locales.each.with_index do |locale, index| %>
|
12
|
-
<div role="tabpanel" class="tab-pane<%= " active" if index.zero? %>" id="<%= "#{field_name}_#{locale}" %>">
|
13
|
-
<%= form.text_field "#{field_name}_#{locale}", label: false, placeholder: "#{field_name.capitalize} (#{locale.upcase})" %>
|
14
|
-
</div>
|
15
|
-
<% end %>
|
1
|
+
<div class="input-group mobility" data-active="<%= selected %>">
|
2
|
+
<div class="input-group-btn">
|
3
|
+
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
4
|
+
<span class="mobility-active"><%= "#{EmojiFlag.new(selected)} #{selected.upcase}" %></span> <span class="caret"></span>
|
5
|
+
</button>
|
6
|
+
<ul class="dropdown-menu">
|
7
|
+
<% locales.each do |locale| %>
|
8
|
+
<li><a href="#<%= "#{field_name}_#{locale}" %>" class="dropdown-item" data-locale="<%= locale %>"><%= "#{EmojiFlag.new(locale)} #{locale.upcase}" %></a></li>
|
9
|
+
<% end %>
|
10
|
+
</ul>
|
16
11
|
</div>
|
12
|
+
<% locales.each do |locale| %>
|
13
|
+
<%= form.raw_text_field "#{field_name}_#{locale}", class: "form-control mobility-field#{locale == selected ? '' : ' hidden'}", placeholder: "#{field_name.to_s.humanize} (#{locale.upcase})", data: { locale: locale } %>
|
14
|
+
<% end %>
|
17
15
|
</div>
|
@@ -2,6 +2,10 @@ require "trestle/mobility/text_area"
|
|
2
2
|
require "trestle/mobility/text_field"
|
3
3
|
|
4
4
|
Trestle.configure do |config|
|
5
|
+
config.hook(:javascripts) do
|
6
|
+
javascript_include_tag('trestle/mobility_fields.js')
|
7
|
+
end
|
8
|
+
|
5
9
|
config.form_field :mobility_text_area, Trestle::Mobility::TextArea
|
6
10
|
config.form_field :mobility_text_field, Trestle::Mobility::TextField
|
7
11
|
end
|
@@ -4,10 +4,16 @@ module Trestle
|
|
4
4
|
def field
|
5
5
|
instance = builder.object
|
6
6
|
locales = options[:locales] || I18n.available_locales.sort
|
7
|
+
selected = options[:selected] || Trestle.config.mobility.selected || locales.first
|
7
8
|
rows = options[:rows] || 5
|
8
9
|
|
9
10
|
@template.render partial: "trestle/mobility/text_area",
|
10
|
-
locals: {
|
11
|
+
locals: {
|
12
|
+
field_name: name,
|
13
|
+
locales: locales,
|
14
|
+
selected: selected,
|
15
|
+
rows: rows
|
16
|
+
}
|
11
17
|
end
|
12
18
|
end
|
13
19
|
end
|
@@ -4,9 +4,14 @@ module Trestle
|
|
4
4
|
def field
|
5
5
|
instance = builder.object
|
6
6
|
locales = options[:locales] || I18n.available_locales.sort
|
7
|
+
selected = options[:selected] || Trestle.config.mobility.selected || locales.first
|
7
8
|
|
8
9
|
@template.render partial: "trestle/mobility/text_field",
|
9
|
-
locals: {
|
10
|
+
locals: {
|
11
|
+
field_name: name,
|
12
|
+
locales: locales,
|
13
|
+
selected: selected
|
14
|
+
}
|
10
15
|
end
|
11
16
|
end
|
12
17
|
end
|
data/lib/trestle/mobility.rb
CHANGED
data/screenshot.png
CHANGED
Binary file
|
data/trestle-mobility.gemspec
CHANGED
@@ -24,6 +24,7 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.require_paths = ["lib"]
|
25
25
|
|
26
26
|
spec.add_dependency "emoji_flag", "~> 0.1"
|
27
|
+
spec.add_dependency "mobility", "~> 0.8"
|
27
28
|
|
28
29
|
spec.add_development_dependency "bundler", "~> 2.0"
|
29
30
|
spec.add_development_dependency "rake", "~> 10.0"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trestle-mobility
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Venneman
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-04-
|
11
|
+
date: 2019-04-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: emoji_flag
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0.1'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: mobility
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.8'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.8'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: bundler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -79,12 +93,14 @@ files:
|
|
79
93
|
- LICENSE.md
|
80
94
|
- README.md
|
81
95
|
- Rakefile
|
96
|
+
- app/assets/javascript/trestle/mobility_fields.js
|
82
97
|
- app/views/trestle/mobility/_text_area.html.erb
|
83
98
|
- app/views/trestle/mobility/_text_field.html.erb
|
84
99
|
- bin/console
|
85
100
|
- bin/setup
|
86
101
|
- config/initializers/trestle.rb
|
87
102
|
- lib/trestle/mobility.rb
|
103
|
+
- lib/trestle/mobility/configuration.rb
|
88
104
|
- lib/trestle/mobility/engine.rb
|
89
105
|
- lib/trestle/mobility/text_area.rb
|
90
106
|
- lib/trestle/mobility/text_field.rb
|