glib-web 0.0.8 → 0.0.9
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/app/controllers/glib/home_controller.rb +23 -0
 - data/app/helpers/glib/json_ui/abstract_builder.rb +108 -0
 - data/app/helpers/glib/json_ui/action_builder.rb +76 -0
 - data/app/helpers/glib/{web → json_ui}/json_ui_helper.rb +2 -1
 - data/app/helpers/glib/json_ui/list_builders.rb +51 -0
 - data/app/helpers/glib/json_ui/menu_builder.rb +18 -0
 - data/app/helpers/glib/json_ui/page_helper.rb +74 -0
 - data/app/helpers/glib/json_ui/response_helper.rb +23 -0
 - data/app/helpers/glib/json_ui/table_builders.rb +51 -0
 - data/app/helpers/glib/json_ui/view_builder.rb +167 -0
 - data/app/views/json_ui/garage/actions/index.json.jbuilder +31 -19
 - data/app/views/json_ui/garage/forms/basic.json.jbuilder +2 -2
 - data/config/routes.rb +4 -2
 - metadata +11 -3
 - data/app/controllers/home_controller.rb +0 -21
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 3f1f2c691c60bbb4eaa96f531d11385e007d59a6
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: c86e3560a6c66421d717dd3b4527a041ad6e8109
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: d1e4c57ee97b85249b859605919eb50ada249aea3cd59618c59e2d6e9799e5f08cb5557c80513ac031b591177f6a57a481754e2f660af74bc4797c99e8b66e00
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 1245782f81ef3925b007b27384d6e8928a3ef68dffeb6f174e92371486078badb4d477b91057f588cdddcfc8d4db38ea091f9aaf4e2146a0d12b108190207631
         
     | 
| 
         @@ -0,0 +1,23 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Glib
         
     | 
| 
      
 2 
     | 
    
         
            +
              class HomeController < ApplicationController
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
                def json_ui_garage
         
     | 
| 
      
 5 
     | 
    
         
            +
                  @path_prefix = 'json_ui/garage'
         
     | 
| 
      
 6 
     | 
    
         
            +
                  @sample_image_url = 'https://cdn-images-1.medium.com/max/1200/1*Qc0XxYm-qAZL-7tjjlNfrg.png'
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                  # We can't use prepend_view_path because it affects the app, not the gem
         
     | 
| 
      
 9 
     | 
    
         
            +
                  path = "#{@path_prefix}/#{params[:path] || 'home/index'}"
         
     | 
| 
      
 10 
     | 
    
         
            +
                  render path
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                def json_ui_garage_url(options = {})
         
     | 
| 
      
 14 
     | 
    
         
            +
                  Glib::Web::Engine.routes.url_helpers.json_ui_garage_url(options.merge(
         
     | 
| 
      
 15 
     | 
    
         
            +
                    host: request.host, 
         
     | 
| 
      
 16 
     | 
    
         
            +
                    port: request.port, 
         
     | 
| 
      
 17 
     | 
    
         
            +
                    _render: params[:_render], format: params[:format])
         
     | 
| 
      
 18 
     | 
    
         
            +
                  )
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                helper_method :json_ui_garage_url
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,108 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Glib
         
     | 
| 
      
 2 
     | 
    
         
            +
              module JsonUi
         
     | 
| 
      
 3 
     | 
    
         
            +
                class AbstractBuilder
         
     | 
| 
      
 4 
     | 
    
         
            +
                  attr_reader :json, :page
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                  def initialize json, page
         
     | 
| 
      
 7 
     | 
    
         
            +
                    @json = json
         
     | 
| 
      
 8 
     | 
    
         
            +
                    @page = page
         
     | 
| 
      
 9 
     | 
    
         
            +
                  end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  private
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  def capitalize_first_letter_and_leave_others_alone(str)
         
     | 
| 
      
 14 
     | 
    
         
            +
                    str.slice(0,1).capitalize + str.slice(1..-1)
         
     | 
| 
      
 15 
     | 
    
         
            +
                  end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                  def add_singleton_element type, name, *args
         
     | 
| 
      
 18 
     | 
    
         
            +
                    name_components = name.to_s.split('_')
         
     | 
| 
      
 19 
     | 
    
         
            +
                    json.set! type, "#{name_components.join('/')}-v1" if type
         
     | 
| 
      
 20 
     | 
    
         
            +
                    args = [yield] if block_given?
         
     | 
| 
      
 21 
     | 
    
         
            +
                    "#{self.class.name}::#{name_components.map{ |str| capitalize_first_letter_and_leave_others_alone(str) }.join('::')}".constantize.new(json, @page).parse(*args)
         
     | 
| 
      
 22 
     | 
    
         
            +
                  end
         
     | 
| 
      
 23 
     | 
    
         
            +
                  
         
     | 
| 
      
 24 
     | 
    
         
            +
                  def add_element_to_array type, name, *args
         
     | 
| 
      
 25 
     | 
    
         
            +
                    json.child! do
         
     | 
| 
      
 26 
     | 
    
         
            +
                      add_singleton_element type, name, *args
         
     | 
| 
      
 27 
     | 
    
         
            +
                    end
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                class JsonUiElement
         
     | 
| 
      
 32 
     | 
    
         
            +
                  attr_reader :json, :page
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                  def initialize json, page
         
     | 
| 
      
 35 
     | 
    
         
            +
                    @json = json
         
     | 
| 
      
 36 
     | 
    
         
            +
                    @page = page
         
     | 
| 
      
 37 
     | 
    
         
            +
                  end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                  def parse args = {}
         
     | 
| 
      
 40 
     | 
    
         
            +
                    @args = args
         
     | 
| 
      
 41 
     | 
    
         
            +
                    
         
     | 
| 
      
 42 
     | 
    
         
            +
                    if args.is_a? Hash
         
     | 
| 
      
 43 
     | 
    
         
            +
                      args.each do |k, v|
         
     | 
| 
      
 44 
     | 
    
         
            +
                        send(k, v)
         
     | 
| 
      
 45 
     | 
    
         
            +
                      end
         
     | 
| 
      
 46 
     | 
    
         
            +
                    end
         
     | 
| 
      
 47 
     | 
    
         
            +
                  end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                  private
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                  def self.string propName
         
     | 
| 
      
 52 
     | 
    
         
            +
                    define_method(propName) do |value| 
         
     | 
| 
      
 53 
     | 
    
         
            +
                      json.set! propName, value&.to_s
         
     | 
| 
      
 54 
     | 
    
         
            +
                    end
         
     | 
| 
      
 55 
     | 
    
         
            +
                  end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                  def self.int propName
         
     | 
| 
      
 58 
     | 
    
         
            +
                    define_method(propName) do |value|
         
     | 
| 
      
 59 
     | 
    
         
            +
                      json.set! propName, value&.to_i
         
     | 
| 
      
 60 
     | 
    
         
            +
                    end
         
     | 
| 
      
 61 
     | 
    
         
            +
                  end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                  def self.float propName
         
     | 
| 
      
 64 
     | 
    
         
            +
                    define_method(propName) do |value|
         
     | 
| 
      
 65 
     | 
    
         
            +
                      json.set! propName, value&.to_f
         
     | 
| 
      
 66 
     | 
    
         
            +
                    end
         
     | 
| 
      
 67 
     | 
    
         
            +
                  end
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
                  def self.bool propName
         
     | 
| 
      
 70 
     | 
    
         
            +
                    define_method(propName) do |value|
         
     | 
| 
      
 71 
     | 
    
         
            +
                      json.set! propName, value == true
         
     | 
| 
      
 72 
     | 
    
         
            +
                    end
         
     | 
| 
      
 73 
     | 
    
         
            +
                  end
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                  def self.icon propName
         
     | 
| 
      
 76 
     | 
    
         
            +
                    define_method(propName) do |value| 
         
     | 
| 
      
 77 
     | 
    
         
            +
                      json.set!(propName) do
         
     | 
| 
      
 78 
     | 
    
         
            +
                        json.materialName value
         
     | 
| 
      
 79 
     | 
    
         
            +
                      end
         
     | 
| 
      
 80 
     | 
    
         
            +
                    end
         
     | 
| 
      
 81 
     | 
    
         
            +
                  end
         
     | 
| 
      
 82 
     | 
    
         
            +
                  
         
     | 
| 
      
 83 
     | 
    
         
            +
                  def self.action propName
         
     | 
| 
      
 84 
     | 
    
         
            +
                    define_method(propName) do |value| 
         
     | 
| 
      
 85 
     | 
    
         
            +
                      json.set!(propName) { value.call(page.action_builder) } 
         
     | 
| 
      
 86 
     | 
    
         
            +
                    end
         
     | 
| 
      
 87 
     | 
    
         
            +
                  end
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
                  def self.views propName
         
     | 
| 
      
 90 
     | 
    
         
            +
                    define_method(propName) do |value| 
         
     | 
| 
      
 91 
     | 
    
         
            +
                      json.set!(propName) { value.call(page.view_builder) } 
         
     | 
| 
      
 92 
     | 
    
         
            +
                    end
         
     | 
| 
      
 93 
     | 
    
         
            +
                  end
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
                  def self.array propName
         
     | 
| 
      
 96 
     | 
    
         
            +
                    define_method(propName) do |value| 
         
     | 
| 
      
 97 
     | 
    
         
            +
                      json.set! propName, value&.to_a
         
     | 
| 
      
 98 
     | 
    
         
            +
                    end
         
     | 
| 
      
 99 
     | 
    
         
            +
                  end
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                  def self.hash propName
         
     | 
| 
      
 102 
     | 
    
         
            +
                    define_method(propName) do |value|
         
     | 
| 
      
 103 
     | 
    
         
            +
                      json.set! propName, value
         
     | 
| 
      
 104 
     | 
    
         
            +
                    end
         
     | 
| 
      
 105 
     | 
    
         
            +
                  end
         
     | 
| 
      
 106 
     | 
    
         
            +
                end
         
     | 
| 
      
 107 
     | 
    
         
            +
              end
         
     | 
| 
      
 108 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,76 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Glib
         
     | 
| 
      
 2 
     | 
    
         
            +
              module JsonUi
         
     | 
| 
      
 3 
     | 
    
         
            +
                class ActionBuilder < AbstractBuilder
         
     | 
| 
      
 4 
     | 
    
         
            +
                  def method_missing m, *args
         
     | 
| 
      
 5 
     | 
    
         
            +
                    add_singleton_element 'action', m, *args
         
     | 
| 
      
 6 
     | 
    
         
            +
                  end
         
     | 
| 
      
 7 
     | 
    
         
            +
                  
         
     | 
| 
      
 8 
     | 
    
         
            +
                  class Action < JsonUiElement
         
     | 
| 
      
 9 
     | 
    
         
            +
                  end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  ### Action definitions
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  module Dialogs
         
     | 
| 
      
 14 
     | 
    
         
            +
                    class Alert < Action
         
     | 
| 
      
 15 
     | 
    
         
            +
                      string :message
         
     | 
| 
      
 16 
     | 
    
         
            +
                      action :onClose
         
     | 
| 
      
 17 
     | 
    
         
            +
                    end
         
     | 
| 
      
 18 
     | 
    
         
            +
                  
         
     | 
| 
      
 19 
     | 
    
         
            +
                    class Options < Action
         
     | 
| 
      
 20 
     | 
    
         
            +
                      string :message
         
     | 
| 
      
 21 
     | 
    
         
            +
                      
         
     | 
| 
      
 22 
     | 
    
         
            +
                      def buttons(block)
         
     | 
| 
      
 23 
     | 
    
         
            +
                        json.buttons do
         
     | 
| 
      
 24 
     | 
    
         
            +
                          block.call page.menu_builder
         
     | 
| 
      
 25 
     | 
    
         
            +
                        end
         
     | 
| 
      
 26 
     | 
    
         
            +
                      end
         
     | 
| 
      
 27 
     | 
    
         
            +
                    end
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                  module Forms
         
     | 
| 
      
 31 
     | 
    
         
            +
                    class Submit < Action
         
     | 
| 
      
 32 
     | 
    
         
            +
                    end
         
     | 
| 
      
 33 
     | 
    
         
            +
                  
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                  module Windows
         
     | 
| 
      
 37 
     | 
    
         
            +
                    class CloseAll < Action
         
     | 
| 
      
 38 
     | 
    
         
            +
                      action :onClose
         
     | 
| 
      
 39 
     | 
    
         
            +
                    end
         
     | 
| 
      
 40 
     | 
    
         
            +
                  
         
     | 
| 
      
 41 
     | 
    
         
            +
                    class Open < Action
         
     | 
| 
      
 42 
     | 
    
         
            +
                      string :url
         
     | 
| 
      
 43 
     | 
    
         
            +
                    end
         
     | 
| 
      
 44 
     | 
    
         
            +
                  
         
     | 
| 
      
 45 
     | 
    
         
            +
                  end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                  module Auth
         
     | 
| 
      
 48 
     | 
    
         
            +
                    class SaveCsrfToken < Action
         
     | 
| 
      
 49 
     | 
    
         
            +
                      string :token
         
     | 
| 
      
 50 
     | 
    
         
            +
                      action :onSave
         
     | 
| 
      
 51 
     | 
    
         
            +
                    end
         
     | 
| 
      
 52 
     | 
    
         
            +
                  
         
     | 
| 
      
 53 
     | 
    
         
            +
                  end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                  module Http
         
     | 
| 
      
 56 
     | 
    
         
            +
                    class Post < Action
         
     | 
| 
      
 57 
     | 
    
         
            +
                      string :url
         
     | 
| 
      
 58 
     | 
    
         
            +
                      hash :formData
         
     | 
| 
      
 59 
     | 
    
         
            +
                    end
         
     | 
| 
      
 60 
     | 
    
         
            +
                  
         
     | 
| 
      
 61 
     | 
    
         
            +
                    class Patch < Action
         
     | 
| 
      
 62 
     | 
    
         
            +
                      string :url
         
     | 
| 
      
 63 
     | 
    
         
            +
                      hash :formData
         
     | 
| 
      
 64 
     | 
    
         
            +
                    end
         
     | 
| 
      
 65 
     | 
    
         
            +
                  
         
     | 
| 
      
 66 
     | 
    
         
            +
                    class Delete < Action
         
     | 
| 
      
 67 
     | 
    
         
            +
                      string :url
         
     | 
| 
      
 68 
     | 
    
         
            +
                      hash :formData
         
     | 
| 
      
 69 
     | 
    
         
            +
                    end
         
     | 
| 
      
 70 
     | 
    
         
            +
                  
         
     | 
| 
      
 71 
     | 
    
         
            +
                  end
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                  ###
         
     | 
| 
      
 74 
     | 
    
         
            +
                end
         
     | 
| 
      
 75 
     | 
    
         
            +
              end
         
     | 
| 
      
 76 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,51 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Glib
         
     | 
| 
      
 2 
     | 
    
         
            +
              module JsonUi
         
     | 
| 
      
 3 
     | 
    
         
            +
                module ListBuilders
         
     | 
| 
      
 4 
     | 
    
         
            +
                  class Template < AbstractBuilder
         
     | 
| 
      
 5 
     | 
    
         
            +
                    def method_missing m, *args
         
     | 
| 
      
 6 
     | 
    
         
            +
                      add_element_to_array 'template', m, *args
         
     | 
| 
      
 7 
     | 
    
         
            +
                    end
         
     | 
| 
      
 8 
     | 
    
         
            +
                  
         
     | 
| 
      
 9 
     | 
    
         
            +
                    class AbstractTemplate < JsonUiElement
         
     | 
| 
      
 10 
     | 
    
         
            +
                      def editButtons(block)
         
     | 
| 
      
 11 
     | 
    
         
            +
                        json.editButtons do
         
     | 
| 
      
 12 
     | 
    
         
            +
                          block.call page.menu_builder
         
     | 
| 
      
 13 
     | 
    
         
            +
                        end
         
     | 
| 
      
 14 
     | 
    
         
            +
                      end
         
     | 
| 
      
 15 
     | 
    
         
            +
                    
         
     | 
| 
      
 16 
     | 
    
         
            +
                    end
         
     | 
| 
      
 17 
     | 
    
         
            +
                    
         
     | 
| 
      
 18 
     | 
    
         
            +
                    class Thumbnail < AbstractTemplate
         
     | 
| 
      
 19 
     | 
    
         
            +
                      string :title
         
     | 
| 
      
 20 
     | 
    
         
            +
                      string :subtitle
         
     | 
| 
      
 21 
     | 
    
         
            +
                      action :onClick
         
     | 
| 
      
 22 
     | 
    
         
            +
                    end
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
                  
         
     | 
| 
      
 25 
     | 
    
         
            +
                  class Section < AbstractBuilder
         
     | 
| 
      
 26 
     | 
    
         
            +
                    def header(options = {})
         
     | 
| 
      
 27 
     | 
    
         
            +
                      json.header do
         
     | 
| 
      
 28 
     | 
    
         
            +
                        json.padding options[:padding]
         
     | 
| 
      
 29 
     | 
    
         
            +
                        json.subviews do
         
     | 
| 
      
 30 
     | 
    
         
            +
                          yield page.view_builder
         
     | 
| 
      
 31 
     | 
    
         
            +
                        end
         
     | 
| 
      
 32 
     | 
    
         
            +
                      end
         
     | 
| 
      
 33 
     | 
    
         
            +
                    end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                    def rows(array = nil)
         
     | 
| 
      
 36 
     | 
    
         
            +
                      template = page.list_template_builder
         
     | 
| 
      
 37 
     | 
    
         
            +
                      json.rows do
         
     | 
| 
      
 38 
     | 
    
         
            +
                        if array
         
     | 
| 
      
 39 
     | 
    
         
            +
                          array.each do |row|
         
     | 
| 
      
 40 
     | 
    
         
            +
                            yield template, row
         
     | 
| 
      
 41 
     | 
    
         
            +
                          end
         
     | 
| 
      
 42 
     | 
    
         
            +
                        else
         
     | 
| 
      
 43 
     | 
    
         
            +
                          yield template
         
     | 
| 
      
 44 
     | 
    
         
            +
                        end
         
     | 
| 
      
 45 
     | 
    
         
            +
                      end
         
     | 
| 
      
 46 
     | 
    
         
            +
                    end
         
     | 
| 
      
 47 
     | 
    
         
            +
                  end
         
     | 
| 
      
 48 
     | 
    
         
            +
                  
         
     | 
| 
      
 49 
     | 
    
         
            +
                end
         
     | 
| 
      
 50 
     | 
    
         
            +
              end
         
     | 
| 
      
 51 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,18 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Glib
         
     | 
| 
      
 2 
     | 
    
         
            +
              module JsonUi
         
     | 
| 
      
 3 
     | 
    
         
            +
                class MenuBuilder < AbstractBuilder
         
     | 
| 
      
 4 
     | 
    
         
            +
                  def method_missing m, *args
         
     | 
| 
      
 5 
     | 
    
         
            +
                    add_element_to_array nil, m, *args
         
     | 
| 
      
 6 
     | 
    
         
            +
                  end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                  class MenuItem < JsonUiElement
         
     | 
| 
      
 9 
     | 
    
         
            +
                  end
         
     | 
| 
      
 10 
     | 
    
         
            +
                  
         
     | 
| 
      
 11 
     | 
    
         
            +
                  class Button < MenuItem
         
     | 
| 
      
 12 
     | 
    
         
            +
                    string :title
         
     | 
| 
      
 13 
     | 
    
         
            +
                    icon :icon
         
     | 
| 
      
 14 
     | 
    
         
            +
                    action :onClick
         
     | 
| 
      
 15 
     | 
    
         
            +
                  end
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,74 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Glib
         
     | 
| 
      
 2 
     | 
    
         
            +
              module JsonUi
         
     | 
| 
      
 3 
     | 
    
         
            +
                module PageHelper
         
     | 
| 
      
 4 
     | 
    
         
            +
                  def json_ui_page json
         
     | 
| 
      
 5 
     | 
    
         
            +
                    yield Page.new(json, self)
         
     | 
| 
      
 6 
     | 
    
         
            +
                  end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                  class Page
         
     | 
| 
      
 9 
     | 
    
         
            +
                    attr_reader :json, :context, :view_builder, :action_builder, :menu_builder
         
     | 
| 
      
 10 
     | 
    
         
            +
                    attr_reader :list_section_builder, :list_template_builder
         
     | 
| 
      
 11 
     | 
    
         
            +
                    attr_reader :table_section_builder, :table_template_builder
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                    def initialize json, context
         
     | 
| 
      
 14 
     | 
    
         
            +
                      @json = json
         
     | 
| 
      
 15 
     | 
    
         
            +
                      @context = context
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                      @view_builder = ViewBuilder.new(json, self)
         
     | 
| 
      
 18 
     | 
    
         
            +
                      @action_builder = ActionBuilder.new(json, self)
         
     | 
| 
      
 19 
     | 
    
         
            +
                      @menu_builder = MenuBuilder.new(json, self)
         
     | 
| 
      
 20 
     | 
    
         
            +
                      @list_section_builder = ListBuilders::Section.new(json, self)
         
     | 
| 
      
 21 
     | 
    
         
            +
                      @list_template_builder = ListBuilders::Template.new(json, self)
         
     | 
| 
      
 22 
     | 
    
         
            +
                      @table_section_builder = TableBuilders::Section.new(json, self)
         
     | 
| 
      
 23 
     | 
    
         
            +
                      @table_template_builder = TableBuilders::Template.new(json, self)
         
     | 
| 
      
 24 
     | 
    
         
            +
                    end
         
     | 
| 
      
 25 
     | 
    
         
            +
                    
         
     | 
| 
      
 26 
     | 
    
         
            +
                    def rightNavButtons
         
     | 
| 
      
 27 
     | 
    
         
            +
                      json.rightNavButtons do
         
     | 
| 
      
 28 
     | 
    
         
            +
                        yield @menu_builder
         
     | 
| 
      
 29 
     | 
    
         
            +
                      end
         
     | 
| 
      
 30 
     | 
    
         
            +
                    end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                    def header(options = {})
         
     | 
| 
      
 33 
     | 
    
         
            +
                      json.header do
         
     | 
| 
      
 34 
     | 
    
         
            +
                        json.padding options[:padding]
         
     | 
| 
      
 35 
     | 
    
         
            +
                        json.backgroundColor options[:backgroundColor]
         
     | 
| 
      
 36 
     | 
    
         
            +
                        json.subviews do
         
     | 
| 
      
 37 
     | 
    
         
            +
                          options[:childViews]&.call @view_builder
         
     | 
| 
      
 38 
     | 
    
         
            +
                        end
         
     | 
| 
      
 39 
     | 
    
         
            +
                      end
         
     | 
| 
      
 40 
     | 
    
         
            +
                    end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                    def list(options = {})
         
     | 
| 
      
 43 
     | 
    
         
            +
                      json.content do
         
     | 
| 
      
 44 
     | 
    
         
            +
                        json.subviews do
         
     | 
| 
      
 45 
     | 
    
         
            +
                          @view_builder.add_view('panels_list', options.reverse_merge(width: 'matchParent'))
         
     | 
| 
      
 46 
     | 
    
         
            +
                        end
         
     | 
| 
      
 47 
     | 
    
         
            +
                      end
         
     | 
| 
      
 48 
     | 
    
         
            +
                    end
         
     | 
| 
      
 49 
     | 
    
         
            +
                    
         
     | 
| 
      
 50 
     | 
    
         
            +
                    def table(options = {})
         
     | 
| 
      
 51 
     | 
    
         
            +
                      json.content do
         
     | 
| 
      
 52 
     | 
    
         
            +
                        json.subviews do
         
     | 
| 
      
 53 
     | 
    
         
            +
                          @view_builder.add_view('panels_table', options.reverse_merge(width: 'matchParent'))
         
     | 
| 
      
 54 
     | 
    
         
            +
                        end
         
     | 
| 
      
 55 
     | 
    
         
            +
                      end
         
     | 
| 
      
 56 
     | 
    
         
            +
                    end
         
     | 
| 
      
 57 
     | 
    
         
            +
                    
         
     | 
| 
      
 58 
     | 
    
         
            +
                    def scroll(options = {})
         
     | 
| 
      
 59 
     | 
    
         
            +
                      json.content do
         
     | 
| 
      
 60 
     | 
    
         
            +
                        json.subviews do
         
     | 
| 
      
 61 
     | 
    
         
            +
                          @view_builder.add_view('panels_scroll', options.reverse_merge(width: 'matchParent'))
         
     | 
| 
      
 62 
     | 
    
         
            +
                        end
         
     | 
| 
      
 63 
     | 
    
         
            +
                      end
         
     | 
| 
      
 64 
     | 
    
         
            +
                    end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                    def form(options = {})
         
     | 
| 
      
 67 
     | 
    
         
            +
                      scroll subviews: ->(scroll) do
         
     | 
| 
      
 68 
     | 
    
         
            +
                        @view_builder.add_view('panels_form', options.reverse_merge(width: 'matchParent'))
         
     | 
| 
      
 69 
     | 
    
         
            +
                      end
         
     | 
| 
      
 70 
     | 
    
         
            +
                    end
         
     | 
| 
      
 71 
     | 
    
         
            +
                  end
         
     | 
| 
      
 72 
     | 
    
         
            +
                end
         
     | 
| 
      
 73 
     | 
    
         
            +
              end
         
     | 
| 
      
 74 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,23 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Glib
         
     | 
| 
      
 2 
     | 
    
         
            +
              module JsonUi
         
     | 
| 
      
 3 
     | 
    
         
            +
                module ResponseHelper
         
     | 
| 
      
 4 
     | 
    
         
            +
                  def json_ui_response json
         
     | 
| 
      
 5 
     | 
    
         
            +
                    json.onResponse do
         
     | 
| 
      
 6 
     | 
    
         
            +
                      response = Response.new(json, self)
         
     | 
| 
      
 7 
     | 
    
         
            +
                      yield response.action_builder
         
     | 
| 
      
 8 
     | 
    
         
            +
                    end
         
     | 
| 
      
 9 
     | 
    
         
            +
                  end
         
     | 
| 
      
 10 
     | 
    
         
            +
                  
         
     | 
| 
      
 11 
     | 
    
         
            +
                  class Response
         
     | 
| 
      
 12 
     | 
    
         
            +
                    attr_reader :action_builder
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                    def initialize json, context
         
     | 
| 
      
 15 
     | 
    
         
            +
                      @json = json
         
     | 
| 
      
 16 
     | 
    
         
            +
                      @context = context
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                      @action_builder = ActionBuilder.new(json, self)
         
     | 
| 
      
 19 
     | 
    
         
            +
                    end
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,51 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Glib
         
     | 
| 
      
 2 
     | 
    
         
            +
              module JsonUi
         
     | 
| 
      
 3 
     | 
    
         
            +
                module TableBuilders
         
     | 
| 
      
 4 
     | 
    
         
            +
                  class Template < AbstractBuilder
         
     | 
| 
      
 5 
     | 
    
         
            +
                    def method_missing m, *args
         
     | 
| 
      
 6 
     | 
    
         
            +
                      add_element_to_array 'template', m, *args
         
     | 
| 
      
 7 
     | 
    
         
            +
                    end
         
     | 
| 
      
 8 
     | 
    
         
            +
                  
         
     | 
| 
      
 9 
     | 
    
         
            +
                    class AbstractTemplate < JsonUiElement
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                      def editButtons(block)
         
     | 
| 
      
 12 
     | 
    
         
            +
                        json.editButtons do
         
     | 
| 
      
 13 
     | 
    
         
            +
                          block.call page.menu_builder
         
     | 
| 
      
 14 
     | 
    
         
            +
                        end
         
     | 
| 
      
 15 
     | 
    
         
            +
                      end
         
     | 
| 
      
 16 
     | 
    
         
            +
                    
         
     | 
| 
      
 17 
     | 
    
         
            +
                    end
         
     | 
| 
      
 18 
     | 
    
         
            +
                    
         
     | 
| 
      
 19 
     | 
    
         
            +
                    class Default < AbstractTemplate
         
     | 
| 
      
 20 
     | 
    
         
            +
                      views :cellViews
         
     | 
| 
      
 21 
     | 
    
         
            +
                      action :onClick
         
     | 
| 
      
 22 
     | 
    
         
            +
                    end
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
                  
         
     | 
| 
      
 25 
     | 
    
         
            +
                  class Section < AbstractBuilder
         
     | 
| 
      
 26 
     | 
    
         
            +
                    def header(options = {})
         
     | 
| 
      
 27 
     | 
    
         
            +
                      json.header do
         
     | 
| 
      
 28 
     | 
    
         
            +
                        json.backgroundColor options[:backgroundColor]
         
     | 
| 
      
 29 
     | 
    
         
            +
                        json.cellViews do
         
     | 
| 
      
 30 
     | 
    
         
            +
                          options[:cellViews]&.call page.view_builder
         
     | 
| 
      
 31 
     | 
    
         
            +
                        end
         
     | 
| 
      
 32 
     | 
    
         
            +
                      end
         
     | 
| 
      
 33 
     | 
    
         
            +
                    end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                    def rows(array = nil)
         
     | 
| 
      
 36 
     | 
    
         
            +
                      template = page.table_template_builder
         
     | 
| 
      
 37 
     | 
    
         
            +
                      json.rows do
         
     | 
| 
      
 38 
     | 
    
         
            +
                        if array
         
     | 
| 
      
 39 
     | 
    
         
            +
                          array.each do |row|
         
     | 
| 
      
 40 
     | 
    
         
            +
                            yield template, row
         
     | 
| 
      
 41 
     | 
    
         
            +
                          end
         
     | 
| 
      
 42 
     | 
    
         
            +
                        else
         
     | 
| 
      
 43 
     | 
    
         
            +
                          yield template
         
     | 
| 
      
 44 
     | 
    
         
            +
                        end
         
     | 
| 
      
 45 
     | 
    
         
            +
                      end
         
     | 
| 
      
 46 
     | 
    
         
            +
                    end
         
     | 
| 
      
 47 
     | 
    
         
            +
                  end
         
     | 
| 
      
 48 
     | 
    
         
            +
                  
         
     | 
| 
      
 49 
     | 
    
         
            +
                end
         
     | 
| 
      
 50 
     | 
    
         
            +
              end
         
     | 
| 
      
 51 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,167 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Glib
         
     | 
| 
      
 2 
     | 
    
         
            +
              module JsonUi
         
     | 
| 
      
 3 
     | 
    
         
            +
                class ViewBuilder < AbstractBuilder
         
     | 
| 
      
 4 
     | 
    
         
            +
                  def add_view name, *args
         
     | 
| 
      
 5 
     | 
    
         
            +
                    add_element_to_array 'view', name, *args
         
     | 
| 
      
 6 
     | 
    
         
            +
                  end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                  def method_missing m, *args
         
     | 
| 
      
 9 
     | 
    
         
            +
                    add_view m, *args
         
     | 
| 
      
 10 
     | 
    
         
            +
                  end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                  class View < JsonUiElement
         
     | 
| 
      
 13 
     | 
    
         
            +
                    string :width
         
     | 
| 
      
 14 
     | 
    
         
            +
                    string :height
         
     | 
| 
      
 15 
     | 
    
         
            +
                    string :backgroundColor
         
     | 
| 
      
 16 
     | 
    
         
            +
                    hash :padding
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  ### View definitions
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                  class H1 < View
         
     | 
| 
      
 22 
     | 
    
         
            +
                    string :text
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                  class H2 < View
         
     | 
| 
      
 26 
     | 
    
         
            +
                    string :text
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                  class H3 < View
         
     | 
| 
      
 30 
     | 
    
         
            +
                    string :text
         
     | 
| 
      
 31 
     | 
    
         
            +
                  end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                  class Br < View
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                  class Hr < View
         
     | 
| 
      
 37 
     | 
    
         
            +
                  end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                  class Button < View
         
     | 
| 
      
 40 
     | 
    
         
            +
                    icon :icon
         
     | 
| 
      
 41 
     | 
    
         
            +
                    string :text
         
     | 
| 
      
 42 
     | 
    
         
            +
                    action :onClick
         
     | 
| 
      
 43 
     | 
    
         
            +
                  end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                  class Fab < View
         
     | 
| 
      
 46 
     | 
    
         
            +
                    icon :icon
         
     | 
| 
      
 47 
     | 
    
         
            +
                    action :onClick
         
     | 
| 
      
 48 
     | 
    
         
            +
                  end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                  class Image < View
         
     | 
| 
      
 51 
     | 
    
         
            +
                    string :url
         
     | 
| 
      
 52 
     | 
    
         
            +
                  end
         
     | 
| 
      
 53 
     | 
    
         
            +
                  
         
     | 
| 
      
 54 
     | 
    
         
            +
                  class Label < View
         
     | 
| 
      
 55 
     | 
    
         
            +
                    string :text
         
     | 
| 
      
 56 
     | 
    
         
            +
                  end
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                  module Fields
         
     | 
| 
      
 59 
     | 
    
         
            +
                    class AbstractField < View
         
     | 
| 
      
 60 
     | 
    
         
            +
                      string :name
         
     | 
| 
      
 61 
     | 
    
         
            +
                      string :label
         
     | 
| 
      
 62 
     | 
    
         
            +
                      string :value
         
     | 
| 
      
 63 
     | 
    
         
            +
                    end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                    class Text < AbstractField
         
     | 
| 
      
 66 
     | 
    
         
            +
                    end
         
     | 
| 
      
 67 
     | 
    
         
            +
                    
         
     | 
| 
      
 68 
     | 
    
         
            +
                    class Email < Text
         
     | 
| 
      
 69 
     | 
    
         
            +
                    end
         
     | 
| 
      
 70 
     | 
    
         
            +
                    
         
     | 
| 
      
 71 
     | 
    
         
            +
                    class Password < Text
         
     | 
| 
      
 72 
     | 
    
         
            +
                    end
         
     | 
| 
      
 73 
     | 
    
         
            +
                    
         
     | 
| 
      
 74 
     | 
    
         
            +
                    class Hidden < Text
         
     | 
| 
      
 75 
     | 
    
         
            +
                    end
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                    class Country < AbstractField
         
     | 
| 
      
 78 
     | 
    
         
            +
                      hash :region
         
     | 
| 
      
 79 
     | 
    
         
            +
                    end
         
     | 
| 
      
 80 
     | 
    
         
            +
                  
         
     | 
| 
      
 81 
     | 
    
         
            +
                    class Select < AbstractField
         
     | 
| 
      
 82 
     | 
    
         
            +
                      array :options
         
     | 
| 
      
 83 
     | 
    
         
            +
                    end
         
     | 
| 
      
 84 
     | 
    
         
            +
                  
         
     | 
| 
      
 85 
     | 
    
         
            +
                    class RadioGroup < View
         
     | 
| 
      
 86 
     | 
    
         
            +
                      string :name
         
     | 
| 
      
 87 
     | 
    
         
            +
                      views :childViews
         
     | 
| 
      
 88 
     | 
    
         
            +
                    end
         
     | 
| 
      
 89 
     | 
    
         
            +
                  
         
     | 
| 
      
 90 
     | 
    
         
            +
                    class Radio < View
         
     | 
| 
      
 91 
     | 
    
         
            +
                      string :label
         
     | 
| 
      
 92 
     | 
    
         
            +
                      string :value
         
     | 
| 
      
 93 
     | 
    
         
            +
                    end
         
     | 
| 
      
 94 
     | 
    
         
            +
                  end
         
     | 
| 
      
 95 
     | 
    
         
            +
                  
         
     | 
| 
      
 96 
     | 
    
         
            +
                  module Panels
         
     | 
| 
      
 97 
     | 
    
         
            +
                    class Form < View
         
     | 
| 
      
 98 
     | 
    
         
            +
                      string :url
         
     | 
| 
      
 99 
     | 
    
         
            +
                      string :method
         
     | 
| 
      
 100 
     | 
    
         
            +
                      # boolean :local
         
     | 
| 
      
 101 
     | 
    
         
            +
                  
         
     | 
| 
      
 102 
     | 
    
         
            +
                      def subviews(block)
         
     | 
| 
      
 103 
     | 
    
         
            +
                        # insert_method_field = false
         
     | 
| 
      
 104 
     | 
    
         
            +
                        # method = @args[:method].to_sym
         
     | 
| 
      
 105 
     | 
    
         
            +
                        # case method
         
     | 
| 
      
 106 
     | 
    
         
            +
                        # when :patch, :put, :delete
         
     | 
| 
      
 107 
     | 
    
         
            +
                        #   json.method :post
         
     | 
| 
      
 108 
     | 
    
         
            +
                        #   insert_method_field = true
         
     | 
| 
      
 109 
     | 
    
         
            +
                        # else
         
     | 
| 
      
 110 
     | 
    
         
            +
                        #   json.method method
         
     | 
| 
      
 111 
     | 
    
         
            +
                        # end
         
     | 
| 
      
 112 
     | 
    
         
            +
                  
         
     | 
| 
      
 113 
     | 
    
         
            +
                        json.subviews do
         
     | 
| 
      
 114 
     | 
    
         
            +
                          json.child! do
         
     | 
| 
      
 115 
     | 
    
         
            +
                            json.view 'fields/hidden-v1'
         
     | 
| 
      
 116 
     | 
    
         
            +
                            json.name 'authenticity_token'
         
     | 
| 
      
 117 
     | 
    
         
            +
                            json.value page.context.form_authenticity_token
         
     | 
| 
      
 118 
     | 
    
         
            +
                          end
         
     | 
| 
      
 119 
     | 
    
         
            +
                  
         
     | 
| 
      
 120 
     | 
    
         
            +
                          # if insert_method_field
         
     | 
| 
      
 121 
     | 
    
         
            +
                          #   json.child! do
         
     | 
| 
      
 122 
     | 
    
         
            +
                          #     json.view 'fields/hidden-v1'
         
     | 
| 
      
 123 
     | 
    
         
            +
                          #     json.name '_method'
         
     | 
| 
      
 124 
     | 
    
         
            +
                          #     json.value method
         
     | 
| 
      
 125 
     | 
    
         
            +
                          #   end
         
     | 
| 
      
 126 
     | 
    
         
            +
                          # end
         
     | 
| 
      
 127 
     | 
    
         
            +
                    
         
     | 
| 
      
 128 
     | 
    
         
            +
                          block.call(page.view_builder)
         
     | 
| 
      
 129 
     | 
    
         
            +
                        end
         
     | 
| 
      
 130 
     | 
    
         
            +
                      end
         
     | 
| 
      
 131 
     | 
    
         
            +
                    end
         
     | 
| 
      
 132 
     | 
    
         
            +
                    
         
     | 
| 
      
 133 
     | 
    
         
            +
                    class List < View
         
     | 
| 
      
 134 
     | 
    
         
            +
                      hash :nextPage
         
     | 
| 
      
 135 
     | 
    
         
            +
                  
         
     | 
| 
      
 136 
     | 
    
         
            +
                      def firstSection(block)
         
     | 
| 
      
 137 
     | 
    
         
            +
                        json.sections [1] do
         
     | 
| 
      
 138 
     | 
    
         
            +
                          block.call page.list_section_builder
         
     | 
| 
      
 139 
     | 
    
         
            +
                        end
         
     | 
| 
      
 140 
     | 
    
         
            +
                      end
         
     | 
| 
      
 141 
     | 
    
         
            +
                    end
         
     | 
| 
      
 142 
     | 
    
         
            +
                    
         
     | 
| 
      
 143 
     | 
    
         
            +
                    class Table < View
         
     | 
| 
      
 144 
     | 
    
         
            +
                      def firstSection(block)
         
     | 
| 
      
 145 
     | 
    
         
            +
                        json.sections [1] do
         
     | 
| 
      
 146 
     | 
    
         
            +
                          block.call page.table_section_builder
         
     | 
| 
      
 147 
     | 
    
         
            +
                        end
         
     | 
| 
      
 148 
     | 
    
         
            +
                      end
         
     | 
| 
      
 149 
     | 
    
         
            +
                    end
         
     | 
| 
      
 150 
     | 
    
         
            +
             
     | 
| 
      
 151 
     | 
    
         
            +
                    class Scroll < View
         
     | 
| 
      
 152 
     | 
    
         
            +
                      views :subviews
         
     | 
| 
      
 153 
     | 
    
         
            +
                    end
         
     | 
| 
      
 154 
     | 
    
         
            +
                    
         
     | 
| 
      
 155 
     | 
    
         
            +
                    class Split < View
         
     | 
| 
      
 156 
     | 
    
         
            +
                      views :leftViews
         
     | 
| 
      
 157 
     | 
    
         
            +
                      views :rightViews
         
     | 
| 
      
 158 
     | 
    
         
            +
                    end
         
     | 
| 
      
 159 
     | 
    
         
            +
                    
         
     | 
| 
      
 160 
     | 
    
         
            +
                    class Vertical < View
         
     | 
| 
      
 161 
     | 
    
         
            +
                    end
         
     | 
| 
      
 162 
     | 
    
         
            +
                  
         
     | 
| 
      
 163 
     | 
    
         
            +
                  end
         
     | 
| 
      
 164 
     | 
    
         
            +
                  
         
     | 
| 
      
 165 
     | 
    
         
            +
                end
         
     | 
| 
      
 166 
     | 
    
         
            +
              end
         
     | 
| 
      
 167 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,25 +1,37 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            json.title 'Actions'
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            render  
     | 
| 
      
 3 
     | 
    
         
            +
            render "#{@path_prefix}/nav_menu", json: json
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
               
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                  end
         
     | 
| 
       14 
     | 
    
         
            -
                end
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
                # json.child! do
         
     | 
| 
       17 
     | 
    
         
            -
                #   json.template 'default-v1'
         
     | 
| 
       18 
     | 
    
         
            -
                #   json.title 'Remote Content'
         
     | 
| 
       19 
     | 
    
         
            -
                #   json.onClick do
         
     | 
| 
       20 
     | 
    
         
            -
                #     json.action 'dialogs/open-v1'
         
     | 
| 
       21 
     | 
    
         
            -
                #     json.url ''
         
     | 
| 
      
 5 
     | 
    
         
            +
            json_ui_page json do |page|
         
     | 
| 
      
 6 
     | 
    
         
            +
              
         
     | 
| 
      
 7 
     | 
    
         
            +
              page.list firstSection: ->(section) do
         
     | 
| 
      
 8 
     | 
    
         
            +
                # section.header(padding: { top: 12, left: 16, right: 16, bottom: 12 }) do |header|
         
     | 
| 
      
 9 
     | 
    
         
            +
                #   header.panels_split width: 'matchParent', leftViews: ->(split) do
         
     | 
| 
      
 10 
     | 
    
         
            +
                #     split.label text: 'Left'
         
     | 
| 
      
 11 
     | 
    
         
            +
                #   end, rightViews: ->(split) do
         
     | 
| 
      
 12 
     | 
    
         
            +
                #     split.label text: 'Right'
         
     | 
| 
       22 
13 
     | 
    
         
             
                #   end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                #   header.fab icon: 'add', onClick: ->(action) { action.alert(message: 'TODO: edit name') }
         
     | 
| 
       23 
16 
     | 
    
         
             
                # end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                section.rows do |row|
         
     | 
| 
      
 19 
     | 
    
         
            +
                  row.thumbnail title: 'dialogs/alert', onClick: ->(action) do
         
     | 
| 
      
 20 
     | 
    
         
            +
                    action.dialogs_alert message: 'This is an alert'
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                  row.thumbnail title: 'dialogs/option', onClick: ->(action) do
         
     | 
| 
      
 24 
     | 
    
         
            +
                    action.dialogs_options message: 'Select one', buttons: ->(menu) do
         
     | 
| 
      
 25 
     | 
    
         
            +
                      menu.button title: 'Option1', onClick: ->(action) do 
         
     | 
| 
      
 26 
     | 
    
         
            +
                        action.dialogs_alert message: 'Option 1'
         
     | 
| 
      
 27 
     | 
    
         
            +
                      end
         
     | 
| 
      
 28 
     | 
    
         
            +
                      menu.button title: 'Option2', onClick: ->(action) do 
         
     | 
| 
      
 29 
     | 
    
         
            +
                        action.dialogs_alert message: 'Option 2'
         
     | 
| 
      
 30 
     | 
    
         
            +
                      end
         
     | 
| 
      
 31 
     | 
    
         
            +
                      menu.button title: 'Cancel'
         
     | 
| 
      
 32 
     | 
    
         
            +
                    end
         
     | 
| 
      
 33 
     | 
    
         
            +
                  end
         
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
                
         
     | 
| 
       24 
36 
     | 
    
         
             
              end
         
     | 
| 
       25 
     | 
    
         
            -
            end
         
     | 
| 
      
 37 
     | 
    
         
            +
            end
         
     | 
    
        data/config/routes.rb
    CHANGED
    
    | 
         @@ -1,4 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            Glib::Web::Engine.routes.draw do
         
     | 
| 
       2 
     | 
    
         
            -
               
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
      
 2 
     | 
    
         
            +
              scope module: :glib do
         
     | 
| 
      
 3 
     | 
    
         
            +
                get 'json_ui_garage', to: 'home#json_ui_garage'
         
     | 
| 
      
 4 
     | 
    
         
            +
                post 'json_ui_garage', to: 'home#json_ui_garage'
         
     | 
| 
      
 5 
     | 
    
         
            +
              end
         
     | 
| 
       4 
6 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: glib-web
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.9
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - ''
         
     | 
| 
         @@ -34,8 +34,16 @@ files: 
     | 
|
| 
       34 
34 
     | 
    
         
             
            - app/controllers/concerns/application/json/transformation.rb
         
     | 
| 
       35 
35 
     | 
    
         
             
            - app/controllers/concerns/application/json/ui.rb
         
     | 
| 
       36 
36 
     | 
    
         
             
            - app/controllers/concerns/application/json/validation.rb
         
     | 
| 
       37 
     | 
    
         
            -
            - app/controllers/home_controller.rb
         
     | 
| 
       38 
     | 
    
         
            -
            - app/helpers/glib/ 
     | 
| 
      
 37 
     | 
    
         
            +
            - app/controllers/glib/home_controller.rb
         
     | 
| 
      
 38 
     | 
    
         
            +
            - app/helpers/glib/json_ui/abstract_builder.rb
         
     | 
| 
      
 39 
     | 
    
         
            +
            - app/helpers/glib/json_ui/action_builder.rb
         
     | 
| 
      
 40 
     | 
    
         
            +
            - app/helpers/glib/json_ui/json_ui_helper.rb
         
     | 
| 
      
 41 
     | 
    
         
            +
            - app/helpers/glib/json_ui/list_builders.rb
         
     | 
| 
      
 42 
     | 
    
         
            +
            - app/helpers/glib/json_ui/menu_builder.rb
         
     | 
| 
      
 43 
     | 
    
         
            +
            - app/helpers/glib/json_ui/page_helper.rb
         
     | 
| 
      
 44 
     | 
    
         
            +
            - app/helpers/glib/json_ui/response_helper.rb
         
     | 
| 
      
 45 
     | 
    
         
            +
            - app/helpers/glib/json_ui/table_builders.rb
         
     | 
| 
      
 46 
     | 
    
         
            +
            - app/helpers/glib/json_ui/view_builder.rb
         
     | 
| 
       39 
47 
     | 
    
         
             
            - app/views/app/views/json_ui/vue/renderer.html.erb
         
     | 
| 
       40 
48 
     | 
    
         
             
            - app/views/json_ui/garage/_nav_menu.json.jbuilder
         
     | 
| 
       41 
49 
     | 
    
         
             
            - app/views/json_ui/garage/actions/index.json.jbuilder
         
     | 
| 
         @@ -1,21 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            class HomeController < ApplicationController
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
              def json_ui_garage
         
     | 
| 
       4 
     | 
    
         
            -
                @path_prefix = 'json_ui/garage'
         
     | 
| 
       5 
     | 
    
         
            -
                @sample_image_url = 'https://cdn-images-1.medium.com/max/1200/1*Qc0XxYm-qAZL-7tjjlNfrg.png'
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
                # We can't use prepend_view_path because it affects the app, not the gem
         
     | 
| 
       8 
     | 
    
         
            -
                path = "#{@path_prefix}/#{params[:path] || 'home/index'}"
         
     | 
| 
       9 
     | 
    
         
            -
                render path
         
     | 
| 
       10 
     | 
    
         
            -
              end
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
              def json_ui_garage_url(options = {})
         
     | 
| 
       13 
     | 
    
         
            -
                Glib::Web::Engine.routes.url_helpers.json_ui_garage_url(options.merge(
         
     | 
| 
       14 
     | 
    
         
            -
                  host: request.host, 
         
     | 
| 
       15 
     | 
    
         
            -
                  port: request.port, 
         
     | 
| 
       16 
     | 
    
         
            -
                  _render: params[:_render], format: params[:format])
         
     | 
| 
       17 
     | 
    
         
            -
                )
         
     | 
| 
       18 
     | 
    
         
            -
              end
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
              helper_method :json_ui_garage_url
         
     | 
| 
       21 
     | 
    
         
            -
            end
         
     |