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
         |