csedl-stimulus-dropdown 0.0.1 → 0.0.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 44ac5608bddcb791672dfefa6a52bc403acf3a22572290c303dbc46f7eaca64f
4
- data.tar.gz: 28470466e6f2d317f3cbbeadcc7e817f99ec92264586d78bbed7414ff21737f8
3
+ metadata.gz: 9e7fd4091a8b1b4ebdb69ec8beb943dc01cee6818dbe63170038a9cf6af22076
4
+ data.tar.gz: 397008a25d6c26440055c32c40fd6456eb64e2a4188e26319955789ee8373f4e
5
5
  SHA512:
6
- metadata.gz: e2c343785a57540605e9f3c77777333ab475e56e547e56639dbe59e4fd68ea1443b867752da7c172e139633efb74d3c30b2ea49e29d8c33691ec9d9be1c6ba9a
7
- data.tar.gz: 71988429f909ca509b867e92631ebe065dc903204669b476d3a51a49e2fb85214501929acb65886668bb929fa1f4fd581376d683aa0b74d8033e2536e06ae749
6
+ metadata.gz: 11a98f6622bac56e69f72d22f6da3d1a644de360a2c109fc1eea9ed87cfdb0d12d4cc5af738d67985d9f4333c4bd3c131af9e3e9df391751d72f590136f3eb69
7
+ data.tar.gz: 672bceb4b3930f1fca0ff9af4cea2830ce08a34f7a544d8c0b6f5623d53d47cf661ea967e7efbddc2200d59314b5435a660a629f45b1c62cdf44b07cb3c71e28
data/README.md ADDED
@@ -0,0 +1,21 @@
1
+ # Stimulus Dropdown
2
+
3
+ This is nothing else than two view helpers corresponding to the npm package
4
+ [@csedl/stimulus-dropdown](https://www.npmjs.com/package/@csedl/stimulus-dropdown)
5
+
6
+ You also can just paste this [view helpers](https://gitlab.com/sedl/csedl-stimulus-dropdown/-/blob/main/lib/stimulus_dropdown/view_helpers.rb?ref_type=heads)
7
+ into your app and modify as you want.
8
+
9
+ If you work with the helpers on this gem, you can setup a initializer for a custom close-button, like:
10
+
11
+ ```ruby
12
+ #=> config/initializers/csedl_stimulus_dropdown.rb
13
+
14
+ StimulusDropdown.configure do |config|
15
+ config.close_button_proc = ->(view) do
16
+ view.content_tag(:span, 'X', class: 'close-button')
17
+ end
18
+ end
19
+ ```
20
+
21
+ License: MIT
@@ -0,0 +1,19 @@
1
+ require "csedl_stimulus_dropdown/railtie" if defined?(Rails)
2
+ require "csedl_stimulus_dropdown/view_helpers"
3
+
4
+ module StimulusDropdown
5
+ class << self
6
+ attr_accessor :close_button_proc
7
+
8
+ def configure
9
+ yield self
10
+ end
11
+
12
+ def reset_config!
13
+ self.close_button_proc = nil
14
+ end
15
+ end
16
+
17
+ # Default fallback if no config is set
18
+ self.close_button_proc = nil
19
+ end
@@ -0,0 +1,10 @@
1
+ module CsedlStimulusDropdown
2
+ class Railtie < Rails::Railtie
3
+
4
+ initializer "csedl_stimulus_dropdown.view_helpers" do
5
+ ActiveSupport.on_load(:action_view) do
6
+ include CsedlStimulusDropdown::ViewHelpers
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,138 @@
1
+ module CsedlStimulusDropdown
2
+ module ViewHelpers
3
+ #== dropdown helper
4
+ # @param [button_content] Proc or String for content of the button element
5
+ # @param [panel_at_place] true (default: false) => it would render the panel into content_for(:dropdown_panels) on sticky parts (left-menu / top-bar) panels should be at place for avoiding that the panel would scroll with the content
6
+ # @block [panel_content] Panel Content as block
7
+ # what it does:
8
+ # * a) wraps the button_content in element like: %button{ data: { controller: 'dropdown', ... } } and renders it at place
9
+ # * b) wraps the panel_content in a corresponding element and renders it to the dropdown_panels-box (because of z-index-hierarchy)
10
+ # * c) the stimulus controller always adds the class .dropdown-panel to the panel
11
+ def dropdown(button_content, title = nil, options = {}, &panel_content)
12
+ if title.is_a?(Hash)
13
+ options = title.dup
14
+ title = nil
15
+ end
16
+
17
+ panel_at_place = options.delete(:panel_at_place)
18
+
19
+ id = "dropdown-panel-#{SecureRandom.hex(4)}"
20
+
21
+ src = options.delete(:src)
22
+
23
+ # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
24
+ # create the Button
25
+ # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
26
+
27
+ button_options = options.dup
28
+ button_options[:class] = [options[:class], 'dropdown-button'].compact.join(' ')
29
+ button_options = button_options.merge(data: { controller: 'csedl-dropdown', toggle: id })
30
+
31
+ button_content = capture(&button_content) if button_content.is_a?(Proc)
32
+ btn = content_tag(:div, button_content, button_options)
33
+
34
+ # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
35
+ # create the panel
36
+ # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
37
+
38
+ panel_options = options.dup
39
+ panel_options[:class] = [options[:class], 'dropdown-panel hide'].compact.join(' ')
40
+ panel_options[:id] = id
41
+ panel_options['data-src'] = src if src
42
+ close_btn_proc = StimulusDropdown.close_button_proc
43
+
44
+ panel = content_tag(:div, panel_options) do
45
+ safe_join([
46
+ content_tag(:div, class: 'header') do
47
+ concat content_tag(:div, title, class: 'title')
48
+ concat content_tag(:div, class: 'buttons') { close_btn_proc.present? ? close_btn_proc.call(self) : 'X' }
49
+ end,
50
+ content_tag(:div, class: 'content') do
51
+ capture(&panel_content) if block_given?
52
+ end
53
+ ])
54
+ end
55
+
56
+ if panel_at_place
57
+ btn + panel
58
+ else
59
+ content_for(:dropdown_panels, panel)
60
+ btn
61
+ end
62
+ end
63
+
64
+
65
+ def tooltip(label, options = {}, &content)
66
+
67
+ panel_at_place = options.delete(:panel_at_place) || false
68
+ delay = options.delete(:delay) || 0.4
69
+ src = options.delete(:src)
70
+ label_class = options.delete(:label_class) || 'tooltip-label'
71
+
72
+ id = ['tooltip', SecureRandom.hex(4)].join('-')
73
+
74
+ lab = if label.is_a?(Proc)
75
+ capture &label
76
+ else
77
+ label
78
+ end
79
+ cont = capture(&content) if block_given?
80
+
81
+ # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
82
+ # create the Label
83
+ # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
84
+
85
+ label_options = options.dup
86
+ label_options[:id] = options.delete(:id)
87
+ label_options[:class] = [options[:class], label_class].compact.join(' ')
88
+ label_options = label_options.merge(data: { controller: 'csedl-tooltip', toggle: id, delay: delay })
89
+
90
+ label_element = if block_given? && cont.present?
91
+ content_tag(:span, label_options) do
92
+ lab
93
+ end
94
+ else
95
+ lab
96
+ end
97
+
98
+ # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
99
+ # create the panel
100
+ # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
101
+
102
+ panel_options = options.dup
103
+ panel_options[:class] = [options[:class], 'tooltip-panel hide'].compact.join(' ')
104
+ panel_options[:id] = id
105
+ panel_options['data-src'] = src if src
106
+
107
+ panel_element = if block_given? && cont.present?
108
+ content_tag(:div, panel_options) do
109
+ r2 = content_tag :div, id: "arrow-#{id}" do
110
+ ; nil;
111
+ end
112
+ r2 << content_tag(:div, class: 'tooltip-content') do
113
+ cont
114
+ end
115
+ end
116
+ end
117
+
118
+ # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
119
+ # return the result
120
+ # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
121
+
122
+
123
+ if !panel_element
124
+ label_element
125
+ elsif panel_at_place
126
+ r = label_element
127
+ r << panel_element
128
+ else
129
+ content_for(:dropdown_panels) do
130
+ panel_element
131
+ end
132
+ label_element
133
+ end
134
+
135
+ end
136
+
137
+ end
138
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: csedl-stimulus-dropdown
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian Sedlmair
@@ -15,7 +15,11 @@ email: christian@sedlmair.ch
15
15
  executables: []
16
16
  extensions: []
17
17
  extra_rdoc_files: []
18
- files: []
18
+ files:
19
+ - README.md
20
+ - lib/csedl-stimulus-dropdown.rb
21
+ - lib/csedl_stimulus_dropdown/railtie.rb
22
+ - lib/csedl_stimulus_dropdown/view_helpers.rb
19
23
  homepage: https://gitlab.com/sedl/csedl-stimulus-dropdown
20
24
  licenses:
21
25
  - MIT