matestack-ui-core 1.1.0 → 1.4.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 +801 -13
 - data/app/concepts/matestack/ui/core/cable/cable.haml +1 -1
 - data/app/concepts/matestack/ui/core/collection/helper.rb +7 -1
 - data/app/concepts/matestack/ui/core/component/base.rb +1 -1
 - data/app/concepts/matestack/ui/core/form/checkbox/base.rb +120 -0
 - data/app/concepts/matestack/ui/core/form/checkbox/checkbox.js +15 -0
 - data/app/concepts/matestack/ui/core/form/checkbox/checkbox.rb +7 -70
 - data/app/concepts/matestack/ui/core/form/checkbox/mixin.js +80 -0
 - data/app/concepts/matestack/ui/core/form/form.js +15 -46
 - data/app/concepts/matestack/ui/core/form/input/base.rb +75 -0
 - data/app/concepts/matestack/ui/core/form/input/input.js +15 -0
 - data/app/concepts/matestack/ui/core/form/input/input.rb +8 -52
 - data/app/concepts/matestack/ui/core/form/input/mixin.js +55 -0
 - data/app/concepts/matestack/ui/core/form/radio/base.rb +90 -0
 - data/app/concepts/matestack/ui/core/form/radio/mixin.js +62 -0
 - data/app/concepts/matestack/ui/core/form/radio/radio.js +15 -0
 - data/app/concepts/matestack/ui/core/form/radio/radio.rb +7 -62
 - data/app/concepts/matestack/ui/core/form/select/base.rb +98 -0
 - data/app/concepts/matestack/ui/core/form/select/mixin.js +58 -0
 - data/app/concepts/matestack/ui/core/form/select/select.js +15 -0
 - data/app/concepts/matestack/ui/core/form/select/select.rb +11 -60
 - data/app/concepts/matestack/ui/core/form/submit/base.rb +12 -0
 - data/app/concepts/matestack/ui/core/form/submit/submit.js +19 -0
 - data/app/concepts/matestack/ui/core/form/submit/submit.rb +9 -6
 - data/app/concepts/matestack/ui/core/form/textarea/base.rb +49 -0
 - data/app/concepts/matestack/ui/core/form/textarea/mixin.js +41 -0
 - data/app/concepts/matestack/ui/core/form/textarea/textarea.js +15 -0
 - data/app/concepts/matestack/ui/core/form/textarea/textarea.rb +10 -21
 - data/app/concepts/matestack/ui/core/js/core.js +11 -0
 - data/app/concepts/matestack/ui/core/{form/submit/submit.haml → select/select.haml} +1 -1
 - data/app/concepts/matestack/ui/core/select/select.rb +7 -0
 - data/app/concepts/matestack/ui/core/view/view.rb +2 -2
 - data/app/helpers/matestack/ui/core/application_helper.rb +2 -2
 - data/app/javascript/matestack-ui-core/index.js +12 -2
 - data/app/lib/matestack/ui/core/has_view_context.rb +4 -2
 - data/app/lib/matestack/ui/core/rendering/main_renderer.rb +4 -1
 - data/lib/matestack/ui/core/components.rb +2 -0
 - data/lib/matestack/ui/core/version.rb +1 -1
 - data/vendor/assets/javascripts/dist/matestack-ui-core.js +611 -55
 - data/vendor/assets/javascripts/dist/matestack-ui-core.js.map +1 -1
 - data/vendor/assets/javascripts/dist/matestack-ui-core.min.js +1 -1
 - data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.LICENSE.txt +5 -12
 - data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.br +0 -0
 - data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.gz +0 -0
 - data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map +1 -1
 - data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map.br +0 -0
 - data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map.gz +0 -0
 - metadata +31 -16
 - data/app/concepts/matestack/ui/core/form/select/select.haml +0 -9
 
| 
         @@ -0,0 +1,58 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            const formSelectMixin = {
         
     | 
| 
      
 2 
     | 
    
         
            +
              methods: {
         
     | 
| 
      
 3 
     | 
    
         
            +
                initialize: function(){
         
     | 
| 
      
 4 
     | 
    
         
            +
                  const self = this
         
     | 
| 
      
 5 
     | 
    
         
            +
                  let data = {};
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                  for (let key in self.$refs) {
         
     | 
| 
      
 8 
     | 
    
         
            +
                    let initValue = self.$refs[key]["attributes"]["init-value"];
         
     | 
| 
      
 9 
     | 
    
         
            +
                    let valueType = self.$refs[key]["attributes"]["value-type"];
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                    if (key.startsWith("select.")) {
         
     | 
| 
      
 12 
     | 
    
         
            +
                      if (key.startsWith("select.multiple.")) {
         
     | 
| 
      
 13 
     | 
    
         
            +
                        if (initValue) {
         
     | 
| 
      
 14 
     | 
    
         
            +
                          data[key.replace("select.multiple.", "")] = JSON.parse(initValue["value"]);
         
     | 
| 
      
 15 
     | 
    
         
            +
                          self.afterInitialize(JSON.parse(initValue["value"]))
         
     | 
| 
      
 16 
     | 
    
         
            +
                        } else {
         
     | 
| 
      
 17 
     | 
    
         
            +
                          data[key.replace("select.multiple.", "")] = [];
         
     | 
| 
      
 18 
     | 
    
         
            +
                          self.afterInitialize([])
         
     | 
| 
      
 19 
     | 
    
         
            +
                        }
         
     | 
| 
      
 20 
     | 
    
         
            +
                      } else {
         
     | 
| 
      
 21 
     | 
    
         
            +
                        if (initValue) {
         
     | 
| 
      
 22 
     | 
    
         
            +
                          if (valueType && valueType["value"] == "Integer") {
         
     | 
| 
      
 23 
     | 
    
         
            +
                            data[key.replace("select.", "")] = parseInt(initValue["value"]);
         
     | 
| 
      
 24 
     | 
    
         
            +
                            self.afterInitialize(parseInt(initValue["value"]))
         
     | 
| 
      
 25 
     | 
    
         
            +
                          } else {
         
     | 
| 
      
 26 
     | 
    
         
            +
                            data[key.replace("select.", "")] = initValue["value"];
         
     | 
| 
      
 27 
     | 
    
         
            +
                            self.afterInitialize(initValue["value"])
         
     | 
| 
      
 28 
     | 
    
         
            +
                          }
         
     | 
| 
      
 29 
     | 
    
         
            +
                        } else {
         
     | 
| 
      
 30 
     | 
    
         
            +
                          data[key.replace("select.", "")] = null;
         
     | 
| 
      
 31 
     | 
    
         
            +
                          self.afterInitialize(null)
         
     | 
| 
      
 32 
     | 
    
         
            +
                        }
         
     | 
| 
      
 33 
     | 
    
         
            +
                      }
         
     | 
| 
      
 34 
     | 
    
         
            +
                    }
         
     | 
| 
      
 35 
     | 
    
         
            +
                  }
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                  //without the timeout it's somehow not working
         
     | 
| 
      
 38 
     | 
    
         
            +
                  setTimeout(function () {
         
     | 
| 
      
 39 
     | 
    
         
            +
                    Object.assign(self.$parent.data, data);
         
     | 
| 
      
 40 
     | 
    
         
            +
                    self.$forceUpdate()
         
     | 
| 
      
 41 
     | 
    
         
            +
                  }, 1);
         
     | 
| 
      
 42 
     | 
    
         
            +
                },
         
     | 
| 
      
 43 
     | 
    
         
            +
                inputChanged: function (key) {
         
     | 
| 
      
 44 
     | 
    
         
            +
                  this.$parent.resetErrors(key);
         
     | 
| 
      
 45 
     | 
    
         
            +
                  this.$forceUpdate();
         
     | 
| 
      
 46 
     | 
    
         
            +
                },
         
     | 
| 
      
 47 
     | 
    
         
            +
                afterInitialize: function(value){
         
     | 
| 
      
 48 
     | 
    
         
            +
                  // can be used in the main component for further initialization steps
         
     | 
| 
      
 49 
     | 
    
         
            +
                },
         
     | 
| 
      
 50 
     | 
    
         
            +
                setValue: function (value){
         
     | 
| 
      
 51 
     | 
    
         
            +
                  this.$parent.data[this.componentConfig["key"]] = value
         
     | 
| 
      
 52 
     | 
    
         
            +
                  this.$forceUpdate();
         
     | 
| 
      
 53 
     | 
    
         
            +
                }
         
     | 
| 
      
 54 
     | 
    
         
            +
              }
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
            }
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            export default formSelectMixin
         
     | 
| 
         @@ -0,0 +1,15 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            import Vue from "vue/dist/vue.esm";
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            import formSelectMixin from "./mixin";
         
     | 
| 
      
 4 
     | 
    
         
            +
            import componentMixin from "../../component/component";
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            const componentDef = {
         
     | 
| 
      
 7 
     | 
    
         
            +
              mixins: [componentMixin, formSelectMixin],
         
     | 
| 
      
 8 
     | 
    
         
            +
              data() {
         
     | 
| 
      
 9 
     | 
    
         
            +
                return {};
         
     | 
| 
      
 10 
     | 
    
         
            +
              }
         
     | 
| 
      
 11 
     | 
    
         
            +
            }
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            let component = Vue.component("matestack-ui-core-form-select", componentDef);
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            export default componentDef;
         
     | 
| 
         @@ -1,68 +1,19 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require_relative ' 
     | 
| 
       2 
     | 
    
         
            -
            require_relative '../has_errors'
         
     | 
| 
       3 
     | 
    
         
            -
            module Matestack::Ui::Core::Form::Select
         
     | 
| 
       4 
     | 
    
         
            -
              class Select < Matestack::Ui::Core::Component::Static
         
     | 
| 
       5 
     | 
    
         
            -
                include Matestack::Ui::Core::Form::Utils
         
     | 
| 
       6 
     | 
    
         
            -
                include Matestack::Ui::Core::Form::HasErrors
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
                html_attributes :autofocus, :disabled, :form, :multiple, :name, :required, :size
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
                requires :key
         
     | 
| 
       11 
     | 
    
         
            -
                optional :multiple, :init, :placeholder, :disabled_values,
         
     | 
| 
       12 
     | 
    
         
            -
                  for: { as: :input_for }, 
         
     | 
| 
       13 
     | 
    
         
            -
                  label: { as: :input_label }, 
         
     | 
| 
       14 
     | 
    
         
            -
                  options: { as: :select_options }
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
                def vue_attributes
         
     | 
| 
       17 
     | 
    
         
            -
                  (options[:attributes] || {}).merge({
         
     | 
| 
       18 
     | 
    
         
            -
                    "@change": change_event,
         
     | 
| 
       19 
     | 
    
         
            -
                    ref: vue_ref,
         
     | 
| 
       20 
     | 
    
         
            -
                    'init-value': init_value || [],
         
     | 
| 
       21 
     | 
    
         
            -
                    'v-bind:class': "{ '#{input_error_class}': #{error_key} }",
         
     | 
| 
       22 
     | 
    
         
            -
                    'value-type': value_type,
         
     | 
| 
       23 
     | 
    
         
            -
                    "#{v_model_type}": input_key,
         
     | 
| 
       24 
     | 
    
         
            -
                  })
         
     | 
| 
       25 
     | 
    
         
            -
                end
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
                def vue_ref
         
     | 
| 
       28 
     | 
    
         
            -
                  "select#{'.multiple' if multiple}.#{attr_key}"
         
     | 
| 
       29 
     | 
    
         
            -
                end
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
                def value_type
         
     | 
| 
       32 
     | 
    
         
            -
                  item_value(select_options.first).is_a?(Integer) ? Integer : nil
         
     | 
| 
       33 
     | 
    
         
            -
                end
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
                def item_value(item)
         
     | 
| 
       36 
     | 
    
         
            -
                  item.is_a?(Array) ? item.last : item
         
     | 
| 
       37 
     | 
    
         
            -
                end
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
                def item_name(item)
         
     | 
| 
       40 
     | 
    
         
            -
                  "#{attr_key}_#{item.is_a?(Array) ? item.first : item}"
         
     | 
| 
       41 
     | 
    
         
            -
                end
         
     | 
| 
      
 1 
     | 
    
         
            +
            require_relative './base'
         
     | 
| 
       42 
2 
     | 
    
         | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
                end
         
     | 
| 
      
 3 
     | 
    
         
            +
            module Matestack::Ui::Core::Form::Select
         
     | 
| 
      
 4 
     | 
    
         
            +
              class Select < Base
         
     | 
| 
       46 
5 
     | 
    
         | 
| 
       47 
     | 
    
         
            -
                 
     | 
| 
       48 
     | 
    
         
            -
                  item.is_a?(Array) ? item.first : item
         
     | 
| 
       49 
     | 
    
         
            -
                end
         
     | 
| 
      
 6 
     | 
    
         
            +
                vue_js_component_name "matestack-ui-core-form-select"
         
     | 
| 
       50 
7 
     | 
    
         | 
| 
       51 
     | 
    
         
            -
                def  
     | 
| 
       52 
     | 
    
         
            -
                   
     | 
| 
       53 
     | 
    
         
            -
                     
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
      
 8 
     | 
    
         
            +
                def response
         
     | 
| 
      
 9 
     | 
    
         
            +
                  div class: "matestack-ui-core-form-select" do
         
     | 
| 
      
 10 
     | 
    
         
            +
                    label text: input_label if input_label
         
     | 
| 
      
 11 
     | 
    
         
            +
                    select select_attributes do
         
     | 
| 
      
 12 
     | 
    
         
            +
                      render_options
         
     | 
| 
      
 13 
     | 
    
         
            +
                    end
         
     | 
| 
      
 14 
     | 
    
         
            +
                    render_errors
         
     | 
| 
       56 
15 
     | 
    
         
             
                  end
         
     | 
| 
       57 
16 
     | 
    
         
             
                end
         
     | 
| 
       58 
17 
     | 
    
         | 
| 
       59 
     | 
    
         
            -
                def change_event
         
     | 
| 
       60 
     | 
    
         
            -
                  "inputChanged('#{attr_key}')"
         
     | 
| 
       61 
     | 
    
         
            -
                end
         
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
       63 
     | 
    
         
            -
                def id_for_item(value)
         
     | 
| 
       64 
     | 
    
         
            -
                  "#{html_attributes[:id]}_#{value}"
         
     | 
| 
       65 
     | 
    
         
            -
                end
         
     | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
       67 
18 
     | 
    
         
             
              end
         
     | 
| 
       68 
19 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,12 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Matestack::Ui::Core::Form::Submit
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Base < Matestack::Ui::Core::Component::Dynamic
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
                def submit_attributes
         
     | 
| 
      
 5 
     | 
    
         
            +
                  html_attributes.merge!({
         
     | 
| 
      
 6 
     | 
    
         
            +
                    "@click.prevent": "$parent.perform",
         
     | 
| 
      
 7 
     | 
    
         
            +
                    "v-bind:class": "{ 'loading': $parent.loading }"
         
     | 
| 
      
 8 
     | 
    
         
            +
                  })
         
     | 
| 
      
 9 
     | 
    
         
            +
                end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,19 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            import Vue from "vue/dist/vue.esm";
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            import componentMixin from "../../component/component";
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            const componentDef = {
         
     | 
| 
      
 6 
     | 
    
         
            +
              mixins: [componentMixin],
         
     | 
| 
      
 7 
     | 
    
         
            +
              data() {
         
     | 
| 
      
 8 
     | 
    
         
            +
                return {};
         
     | 
| 
      
 9 
     | 
    
         
            +
              },
         
     | 
| 
      
 10 
     | 
    
         
            +
              methods: {
         
     | 
| 
      
 11 
     | 
    
         
            +
                loading: function(){
         
     | 
| 
      
 12 
     | 
    
         
            +
                  return this.$parent.loading;
         
     | 
| 
      
 13 
     | 
    
         
            +
                }
         
     | 
| 
      
 14 
     | 
    
         
            +
              }
         
     | 
| 
      
 15 
     | 
    
         
            +
            }
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            let component = Vue.component("matestack-ui-core-form-submit", componentDef);
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            export default componentDef;
         
     | 
| 
         @@ -1,11 +1,14 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative './base'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
       1 
3 
     | 
    
         
             
            module Matestack::Ui::Core::Form::Submit
         
     | 
| 
       2 
     | 
    
         
            -
              class Submit <  
     | 
| 
      
 4 
     | 
    
         
            +
              class Submit < Base
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                vue_js_component_name "matestack-ui-core-form-submit"
         
     | 
| 
       3 
7 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
                def  
     | 
| 
       5 
     | 
    
         
            -
                   
     | 
| 
       6 
     | 
    
         
            -
                     
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
                  })
         
     | 
| 
      
 8 
     | 
    
         
            +
                def response
         
     | 
| 
      
 9 
     | 
    
         
            +
                  span attributes: submit_attributes do
         
     | 
| 
      
 10 
     | 
    
         
            +
                    yield_components
         
     | 
| 
      
 11 
     | 
    
         
            +
                  end
         
     | 
| 
       9 
12 
     | 
    
         
             
                end
         
     | 
| 
       10 
13 
     | 
    
         | 
| 
       11 
14 
     | 
    
         
             
              end
         
     | 
| 
         @@ -0,0 +1,49 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative '../utils'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require_relative '../has_errors'
         
     | 
| 
      
 3 
     | 
    
         
            +
            module Matestack::Ui::Core::Form::Textarea
         
     | 
| 
      
 4 
     | 
    
         
            +
              class Base < Matestack::Ui::Core::Component::Dynamic
         
     | 
| 
      
 5 
     | 
    
         
            +
                include Matestack::Ui::Core::Form::Utils
         
     | 
| 
      
 6 
     | 
    
         
            +
                include Matestack::Ui::Core::Form::HasErrors
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                requires :key
         
     | 
| 
      
 9 
     | 
    
         
            +
                optional :multiple, :init, for: { as: :input_for }, label: { as: :input_label }
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                html_attributes :autofocus, :cols, :dirname, :disabled, :form, :maxlength,
         
     | 
| 
      
 12 
     | 
    
         
            +
                  :name, :placeholder, :readonly, :required, :rows, :wrap
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                def setup
         
     | 
| 
      
 15 
     | 
    
         
            +
                  @component_config[:init_value] = init_value
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                def component_id
         
     | 
| 
      
 19 
     | 
    
         
            +
                  "textarea-component-for-#{attr_key}"
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                def input_key
         
     | 
| 
      
 23 
     | 
    
         
            +
                  "$parent.data[\"#{key}\"]"
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                def error_key
         
     | 
| 
      
 27 
     | 
    
         
            +
                  "$parent.errors[\"#{key}\"]"
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                def change_event
         
     | 
| 
      
 31 
     | 
    
         
            +
                  "inputChanged('#{attr_key}')"
         
     | 
| 
      
 32 
     | 
    
         
            +
                end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                def textarea_attributes
         
     | 
| 
      
 35 
     | 
    
         
            +
                  html_attributes.merge(attributes: vue_attributes)
         
     | 
| 
      
 36 
     | 
    
         
            +
                end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                def vue_attributes
         
     | 
| 
      
 39 
     | 
    
         
            +
                  (options[:attributes] || {}).merge({
         
     | 
| 
      
 40 
     | 
    
         
            +
                    'v-model': input_key,
         
     | 
| 
      
 41 
     | 
    
         
            +
                    '@change': change_event,
         
     | 
| 
      
 42 
     | 
    
         
            +
                    'v-bind:class': "{ '#{input_error_class}': #{error_key} }",
         
     | 
| 
      
 43 
     | 
    
         
            +
                    "init-value": init_value,
         
     | 
| 
      
 44 
     | 
    
         
            +
                    ref: "input.#{attr_key}",
         
     | 
| 
      
 45 
     | 
    
         
            +
                  })
         
     | 
| 
      
 46 
     | 
    
         
            +
                end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
              end
         
     | 
| 
      
 49 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,41 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            const formTextareaMixin = {
         
     | 
| 
      
 2 
     | 
    
         
            +
              methods: {
         
     | 
| 
      
 3 
     | 
    
         
            +
                initialize: function(){
         
     | 
| 
      
 4 
     | 
    
         
            +
                  const self = this
         
     | 
| 
      
 5 
     | 
    
         
            +
                  let data = {};
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                  for (let key in this.$refs) {
         
     | 
| 
      
 8 
     | 
    
         
            +
                    let initValue = this.$refs[key]["attributes"]["init-value"];
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                    if (initValue) {
         
     | 
| 
      
 11 
     | 
    
         
            +
                      data[key.replace("input.", "")] = initValue["value"];
         
     | 
| 
      
 12 
     | 
    
         
            +
                      Object.assign(self.$parent.data, data);
         
     | 
| 
      
 13 
     | 
    
         
            +
                      self.afterInitialize(initValue["value"])
         
     | 
| 
      
 14 
     | 
    
         
            +
                    } else {
         
     | 
| 
      
 15 
     | 
    
         
            +
                      data[key.replace("input.", "")] = null;
         
     | 
| 
      
 16 
     | 
    
         
            +
                      Object.assign(self.$parent.data, data);
         
     | 
| 
      
 17 
     | 
    
         
            +
                      self.afterInitialize(null)
         
     | 
| 
      
 18 
     | 
    
         
            +
                    }
         
     | 
| 
      
 19 
     | 
    
         
            +
                  }
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                  //without the timeout it's somehow not working
         
     | 
| 
      
 22 
     | 
    
         
            +
                  setTimeout(function () {
         
     | 
| 
      
 23 
     | 
    
         
            +
                    self.$forceUpdate()
         
     | 
| 
      
 24 
     | 
    
         
            +
                  }, 1);
         
     | 
| 
      
 25 
     | 
    
         
            +
                },
         
     | 
| 
      
 26 
     | 
    
         
            +
                inputChanged: function (key) {
         
     | 
| 
      
 27 
     | 
    
         
            +
                  this.$parent.resetErrors(key);
         
     | 
| 
      
 28 
     | 
    
         
            +
                  this.$forceUpdate();
         
     | 
| 
      
 29 
     | 
    
         
            +
                },
         
     | 
| 
      
 30 
     | 
    
         
            +
                afterInitialize: function(value){
         
     | 
| 
      
 31 
     | 
    
         
            +
                  // can be used in the main component for further initialization steps
         
     | 
| 
      
 32 
     | 
    
         
            +
                },
         
     | 
| 
      
 33 
     | 
    
         
            +
                setValue: function (value){
         
     | 
| 
      
 34 
     | 
    
         
            +
                  this.$parent.data[this.componentConfig["key"]] = value
         
     | 
| 
      
 35 
     | 
    
         
            +
                  this.$forceUpdate();
         
     | 
| 
      
 36 
     | 
    
         
            +
                }
         
     | 
| 
      
 37 
     | 
    
         
            +
              }
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
            }
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
            export default formTextareaMixin
         
     | 
| 
         @@ -0,0 +1,15 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            import Vue from "vue/dist/vue.esm";
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            import formTextareaMixin from "./mixin";
         
     | 
| 
      
 4 
     | 
    
         
            +
            import componentMixin from "../../component/component";
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            const componentDef = {
         
     | 
| 
      
 7 
     | 
    
         
            +
              mixins: [componentMixin, formTextareaMixin],
         
     | 
| 
      
 8 
     | 
    
         
            +
              data() {
         
     | 
| 
      
 9 
     | 
    
         
            +
                return {};
         
     | 
| 
      
 10 
     | 
    
         
            +
              }
         
     | 
| 
      
 11 
     | 
    
         
            +
            }
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            let component = Vue.component("matestack-ui-core-form-textarea", componentDef);
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            export default componentDef;
         
     | 
| 
         @@ -1,28 +1,17 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require_relative ' 
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
      
 1 
     | 
    
         
            +
            require_relative './base'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
       3 
3 
     | 
    
         
             
            module Matestack::Ui::Core::Form::Textarea
         
     | 
| 
       4 
     | 
    
         
            -
              class Textarea <  
     | 
| 
       5 
     | 
    
         
            -
                include Matestack::Ui::Core::Form::Utils
         
     | 
| 
       6 
     | 
    
         
            -
                include Matestack::Ui::Core::Form::HasErrors
         
     | 
| 
      
 4 
     | 
    
         
            +
              class Textarea < Base
         
     | 
| 
       7 
5 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
                 
     | 
| 
       9 
     | 
    
         
            -
                optional :multiple, :init, for: { as: :input_for }, label: { as: :input_label }
         
     | 
| 
      
 6 
     | 
    
         
            +
                vue_js_component_name "matestack-ui-core-form-textarea"
         
     | 
| 
       10 
7 
     | 
    
         | 
| 
       11 
8 
     | 
    
         
             
                def response
         
     | 
| 
       12 
     | 
    
         
            -
                   
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
      
 9 
     | 
    
         
            +
                  div class: "matestack-ui-core-form-textarea" do
         
     | 
| 
      
 10 
     | 
    
         
            +
                    label text: input_label if input_label
         
     | 
| 
      
 11 
     | 
    
         
            +
                    textarea textarea_attributes
         
     | 
| 
      
 12 
     | 
    
         
            +
                    render_errors
         
     | 
| 
      
 13 
     | 
    
         
            +
                  end
         
     | 
| 
       15 
14 
     | 
    
         
             
                end
         
     | 
| 
       16 
15 
     | 
    
         | 
| 
       17 
     | 
    
         
            -
                def vue_attributes
         
     | 
| 
       18 
     | 
    
         
            -
                  (options[:attributes] || {}).merge({
         
     | 
| 
       19 
     | 
    
         
            -
                    'v-model': input_key,
         
     | 
| 
       20 
     | 
    
         
            -
                    '@change': "inputChanged('#{attr_key}')",
         
     | 
| 
       21 
     | 
    
         
            -
                    'v-bind:class': "{ '#{input_error_class}': #{error_key} }",
         
     | 
| 
       22 
     | 
    
         
            -
                    "init-value": init_value,
         
     | 
| 
       23 
     | 
    
         
            -
                    ref: "input.#{attr_key}",
         
     | 
| 
       24 
     | 
    
         
            -
                  })
         
     | 
| 
       25 
     | 
    
         
            -
                end
         
     | 
| 
       26 
     | 
    
         
            -
                
         
     | 
| 
       27 
16 
     | 
    
         
             
              end
         
     | 
| 
       28 
     | 
    
         
            -
            end
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -13,6 +13,17 @@ import anonymDynamicComponent from '../component/anonym-dynamic-component' 
     | 
|
| 
       13 
13 
     | 
    
         
             
            import transition from '../transition/transition'
         
     | 
| 
       14 
14 
     | 
    
         
             
            import action from '../action/action'
         
     | 
| 
       15 
15 
     | 
    
         
             
            import form from '../form/form'
         
     | 
| 
      
 16 
     | 
    
         
            +
            import formInput from '../form/input/input'
         
     | 
| 
      
 17 
     | 
    
         
            +
            import formInputMixin from '../form/input/mixin'
         
     | 
| 
      
 18 
     | 
    
         
            +
            import formSelect from '../form/select/select'
         
     | 
| 
      
 19 
     | 
    
         
            +
            import formSelectMixin from '../form/select/mixin'
         
     | 
| 
      
 20 
     | 
    
         
            +
            import formRadio from '../form/radio/radio'
         
     | 
| 
      
 21 
     | 
    
         
            +
            import formRadioMixin from '../form/radio/mixin'
         
     | 
| 
      
 22 
     | 
    
         
            +
            import formCheckbox from '../form/checkbox/checkbox'
         
     | 
| 
      
 23 
     | 
    
         
            +
            import formCheckboxMixin from '../form/checkbox/mixin'
         
     | 
| 
      
 24 
     | 
    
         
            +
            import formTextarea from '../form/textarea/textarea'
         
     | 
| 
      
 25 
     | 
    
         
            +
            import formTextareaMixin from '../form/textarea/mixin'
         
     | 
| 
      
 26 
     | 
    
         
            +
            import formSubmit from '../form/submit/submit'
         
     | 
| 
       16 
27 
     | 
    
         
             
            import onclick from '../onclick/onclick'
         
     | 
| 
       17 
28 
     | 
    
         
             
            import collectionContent from '../collection/content/content'
         
     | 
| 
       18 
29 
     | 
    
         
             
            import collectionFilter from '../collection/filter/filter'
         
     | 
| 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
      
 1 
     | 
    
         
            +
            require "cell/partial"
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            module Matestack::Ui::Core::View
         
     | 
| 
       4 
4 
     | 
    
         
             
              class View < Matestack::Ui::Core::Component::Static
         
     | 
| 
         @@ -15,7 +15,7 @@ module Matestack::Ui::Core::View 
     | 
|
| 
       15 
15 
     | 
    
         
             
                    controller.render_to_string view_path, layout: false, locals: locals
         
     | 
| 
       16 
16 
     | 
    
         
             
                  elsif partial_path
         
     | 
| 
       17 
17 
     | 
    
         
             
                    controller.render_to_string partial: partial_path, layout: false, locals: locals
         
     | 
| 
       18 
     | 
    
         
            -
                  else 
     | 
| 
      
 18 
     | 
    
         
            +
                  else
         
     | 
| 
       19 
19 
     | 
    
         
             
                    raise 'view or partial param missing for RailsView Component'
         
     | 
| 
       20 
20 
     | 
    
         
             
                  end
         
     | 
| 
       21 
21 
     | 
    
         
             
                end
         
     | 
| 
         @@ -102,8 +102,8 @@ module Matestack 
     | 
|
| 
       102 
102 
     | 
    
         
             
                      controller = (self.class <= ActionController::Base) ? self : @_controller
         
     | 
| 
       103 
103 
     | 
    
         
             
                      context = (options[:matestack_context] ||= {}).merge(controller: controller)
         
     | 
| 
       104 
104 
     | 
    
         
             
                      Matestack::Ui::Core::Component::Base
         
     | 
| 
       105 
     | 
    
         
            -
                        .new(options.merge(matestack_context: context))
         
     | 
| 
       106 
     | 
    
         
            -
                        .send(component, options.merge(matestack_context: context), &block).to_s
         
     | 
| 
      
 105 
     | 
    
         
            +
                        .new(options.merge(context: context, matestack_context: context))
         
     | 
| 
      
 106 
     | 
    
         
            +
                        .send(component, options.merge(context: context, matestack_context: context), &block).to_s
         
     | 
| 
       107 
107 
     | 
    
         
             
                    end
         
     | 
| 
       108 
108 
     | 
    
         
             
                  end
         
     | 
| 
       109 
109 
     | 
    
         
             
                end
         
     | 
| 
         @@ -5,6 +5,11 @@ import axios from 'axios' 
     | 
|
| 
       5 
5 
     | 
    
         
             
            // Import from app/concepts/matestack/ui/core:
         
     | 
| 
       6 
6 
     | 
    
         
             
            import matestackEventHub from '../../../app/concepts/matestack/ui/core/js/event-hub'
         
     | 
| 
       7 
7 
     | 
    
         
             
            import componentMixin from '../../../app/concepts/matestack/ui/core/component/component'
         
     | 
| 
      
 8 
     | 
    
         
            +
            import formInputMixin from '../../../app/concepts/matestack/ui/core/form/input/mixin'
         
     | 
| 
      
 9 
     | 
    
         
            +
            import formSelectMixin from '../../../app/concepts/matestack/ui/core/form/select/mixin'
         
     | 
| 
      
 10 
     | 
    
         
            +
            import formRadioMixin from '../../../app/concepts/matestack/ui/core/form/radio/mixin'
         
     | 
| 
      
 11 
     | 
    
         
            +
            import formCheckboxMixin from '../../../app/concepts/matestack/ui/core/form/checkbox/mixin'
         
     | 
| 
      
 12 
     | 
    
         
            +
            import formTextareaMixin from '../../../app/concepts/matestack/ui/core/form/textarea/mixin'
         
     | 
| 
       8 
13 
     | 
    
         
             
            import matestackUiCore from '../../../app/concepts/matestack/ui/core/js/core'
         
     | 
| 
       9 
14 
     | 
    
         | 
| 
       10 
15 
     | 
    
         
             
            import styles from './styles/index.scss'
         
     | 
| 
         @@ -14,9 +19,14 @@ const MatestackUiCore = { 
     | 
|
| 
       14 
19 
     | 
    
         
             
              Vuex,
         
     | 
| 
       15 
20 
     | 
    
         
             
              axios,
         
     | 
| 
       16 
21 
     | 
    
         
             
              matestackEventHub,
         
     | 
| 
       17 
     | 
    
         
            -
              componentMixin
         
     | 
| 
      
 22 
     | 
    
         
            +
              componentMixin,
         
     | 
| 
      
 23 
     | 
    
         
            +
              formInputMixin,
         
     | 
| 
      
 24 
     | 
    
         
            +
              formSelectMixin,
         
     | 
| 
      
 25 
     | 
    
         
            +
              formCheckboxMixin,
         
     | 
| 
      
 26 
     | 
    
         
            +
              formTextareaMixin,
         
     | 
| 
      
 27 
     | 
    
         
            +
              formRadioMixin
         
     | 
| 
       18 
28 
     | 
    
         
             
            }
         
     | 
| 
       19 
29 
     | 
    
         | 
| 
       20 
30 
     | 
    
         
             
            window.MatestackUiCore = MatestackUiCore
         
     | 
| 
       21 
31 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
            export default MatestackUiCore
         
     | 
| 
      
 32 
     | 
    
         
            +
            export default MatestackUiCore
         
     |